Traffine I/O

日本語

2023-03-04

SQLのジョインについて

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の構文は次のとおりです。

sql
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を使用できます。

sql
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の構文は次のとおりです。

sql
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を使用できます。

sql
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の構文は次のようになります。

sql
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を使用できます。

sql
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の構文は、次のようになります。

sql
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を使用できます。

sql
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は、マッチするかどうかにかかわらず、両方のテーブルから全てのデータを取得する必要がある場合に役立ちます。代表的な使用例としては、顧客と注文を全て取得する場合があります。その際、顧客がまだ注文を行っていない場合でも、顧客と注文の両方の情報を取得したい場合があります。

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!