mysql - 違い - sql join




INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINの違いは何ですか? (2)

この質問には既に回答があります:

MySQLの INNER JOINLEFT JOINRIGHT JOINFULL JOINの違いは何ですか?


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

SQLにはさまざまなタイプの結合が用意されています。

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

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

右ジョイン :左テーブルに一致するものがなくても、右テーブルからすべてのローを返します。

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

ジョインされたテーブルには、両方のテーブルのすべてのレコードが格納され、いずれかの側に不一致がある場合はNULLが入ります。

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

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

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

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

表A

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

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

INNER JOIN

:これは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

LEFT JOIN

: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

右ジョイン

: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

フル・ジョイン

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

構文

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

興味深い事実

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

(LEFT、RIGHTまたはFULL)OUTER結合の場合、順序問題

このLinkチェックすると、参加順序に関する興味深い情報が表示されます


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

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

RIGHT JOINは上記と似ていますが、RIGHTテーブルのすべてのレコードを取得します

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





outer-join