web-dev-qa-db-ja.com

内部結合、左側結合、右側結合、および完全結合の違いは何ですか?

MySQL INNER JOINLEFT JOINRIGHT JOINおよびFULL JOINの違いは何ですか?

1445
Lion King

コードプロジェクト についてのこの元の記事を読んでおくと役に立ちます: SQL結合の視覚的表現

alt text

またこの記事をチェックしなさい: SQLサーバ - よりよい性能 - 左に結合するかどうか。

MySQLのJOINとOUTER JOINの違い でオリジナルのものを見つけてください。

2897
Pranay Rana

INNER JOIN 外部キーに基づいて両方のテーブル間で共通のすべてのレコードを取得します。

LEFT JOIN LEFTリンクテーブルからすべてのレコードを取得しますが、RIGHTテーブルからいくつかの列を選択した場合、関連レコードがない場合、これらの列にはNULLが入ります。

RIGHT JOIN は上記と同じですが、RIGHTテーブル内のすべてのレコードを取得します。

FULL JOIN 両方のテーブルからすべてのレコードを取得し、反対側のテーブルに関連レコードが存在しない列にNULLを挿入します。

613
Brian Leeming

SQL JOIN句は、2つ以上のテーブル間の共通フィールドに基づいて、2つ以上のテーブルの行を結合するために使用されます。

SQLには、さまざまな種類の結合があります。

INNER JOIN :両方のテーブルに一致がある場合に行を返します。

LEFT JOIN :右側のテーブルに一致するものがない場合でも、左側のテーブルからすべての行を返します。

RIGHT JOIN :左側のテーブルに一致するものがない場合でも、右側のテーブルからすべての行を返します。

FULL JOIN :左右両方の外部結合の結果を結合します。

結合テーブルには、両方のテーブルからのすべてのレコードが含まれ、どちらかの側で一致しない場合はNULLを入力します。

SELF JOIN :テーブルが2つのテーブルであるかのようにテーブルをそれ自体に結合し、一時的にSQLステートメント内の少なくとも1つのテーブルの名前を変更するために使用されます。

CARTESIAN JOIN :2つ以上の結合テーブルからレコードセットのデカルト積を返します。

私たちはDetailsで最初の4つの結合をそれぞれ取ることができます。

次の値を持つ2つのテーブルがあります。

TableA

id  firstName                  lastName
.......................................
1   arun                        prasanth                 
2   ann                         antony                   
3   sruthy                      abc                      
6   new                         abc                                           

表B

id2 age Place
................
1   24  kerala
2   24  usa
3   25  ekm
5   24  chennai

................................................ ..................

内部結合

:2つのテーブルの共通部分、つまり、それらがTableAとTableBで共通している行を示します。

構文

SELECT table1.column1, table2.column2...
  FROM table1
 INNER JOIN table2
    ON table1.common_field = table2.common_field;

サンプル表に適用してください。

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
  FROM TableA
 INNER JOIN TableB
    ON TableA.id = TableB.id2;

結果はなります

firstName       lastName       age  Place
..............................................
arun            prasanth        24  kerala
ann             antony          24  usa
sruthy          abc             25  ekm

左結合

:は、TableA内の選択されたすべての行と、TableB内の共通の選択された行をすべて表示します。

構文

SELECT table1.column1, table2.column2...
  FROM table1
  LEFT JOIN table2
    ON table1.common_field = table2.common_field;

サンプル表に適用してください。

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
  FROM TableA
  LEFT JOIN TableB
    ON TableA.id = TableB.id2;

結果

firstName                   lastName                    age   Place
...............................................................................
arun                        prasanth                    24    kerala
ann                         antony                      24    usa
sruthy                      abc                         25    ekm
new                         abc                         NULL  NULL

RIGHT JOIN

:は、TableB内の選択されたすべての行と、TableA内の共通の選択された行をすべて表示します。

構文

SELECT table1.column1, table2.column2...
  FROM table1
 RIGHT JOIN table2
    ON table1.common_field = table2.common_field;

サンプル表に適用してください。

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
  FROM TableA
 RIGHT JOIN TableB
    ON TableA.id = TableB.id2;

結果

firstName                   lastName                    age     Place
...............................................................................
arun                        prasanth                    24     kerala
ann                         antony                      24     usa
sruthy                      abc                         25     ekm
NULL                        NULL                        24     chennai

FULL JOIN

:両方のテーブルから選択されたすべての値を返します。

構文

SELECT table1.column1, table2.column2...
  FROM table1
  FULL JOIN table2
    ON table1.common_field = table2.common_field;

サンプル表に適用してください。

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
  FROM TableA
  FULL JOIN TableB
    ON TableA.id = TableB.id2;

結果

firstName                   lastName                    age    Place
...............................................................................
arun                        prasanth                    24    kerala
ann                         antony                      24    usa
sruthy                      abc                         25    ekm
new                         abc                         NULL  NULL
NULL                        NULL                        24    chennai

興味深い事実

内部結合の場合、順序は関係ありません

(LEFT、RIGHTまたはFULL)OUTER結合の場合、順序は重要です

Linkこれをチェックしてください。それはあなたに結合順序についての興味深い詳細を与えるでしょう

597