SQLでよく使う「INNER JOIN」「LEFT OUTER JOIN」「RIGHT OUTER JOIN」「FULL OUTER JOIN」についてまとめてみます。
SQLで良く使うJOINについて
SQLでよく使う「INNER JOIN」「LEFT OUTER JOIN」「RIGHT OUTER JOIN」「FULL OUTER JOIN」についてまとめてみます。
データの準備
まずはデータを準備します。
------------------------------------------ --テーブル作成 ------------------------------------------ CREATE TABLE test_main_table ( no INT ,name VARCHAR(20) ) CREATE TABLE test_sub_table ( no INT ,age int ) ------------------------------------------ --データ作成 ------------------------------------------ INSERT INTO test_main_table VALUES ( 1, '太郎さん' ) INSERT INTO test_main_table VALUES ( 2, '次郎さん' ) INSERT INTO test_main_table VALUES ( 4, '四郎さん' ) INSERT INTO test_main_table VALUES ( 5, '五郎さん' ) INSERT INTO test_sub_table VALUES ( 1, 10 ) INSERT INTO test_sub_table VALUES ( 2, 20 ) INSERT INTO test_sub_table VALUES ( 3, 30 ) INSERT INTO test_sub_table VALUES ( 5, 50 )
INNER JOIN
INNER JOINは「両方にnoが存在するデータ」の集合を取得します。
---------------------------------------- --INNER JOIN ---------------------------------------- SELECT test_main_table.no AS test_main_table_no ,test_sub_table.no AS test_sub_table_no ,name ,age FROM test_main_table INNER JOIN test_sub_table ON test_main_table.no = test_sub_table.no
実行結果は
test_main_table_no | test_sub_table_no | name | age |
---|---|---|---|
1 | 1 | 太郎さん | 10 |
2 | 2 | 次郎さん | 20 |
5 | 5 | 五郎さん | 50 |
です。
LEFT OUTER JOIN
LEFT OUTER JOINは「左側のテーブルに存在noすべてとそれに該当する右側のデータ」の集合を取得します。
---------------------------------------- --LEFT OUTER JOIN ---------------------------------------- SELECT test_main_table.no AS test_main_table_no ,test_sub_table.no AS test_sub_table_no ,name ,age FROM test_main_table LEFT OUTER JOIN test_sub_table ON test_main_table.no = test_sub_table.no
以下が実行結果です。
test_main_table_no | test_sub_table_no | name | age |
---|---|---|---|
1 | 1 | 太郎さん | 10 |
2 | 2 | 次郎さん | 20 |
4 | NULL | 四郎さん | NULL |
5 | 5 | 五郎さん | 50 |
RIGHT OUTER JOIN
RIGHT OUTER JOINは「右側のテーブルに存在noすべてとそれに該当する左側のデータ」の集合を取得します。
---------------------------------------- --RIGHT OUTER JOIN ---------------------------------------- SELECT test_main_table.no AS test_main_table_no ,test_sub_table.no AS test_sub_table_no ,name ,age FROM test_main_table RIGHT OUTER JOIN test_sub_table ON test_main_table.no = test_sub_table.no
以下が実行結果です。
test_main_table_no | test_sub_table_no | name | age |
---|---|---|---|
1 | 1 | 太郎さん | 10 |
2 | 2 | 次郎さん | 20 |
NULL | 3 | NULL | 30 |
5 | 5 | 五郎さん | 50 |
FULL OUTER JOIN
FULL OUTER JOINは「左側のテーブルと右側に存在するすべて組み合わせのnoのデータ」の集合を取得します。
---------------------------------------- --FULL OUTER JOIN ---------------------------------------- SELECT test_main_table.no AS test_main_table_no ,test_sub_table.no AS test_sub_table_no ,name ,age FROM test_main_table FULL OUTER JOIN test_sub_table ON test_main_table.no = test_sub_table.no
以下が実行結果です。
test_main_table_no | test_sub_table_no | name | age |
---|---|---|---|
1 | 1 | 太郎さん | 10 |
2 | 2 | 次郎さん | 20 |
4 | NULL | 四郎さん | NULL |
5 | 5 | 五郎さん | 50 |
NULL | 3 | NULL | 30 |