INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOINの違いは何ですか?

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の違いを参照してください。

解説 (34)

INNER JOINは、指定されたON句に基づいて、両テーブル間で共通するすべてのレコードを取得します。

**しかし、RIGHTテーブルからいくつかの列を選択した場合、関連するレコードがないと、これらの列はNULLを含みます。

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

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

解説 (6)

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

解説 (10)