SQLの結合
SQLの結合というと「INNER JOIN」と「LEFT JOIN」ばかり使っていますが、「FULL JOIN」を使う機会があったのでEXISTSと合わせて図で表してみました。
table_a
code |
* |
101 |
… |
102 |
… |
103 |
… |
201 |
… |
202 |
… |
203 |
… |
table_b
code |
* |
201 |
… |
202 |
… |
203 |
… |
204 |
… |
205 |
… |
206 |
… |
内部結合
INNER JOIN
SELECT *
FROM table_a
INNER JOIN table_b
ON table_b.code = table_a.code
table_a.code |
table_a.* |
table_b.code |
table_b.* |
201 |
… |
201 |
… |
202 |
… |
202 |
… |
203 |
… |
203 |
… |
外部結合
LEFT JOIN
SELECT *
FROM table_a
LEFT JOIN table_b
ON table_b.code = table_a.code
table_a.code |
table_a.* |
table_b.code |
table_b.* |
101 |
… |
NULL |
NULL |
102 |
… |
NULL |
NULL |
103 |
… |
NULL |
NULL |
201 |
… |
201 |
… |
202 |
… |
202 |
… |
203 |
… |
203 |
… |
RIGHT JOIN
SELECT *
FROM table_a
RIGHT JOIN table_b
ON table_b.code = table_a.code
table_a.code |
table_a.* |
table_b.code |
table_b.* |
201 |
… |
201 |
… |
202 |
… |
202 |
… |
203 |
… |
203 |
… |
NULL |
NULL |
204 |
… |
NULL |
NULL |
205 |
… |
NULL |
NULL |
206 |
… |
FULL JOIN
SELECT *
FROM table_a
FULL JOIN table_b
ON table_b.code = table_a.code
table_a.code |
table_a.* |
table_b.code |
table_b.* |
101 |
… |
NULL |
NULL |
102 |
… |
NULL |
NULL |
103 |
… |
NULL |
NULL |
201 |
… |
201 |
… |
202 |
… |
202 |
… |
203 |
… |
203 |
… |
NULL |
NULL |
204 |
… |
NULL |
NULL |
205 |
… |
NULL |
NULL |
206 |
… |
存在チェック
EXISTS
SELECT *
FROM table_a
WHERE EXISTS(SELECT 1 FROM table_b WHERE table_b.code = table_a.code)
table_a.code |
table_a.* |
201 |
… |
202 |
… |
203 |
… |
NOT EXISTS
SELECT *
FROM table_a
WHERE NOT EXISTS(SELECT 1 FROM table_b WHERE table_b.code = table_a.code)
table_a.code |
table_a.* |
101 |
… |
102 |
… |
103 |
… |