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 |
