スポンサーリンク

習得必須!SQLの結合(JOIN)の種類と使用例

記事内に広告が含まれています。

SQLの結合(JOIN)は、異なるテーブルのデータを組み合わせるために非常に重要な機能です。

本記事では、結合の種類とそれぞれの使用例について詳しく説明します。

スポンサーリンク

サンプルデータ

使用するサンプルデータは以下のとおりです。

customers テーブル:

customer_idcustomer_name
1Alice
2Bob
3Charlie

orders テーブル:

order_idcustomer_idorder_date
112024-01-01
222024-02-15
342024-03-10
スポンサーリンク

内部結合(INNER JOIN)

内部結合は、結合条件に一致する行のみを返します。

これは最も一般的な結合タイプです。

SQLクエリ:

SELECT 
orders.order_id,
orders.order_date,
customers.customer_name
FROM
orders
INNER JOIN
customers
ON
orders.customer_id = customers.customer_id;

結果:

order_idorder_datecustomer_name
12024-01-01Alice
22024-02-15Bob

この結果では、ordersテーブルとcustomersテーブルがcustomer_idで結合され、一致する行のみが返されます。

左外部結合(LEFT JOIN)

左外部結合は、左側のテーブル(ここではorders)のすべての行と、右側のテーブル(customers)の一致する行を返します。

一致しない場合、右側のテーブルの値はNULLになります。

SQLクエリ:

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

;

結果:

order_idorder_datecustomer_name
12024-01-01Alice
22024-02-15Bob
32024-03-10NULL

この結果では、ordersテーブルのすべての行が返され、customersテーブルに一致する行がない場合はNULLが返されます。

右外部結合(RIGHT JOIN)

右外部結合は、右側のテーブル(ここではcustomers)のすべての行と、左側のテーブル(orders)の一致する行を返します。

一致しない場合、左側のテーブルの値はNULLになります。

SQLクエリ:

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

;

結果:

order_idorder_datecustomer_name
12024-01-01Alice
22024-02-15Bob
NULLNULLCharlie

この結果では、customersテーブルのすべての行が返され、ordersテーブルに一致する行がない場合はNULLが返されます。

完全外部結合(FULL OUTER JOIN)

完全外部結合は、左側と右側の両方のテーブルのすべての行を返し、一致しない場合はNULLを使用します。

SQLクエリ:

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

;

結果:

order_idorder_datecustomer_name
12024-01-01Alice
22024-02-15Bob
32024-03-10NULL
NULLNULLCharlie

この結果では、両方のテーブルのすべての行が返され、いずれかのテーブルに一致する行がない場合はNULLが返されます。

CROSS JOIN

CROSS JOINは、指定された2つのテーブルの全行の直積(デカルト積)を返します。

つまり、1つ目のテーブルの各行に対して2つ目のテーブルの全行を結合します。

SQLクエリ:

SELECT 
orders.order_id,
orders.order_date,
customers.customer_name
FROM
orders
CROSS JOIN
customers

;

結果:

order_idorder_datecustomer_name
12024-01-01Alice
12024-01-01Bob
12024-01-01Charlie
22024-02-15Alice
22024-02-15Bob
22024-02-15Charlie
32024-03-10Alice
32024-03-10Bob
32024-03-10Charlie

この結果では、ordersテーブルの各行とcustomersテーブルの各行がすべて組み合わせられています。

3つの注文(orders)があり、それぞれ3人の顧客(customers)と組み合わされるため、合計で9行の結果が得られます。

結論

結合は、異なるテーブルのデータを組み合わせてクエリを作成するための重要な手法です。それぞれの違いを理解することで、適切なデータを取得し、データベースクエリを適正化できます。

スポンサーリンク
SQL
著者SNS
タイトルとURLをコピーしました