SQL外部結合

sqlimage1
sql

ad2

SQL外部結合とは?

外部結合(Outer Join)は、SQLのJOIN操作の一種で、異なるテーブル同士を結合する際に、両方のテーブルに共通する行だけでなく、片方のテーブルにしか存在しない行も含めたい場合に使用します。これにより、データの欠損がある場合でも、他のテーブルのデータを保持したまま結果を取得できます。

外部結合には以下の3種類があります:

  1. LEFT OUTER JOIN:左のテーブルにある全ての行を返し、右のテーブルに該当する行があればそのデータも取得します。
  2. RIGHT OUTER JOIN:右のテーブルにある全ての行を返し、左のテーブルに該当する行があればそのデータも取得します。
  3. FULL OUTER JOIN:両方のテーブルにある全ての行を返し、どちらかに該当するデータがあれば結合されます。

LEFT OUTER JOINの例

ここでは、customersテーブルとordersテーブルを使って、LEFT OUTER JOINの例を示します。

SELECT customers.customer_id, customers.customer_name, orders.order_id FROM customers LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id;

このクエリは、customersテーブルの全ての顧客を取得し、それに対応する注文がordersテーブルにあれば、その注文情報も一緒に表示します。注文がない場合は、order_idの値がNULLとして表示されます。

RIGHT OUTER JOINの例

次に、RIGHT OUTER JOINの例を示します。

SELECT customers.customer_id, customers.customer_name, orders.order_id FROM customers RIGHT OUTER JOIN orders ON customers.customer_id = orders.customer_id;

このクエリは、ordersテーブルにある全ての注文を取得し、それに対応する顧客がcustomersテーブルにあれば、その顧客情報も表示します。顧客情報がない場合は、customer_idcustomer_nameの値がNULLとして表示されます。

FULL OUTER JOINの例

最後に、FULL OUTER JOINの例です。

SELECT customers.customer_id, customers.customer_name, orders.order_id FROM customers FULL OUTER JOIN orders ON customers.customer_id = orders.customer_id;

このクエリは、両方のテーブルから一致するデータを取得します。いずれかのテーブルにしか存在しないデータも含まれ、存在しないフィールドにはNULLが入ります。

結合結果のイメージ

以下の表は、各外部結合の結果のイメージを示しています。

customer_id customer_name order_id
1 Alice 101
2 Bob NULL
NULL NULL 103
4 Charlie 104

上記のように、LEFT JOIN、RIGHT JOIN、FULL JOINを使い分けることで、各テーブルの情報を適切に表示することが可能です。

まとめ

外部結合は、データが欠損している場合でも特定の情報を保ちながらクエリを実行するのに便利です。LEFT、RIGHT、FULLの3種類があり、用途に応じて適切なJOINを使い分けることが重要です。適切なJOINを選ぶことで、分析やレポート作成がより効率的になります。