結合(JOIN)

Tag:

複数テーブルの結合方法について説明します。結合には、内部結合と外部結合があります。
内部結合では、両方のテーブルで対応するデータが存在するものだけを表示します。
外部結合(左外部結合、右外部結合、完全外部結合)では、どちらかのテーブルにしか存在しないデータについても表示します。

下記テーブルを例に説明します。

tableA
id codeA
1 aaaaa
2 bbbbb
3 ccccc
4 ddddd
5 eeeee
tableB
id tableA_id codeB
1 2 apple
2 4 orange
3 2 banana
4 1 peach
5 6 melon
内部結合
内部結合では、INNER JOINを使用します。

SELECT tableA.id AS id_A,
       tableB.id AS id_B,
       codeA,
       codeB
FROM tableA
INNER JOIN tableB
ON tableA.id = tableB.tableA_id
内部結合
id_A id_B codeA codeB
2 1 bbbbb apple
4 2 ddddd orange
2 3 bbbbb banana
1 4 aaaaa peach
左外部結合
左外部結合では、LEFT JOINを使用します。

/* 左外部結合 */
SELECT tableA.id AS id_A,
       tableB.id AS id_B,
       codeA,
       codeB
FROM tableA
LEFT JOIN tableB
ON tableA.id = tableB.tableA_id
左外部結合
id_A id_B codeA codeB
1 4 aaaaa peach
2 1 bbbbb apple
2 3 bbbbb banana
3 NULL ccccc NULL
4 2 ddddd orange
5 NULL eeeee NULL
右外部結合
右外部結合では、RIGHT JOINを使用します。

/* 右外部結合 */
SELECT tableA.id AS id_A,
       tableB.id AS id_B,
       codeA,
       codeB
FROM tableA
RIGHT JOIN tableB
ON tableA.id = tableB.tableA_id
右外部結合
id_A id_B codeA codeB
2 1 bbbbb apple
4 2 ddddd orange
2 3 bbbbb banana
1 4 aaaaa peach
NULL 5 NULL melon
完全外部結合
MySQLでは、FULL OUTER JOINができません。なので、UNION, LEFT JOIN, RIGHT JOINを利用して完全外部結合と同じ処理結果を取得します。

※「UNION」は重複行を削除して表示します。重複行を削除せずに表示したい場合、「UNION ALL」と指定します。

/* 完全外部結合 */
SELECT tableA.id AS id_A,
       tableB.id AS id_B,
       codeA,
       codeB
FROM tableA
LEFT JOIN tableB
ON tableA.id = tableB.tableA_id
UNION
SELECT tableA.id AS id_A,
       tableB.id AS id_B,
       codeA,
       codeB
FROM tableA
RIGHT JOIN tableB
ON tableA.id = tableB.tableA_id
完全外部結合
id_A id_B codeA codeB
1 4 aaaaa peach
2 1 bbbbb apple
2 3 bbbbb banana
3 NULL ccccc NULL
4 2 ddddd orange
5 NULL eeeee NULL
NULL 5 NULL melon

スポンサーリンク