MySQLのINNER JOIN
, LEFT JOIN
, RIGHT JOIN
, FULL JOIN
の違いは何ですか?
MySQLでは、どのような違いがありますか?
The Code Project**に掲載されているこのオリジナル記事を読むと、とても役に立ちます。Visual Representation of SQL Joinsを参照してください。
.
また、この記事もチェックしてみてください。SQL SERVER - Better Performance - LEFT JOIN or NOT IN?.
オリジナルの記事はこちらです。MySQLにおけるJOINとOUTER JOINの違いを参照してください。
INNER JOINは、指定されたON句に基づいて、両テーブル間で共通するすべてのレコードを取得します。
**しかし、RIGHTテーブルからいくつかの列を選択した場合、関連するレコードがないと、これらの列はNULLを含みます。
RIGHT JOINは上記と同様ですが、RIGHTテーブルのすべてのレコードを取得します。
FULL JOINは、両方のテーブルからすべてのレコードを取得し、反対側のテーブルに関連するレコードが存在しない列にはNULLを入れます。
SQLのJOIN句は、2つ以上のテーブルの行を結合するために使われます。 2つ以上のテーブルからの行を結合するために使用されます。
SQLには様々な種類の結合があります。
INNER JOIN: 両方のテーブルに一致するものがある場合に行を返します。
LEFT JOIN:右のテーブルに一致するものがなくても、左のテーブルのすべての行を返します。
RIGHT 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
TableB
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
INNER JOIN(インナー・ジョイント
注 :2つのテーブルの交点、つまり、テーブルAとテーブルBで共通する行を求めます。
構文
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
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
完全な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
**おもしろい事実
INNER結合の場合、順序は重要ではありません。
LEFT、RIGHT、FULLのOUTER結合では、順序は重要です。
こちらの [Link][1] をご覧になると、結合順序に関する興味深い詳細を知ることができます。
[1]: https://stackoverflow.com/questions/9614922/does-the-join-order-matter-in-sql