😺

内部結合と外部結合の使い分け

2023/05/21に公開

結合とは

結合(join)は、データベース内の2つ以上のテーブルから必要なデータを一緒に取得するための操作です。テーブルの内部結合と外部結合は、異なるテーブル間で関連するデータをどのように取得するかに違いがあります。

サンプルで設定したテーブルで例を見ていきましょう。

Customersテーブル:

CustomerID CustomerName ContactNumber Address
1 John Doe 1234567890 Tokyo
2 Jane Doe 0987654321 Osaka
3 Jim Bean 1112223333 Hokkaido
4 Jack Daniels 4445556666 Kyoto
5 Green Peace 7778889999 Tokyo

Ordersテーブル:

OrderID CustomerID Product Quantity
1001 1 Apple 10
1002 2 Banana 20
1003 4 Cherry 30
1004 3 Dates 40

Customersテーブルには顧客の情報があり、各顧客は一意のCustomerIDを持っています。また、Ordersテーブルには注文の詳細があり、各注文はOrderIDで一意に識別され、CustomerIDを用いて顧客と関連付けられています。ここで重要なのは、OrdersテーブルのCustomerIDがCustomersテーブルのCustomerIDと一致することで、これらのテーブルを結合する基礎となります。

内部結合(INNER JOIN)

このテーブルを内部結合すると、OrdersテーブルとCustomersテーブルの両方に存在する顧客のみが表示されます。つまり、注文を行った顧客の情報のみが表示されます。

SELECT Customers.CustomerName, Orders.Product, Orders.Quantity
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;

このクエリは、注文を行った顧客の名前と、その顧客が注文した商品と数量を表示します。

CustomerName Product Quantity
John Doe Apple 10
Jane Doe Banana 20
Jack Daniels Cherry 30
Jim Bean Dates 40

外部結合(OUTER JOIN)

このテーブルを外部結合すると、Customersテーブルの全ての顧客と、その顧客が注文した商品(注文がある場合)が表示されます。注文を行っていない顧客の場合、商品と数量のフィールドはNULLとなります。

SELECT Customers.CustomerName, Orders.Product, Orders.Quantity
FROM Customers
LEFT OUTER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
CustomerName Product Quantity
John Doe Apple 10
Jane Doe Banana 20
Jack Daniels Cherry 30
Jim Bean Dates 40
Green Peace NULL NULL

内部結合と外部結合のどちらを使用するかは、何を表示したいか、または何を調査したいかによります。この例では、注文を行った顧客の情報のみが必要な場合は内部結合を使用し、全ての顧客の情報が必要な場合は外部結合を使用しています。それぞれ深堀ってみます。

内部結合が適している状況

注文を行った顧客のみを得たい場合、内部結合が適しています。例えば、販売パフォーマンスを分析したいとすれば、注文を行った顧客のみが対象となるでしょう。または、特定の商品の販売について調査したい場合も、購入した顧客のリストだけが必要です。

外部結合が適している状況

全ての顧客情報が必要な場合、外部結合が有用です。例えば、マーケティングキャンペーンを計画しているとします。その場合、商品を購入した顧客だけでなく、まだ何も購入していない顧客についても知りたかったりします。購入履歴がない顧客に対しても、新たなマーケティング戦略を展開するためには、その情報が必要となります。

微妙なまとめ

内部結合と外部結合の使い分けは、取得したい情報とその目的による。。。

Discussion