SQLのジョインとは
SQL(Structured Query Language)は、リレーショナルデータベースを管理するために使用されるプログラミング言語です。SQLの主要な機能の1つは、テーブルをジョインして意味のあるデータを抽出することができる点です。SQLのジョインは、関連する列に基づいて2つ以上のテーブルの行を結合します。
SQLにはいくつかの種類のジョインがあり、それぞれ特定の用途があります。もっとも一般的に使用されるSQLジョインの種類には、以下があります。
-
Inner join
Inner joinは、結合される2つのテーブルの両方に一致する行のみを返します。これは、SQLでもっとも頻繁に使用されるジョインの種類です。 -
Left Join
左ジョインは、左側のテーブルの全ての行と右側のテーブルの一致する行を返します。右側のテーブルに一致する行がない場合、その列にはNULLが含まれます。 -
Right Join
右ジョインは、右側のテーブルの全ての行と左側のテーブルの一致する行を返します。左側のテーブルに一致する行がない場合、その列にはNULLが含まれます。 -
Outer Join
Outer joinは、両方のテーブルから全ての行を返し、一致しない場合には、その列にはNULLが含まれます。
Inner Join
SQLのInner Joinは、結合する2つ以上のテーブルから行を結合して単一の結果セットを作成するために使用されます。Inner Joinは、結合される両方のテーブルに一致する行のみを返します。言い換えると、Inner Joinは、両方のテーブルに一致しない行を除外します。
Inner Joinの構文
SQLにおけるinner joinの構文は次のとおりです。
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
上記の構文では、column_name(s)
は、ジョインするテーブルから選択する列を表します。Table1とtable2は、ジョインしたいテーブルを表し、column_name
は、それらの間の共通列を表します。
Inner Joinの使用例
Customers
テーブルには顧客の情報、Orders
テーブルには彼らの注文の情報が含まれています。これらのテーブルを結合して、有用な洞察を抽出するために、Inner Joinを使用することができます。
Customersテーブル:
CustomerID | CustomerName | ContactName | Country |
---|---|---|---|
1 | Alfreds | Maria | Germany |
2 | Ana Trujillo | Ana | Mexico |
3 | Antonio | Antonio | Mexico |
4 | Around the | Thomas | UK |
5 | Berglunds | Christina | Sweden |
Ordersテーブル:
OrderID | CustomerID | OrderDate |
---|---|---|
1 | 3 | 2022-03-10 |
2 | 5 | 2022-03-12 |
3 | 2 | 2022-03-15 |
4 | 3 | 2022-03-18 |
5 | 1 | 2022-03-20 |
顧客名、連絡先名、注文日を抽出するには、次のようにInner Joinを使用できます。
SELECT Customers.CustomerName, Customers.ContactName, Orders.OrderDate
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
上記のSQLクエリの出力は次のとおりです。
CustomerName | ContactName | OrderDate |
---|---|---|
Ana Trujillo | Ana | 2022-03-15 |
Antonio | Antonio | 2022-03-10 |
Antonio | Antonio | 2022-03-18 |
Alfreds | Maria | 2022-03-20 |
Berglunds | Christina | 2022-03-12 |
Left Join
Left Joinは、2つ以上のテーブルから行を結合して、関連する条件に基づいて単一の結果セットを作成するために使用されます。Left Joinは、左側のテーブルの全ての行と、右側のテーブルのマッチングする行を返します。右側のテーブルにマッチングする行がない場合、結果にはその列にNULL
が含まれます。
Left Joinの構文
SQLにおけるLeft Joinの構文は次のとおりです。
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
Left Joinの使用例
Customersテーブル:
CustomerID | CustomerName | ContactName | Country |
---|---|---|---|
1 | Alfreds | Maria | Germany |
2 | Ana Trujillo | Ana | Mexico |
3 | Antonio | Antonio | Mexico |
4 | Around the | Thomas | UK |
5 | Berglunds | Christina | Sweden |
Ordersテーブル:
OrderID | CustomerID | OrderDate |
---|---|---|
1 | 3 | 2022-03-10 |
2 | 5 | 2022-03-12 |
3 | 2 | 2022-03-15 |
4 | 3 | 2022-03-18 |
5 | 1 | 2022-03-20 |
顧客名、連絡先名、注文日を抽出するには、次のようにLeft Joinを使用できます。
SELECT Customers.CustomerName, Customers.ContactName, Orders.OrderDate
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
上記SQLクエリの出力は次のとおりです。
CustomerName | ContactName | OrderDate |
---|---|---|
Alfreds | Maria | 2022-03-20 |
Ana Trujillo | Ana | 2022-03-15 |
Antonio | Antonio | 2022-03-10 |
Antonio | Antonio | 2022-03-18 |
Around the | Thomas | NULL |
Berglunds Christina 2022-03-12 |
上記の出力からわかるように、左結合は、顧客テーブルの全ての行と、右側のテーブルからの一致する行を基にして、1つの結果セットに2つ以上のテーブルからの行を結合します。右側のテーブルに一致する行がない場合、結果はこれらの列にNULLを含みます。
Right Join
SQLのRight Joinは、2つ以上のテーブルから行を結合し、それらの間の一致する条件に基づいて単一の結果セットを作成するために使用されます。右結合は、右側のテーブルから全ての行と、左側のテーブルから一致する行を返します。左側のテーブルに一致する行がない場合、結果はこれらの列にNULLを含みます。
Right Joinの構文
SQLにおけるRight Joinの構文は次のようになります。
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Right Joinの使用例
Customersテーブル:
CustomerID | CustomerName | ContactName | Country |
---|---|---|---|
1 | Alfreds | Maria | Germany |
2 | Ana Trujillo | Ana | Mexico |
3 | Antonio | Antonio | Mexico |
4 | Around the | Thomas | UK |
5 | Berglunds | Christina | Sweden |
Ordersテーブル:
OrderID | CustomerID | OrderDate |
---|---|---|
1 | 3 | 2022-03-10 |
2 | 5 | 2022-03-12 |
3 | 2 | 2022-03-15 |
4 | 3 | 2022-03-18 |
5 | 1 | 2022-03-20 |
顧客名、連絡先名、注文日を抽出するには、次のようにRight Joinを使用できます。
SELECT Customers.CustomerName, Customers.ContactName, Orders.OrderDate
FROM Customers
RIGHT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
上記SQLクエリの出力は次のとおりです。
CustomerName | ContactName | OrderDate |
---|---|---|
Alfreds | Maria | 2022-03-20 |
Ana Trujillo | Ana | 2022-03-15 |
Antonio | Antonio | 2022-03-10 |
Antonio | Antonio | 2022-03-18 |
NULL | NULL | 2022-03-12 |
上記の出力から、Right Joinは、顧客テーブルに対応する行がない場合でも、顧客テーブルの全ての行を返すことがわかります。この場合、OrderDate列にはNULL
が含まれます。
Outer Join
SQLのOuter Joinは、2つ以上のテーブルから行を結合し、それらの間の一致条件に基づいて単一の結果セットを返します。外部結合は、両方のテーブルから全ての行を返し、一致する行がない場合、その列にはNULL
が含まれます。
Outer Joinの構文
SQLでのOuter Joinの構文は、次のようになります。
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;
Outer Joinの使用例
Customersテーブル:
CustomerID | CustomerName | ContactName | Country |
---|---|---|---|
1 | Alfreds | Maria | Germany |
2 | Ana Trujillo | Ana | Mexico |
3 | Antonio | Antonio | Mexico |
4 | Around the | Thomas | UK |
5 | Berglunds | Christina | Sweden |
Ordersテーブル:
OrderID | CustomerID | OrderDate |
---|---|---|
1 | 3 | 2022-03-10 |
2 | 5 | 2022-03-12 |
3 | 2 | 2022-03-15 |
4 | 3 | 2022-03-18 |
5 | 1 | 2022-03-20 |
顧客名、連絡先名、および注文日を抽出するには、次のようにOuter Joinを使用できます。
SELECT Customers.CustomerName, Customers.ContactName, Orders.OrderDate
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
上記のSQLクエリの出力は次のようになります。
CustomerName | ContactName | OrderDate |
---|---|---|
Alfreds | Maria | 2022-03-20 |
Ana Trujillo | Ana | 2022-03-15 |
Antonio | Antonio | 2022-03-10 |
Antonio | Antonio | 2022-03-18 |
Around the | Thomas | NULL |
Berglunds | Christina | 2022-03-12 |
上記の出力からわかるように、Outer Joinは両方のテーブルから全ての行を返し、他方のテーブルに対応する行がない場合は、欠落している列にはNULL
が表示されます。この場合、顧客名と連絡先名の列には、対応する注文がない行にはNULL
が、注文日の列には、対応するカスタマーがいない行にはNULL
が含まれます。
SQL Joinの比較
各種類のJoinには独自の特徴があり、データベースのクエリ操作に特定の目的を果たすために使用されます。
Inner Join
Inner Joinは、SQLでもっとも一般的に使用されるJoinです。結合される2つのテーブルにおいて、一致する値のみを返します。Inner Joinは、共通の列を持つ2つのテーブルからデータを結合する場合に最適です。
例えば、顧客テーブルと注文テーブルがある場合、顧客ID列をInner Joinで結合し、顧客の名前と注文した商品を取得することができます。
Left Join
Left Joinは、左側のテーブルの全ての行と、右側のテーブルの一致する行を返します。右側のテーブルに一致するものがない場合でも、結果には左側のテーブルの全ての行が表示され、右側のテーブルの列にはNULLの値が表示されます。
このタイプのJoinは、1つのテーブルから全てのデータを取得し、他のテーブルから一致するデータのみを取得したい場合に便利です。左Joinの一般的な使用例は、注文をまだ行っていない顧客も含め、全ての顧客と彼らが注文した商品を取得する場合です。
Right Join
Right Joinは、Left Joinに似ていますが、右側のテーブルから全ての行と、左側のテーブルの一致する行を返します。左側のテーブルに一致するものがない場合でも、結果には右側のテーブルの全ての行が表示され、左側のテーブルの列にはNULLの値が表示されます。
Right JoinはSQLでは一般的に使用されておらず、常にLeft Joinとして表現できます。ただし、顧客がまだ登録されていなくても注文と顧客を取得する場合など、特定のシナリオでは便利です。
Outer Join
Outer Joinは、2つのテーブルから全ての行を返します。また、マッチする行がない場合には、欠落したデータのためにNULL値が表示されます。
Outer Joinは、マッチするかどうかにかかわらず、両方のテーブルから全てのデータを取得する必要がある場合に役立ちます。代表的な使用例としては、顧客と注文を全て取得する場合があります。その際、顧客がまだ注文を行っていない場合でも、顧客と注文の両方の情報を取得したい場合があります。