内部結合と外部結合の違いは何ですか?

内部結合と外部結合の両方を使用して、2つ以上のテーブルのデータを結合します。ただし、いくつかの重要な違いがあります。この記事を読んで、各コマンドの長所とその使用時期を確認してください。

このレッスンと他のレッスンを最大限に活用するには、必ず例を使用して練習してください。

すべてのこのレッスンの例は、Microsoft SQL Server ManagementStudioとAdventureWorks2012データベースに基づいています。ガイドを使用して、これらの無料ツールの使用を開始します。SQLServerの使用開始

内部結合と外部結合の違いは何ですか?

内部結合と外部結合は、2つまたは結合条件を使用して、より多くのテーブルを1つの結果にまとめます。結合条件は、各テーブルの列を相互に照合する方法を指定します。ほとんどの場合、目的はテーブル間で等しい値を見つけ、それらの一致を含めることです。

これの最も一般的なケースは、あるテーブルの外部キーを別のテーブルの主キーと一致させる場合です。 、IDを使用して値を検索する場合など。

一致条件が成功すると、内部結合と外部結合の両方に両方のテーブルの行が含まれますが、誤った一致条件の処理方法が異なります。

内部結合には、一致しない行は含まれません。一方、外部結合にはそれらが含まれます。

それぞれのメカニズムをもう少し深く掘り下げてみましょう

内部結合のメカニズム

内部結合は結果を返すために使用されます2つ以上のテーブルの行を結合することによって。

結合条件がない最も単純なケースでは、内部結合は1つのテーブルのすべての行を別のテーブルの行と結合します。最初のテーブルに3行、2番目のテーブルに4行が含まれている場合、最終結果には12(3 x 4 = 12)が含まれます!

結合条件の目的は、結合される行を制限することです。ほとんどの場合、行は列に一致するものに制限されます。

人が複数の電話番号を持っている場合、複数の一致が行われます。このことから、各人よりも多くの行が返される可能性があることがわかります。

参加するテーブル

逆に、人が電話番号を持っていない場合、PersonPhoneにエントリはなく、一致も行われません。一致する人だけが含まれるため、その特定の人は結果に含まれません。

例を試してみましょう。

内部結合の例

仮定します。人事マネージャーが電話帳を作成したいと考えています。彼らはその人の名、姓、肩書き、電話番号を求めています。これを作成するためにどのクエリを使用できますか?

これがトリックを実行するクエリです:

SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P INNER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName

INNER JOINは、どのテーブルを指定します参加するための一致条件。条件PH.PhoneNumberTyeID = 3は、クエリを作業番号に制限します。

上記を実行すると、次の結果が得られます。

内部結合の結果

内部結合は、一致条件が一致する行のみを返すことに注意してください本当です。この例では、BusinessEntityIDが一致しない行は含まれていません。これは、従業員がリストに含まれないために電話番号を持っていない場合に問題になる可能性があります。

これらの従業員を含める場合は、外部結合を使用できます。

外部結合の仕組み

外部結合は、2つ以上のテーブルの行を組み合わせて結果を返すために使用されます。ただし、内部結合とは異なり、外部結合は、結合条件が失敗した場合でも、指定された1つのテーブルからすべての行を返します。

上記の電話帳の例を見てください。人事マネージャーが職場の電話番号を持っているかどうかに関係なくすべての従業員を一覧表示したい場合は、外部結合を使用するとそれが可能になります。

SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P LEFT OUTER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName

できますこの記事で左外部結合と右外部結合の詳細を確認してください。今のところ、LEFT OUTER JOINを使用すると、一致するものが見つからなくても、FROM句のテーブルのすべての行が結果に含まれることを理解してください。他のテーブル。

一致するものが見つからない場合は、列にNULLが配置されます。

これは以下の動作で確認できます。

外部結合の結果

例の注意キャサリンアベルの電話番号がNULLです。これは、Catherineの作業番号がリストされておらず、結合中に一致するものが見つからなかったためです。

これが内部結合であった場合、この行は結果に含まれませんでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です