はじめに
複数のテーブルからデータを取得するために、JOINを使ってSQL文を書きました。その際、内部結合(INNER JOIN)と外部結合(OUTER JOIN)の違いについて調べたのでまとめておきます。
内部結合(INNER JOIN)とは
2つ以上のテーブルから関連するデータのみを取得します。内部結合では、指定した条件に一致する行だけが結果セットに含まれます。つまり、結合条件に一致しない行は結果に含まれません。
使うべき場面
- 2つのテーブルの間で共通のデータが存在する時
- 両方のテーブルに存在するデータのみを取得したいとき
例えば、2つのテーブル orders と customers があるとします。orders テーブルには注文情報が、customers テーブルには顧客情報が含まれています。顧客とその注文を取得したいときに内部結合を使います。
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
外部結合(OUTER JOIN)とは
左外部結合(LEFT JOIN)と右外部結合(RIGHT JOIN)があります。外部結合は、一方のテーブルに存在するすべてのデータと、もう一方のテーブルに一致するデータを取得します。
左外部結合(LEFT JOIN)の場合、FROM後のテーブルのデータ全てとLEFT JOIN後の一致する行を取得します。一致しないLEFT JOIN後テーブルの行にはNULLが入ります。右外部結合(RIGHT JOIN)の場合はその逆です。
使うべき場面
*あるテーブルのすべてのデータと、関連する他のテーブルのデータを取得したいとき
*片方のテーブルのすべてのデータが必要なとき
例えば、すべての顧客とその顧客が注文した情報を取得します。注文がない顧客も結果に含まれます。
SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
まとめ
いかがだったでしょう?
OUTER JOINとINNER JOINの違いを理解していなかった私は、必要なデータを取得できなかったり、意図しないデータが反映されてしまっていました。
この記事を書くことで少しでも皆さんの役に立てたら幸いです。