内部結合と外部結合の使い分け
結合とは
結合(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