言うまでもなく、結合はリレーショナル データベースの最も特徴的な機能の 1 つです。結合を使用すると、関連する条件に基づいて 1 つ以上のテーブルのデータを結合し、一貫したデータ操作を作成できます。
SQL にはさまざまなタイプの結合があり、参加テーブルまたは結果セットからのデータを処理する方法がそれぞれ異なります。 SQL での最も一般的な結合タイプの 1 つは OUTER JOIN です。
SQL の OUTER JOIN は、関連するテーブルから一致するすべての行と、一方または両方のテーブルから一致しない行を取得します。これは、NULL 値または欠落しているセットを含むテーブルを扱う場合に便利です。
これらの結合が何をするのか、どのように機能するのか、SQL データベースでどのように使用できるのかをさらに詳しく見てみましょう。
要件:
このチュートリアルでは、MySQL 8.0 を使用し、Sakila サンプル データベースを使用します。ただし、該当すると思われる他のデータセットを自由に使用してください。
外部結合の種類
SQL の OUTER JOINS には主に 3 つのタイプがあります。これらの種類の OUTER JOIN には次のものがあります。
-
左外部結合
-
右外部結合
-
完全外部結合
LEFT OUTER JOINS の場合、結合は左側のテーブルからすべての行を取得し、右側のテーブルから一致する行のみを取得します。右側のテーブルに一致する行がない場合、結合により右側のテーブルの列の NULL 値が返されます。
これは RIGHT OUTER JOIN に似ています。ただし、右側のテーブルからはすべての行が取得されますが、左側のテーブルからは一致する行のみが取得されます。左側のテーブルに一致する行がない場合、結合には左側のテーブルの列の NULL 値が含まれます。
最後に、FULL OUTER JOINS があります。このタイプの結合は、RIGHT 外部結合と LEFT 外部結合の両方を組み合わせます。その結果、左側または右側のテーブルに一致する行があれば、結合によってすべての行が取得されます。一致するものがない場合、結合は一致するものがないテーブルの列に対して NULL 値を返します。
SQL OUTER JOIN の構文
以下は SQL OUTER JOIN の構文を表しています。ただし、対象のデータベース エンジンに応じて構文が若干異なる場合があることに留意してください。
一般的な構造は次のとおりです。
SELECT 列テーブル1から
[左 |右 | FULL] OUTER JOIN テーブル 2
ON テーブル 1.列名 = テーブル 2.列名;
SQL の OUTER JOIN の構文は非常に一目瞭然です。
例:
SQL でさまざまなタイプの OUTER JOINS を適用する方法について、使用例をいくつか見てみましょう。
前述したように、デモにはSakilaサンプルデータベースを使用します。この場合、「顧客」テーブルと「支払い」テーブルを使用します。
例 1: 左外部結合
OUTER JOIN から始めましょう。すべての顧客情報を、入手可能な場合は支払い情報とともに取得したいとします。
これにより、すべての顧客情報 (左側) と、利用可能な場合は支払い情報 (右側) が必要になるため、LEFT OUTER JOIN が適用可能になります。
顧客が支払いを行っていない場合、結合では支払い関連の列に NULL 値が表示されます。
例は次のとおりです。
選択するc.customer_id、
c.名、
c.姓、
金額、
p.支払い日
から
顧客C
LEFT OUTER JOIN 支払い p
の上
c.顧客ID = p.顧客ID;
指定されたクエリには、「customer」テーブルの「customer_id」、「first_name」、および「last_name」列が含まれています。 「payment」テーブルの金額と「payment_date」も含めます。
次に、「customer_id」に基づいて「customer」テーブルと「payment」テーブルの間で LEFT OUTER JOIN を実行します。
これらは、すべての顧客 (支払いが行われたかどうかに関係なく) とその支払い詳細 (存在する場合) です。
出力例は次のとおりです。
例 2: 右外部結合
次に、RIGHT OUTER JOIN に進みましょう。この場合、すべての支払い情報と、関連する顧客 (存在する場合) を含めたいとします。
この場合、顧客によって支払いが行われた場合、結合にはその顧客の詳細が表示されます。顧客が関連付けられていない支払いがある場合は、顧客関連の列に NULL 値が表示されます。
選択するc.customer_id、
c.名、
c.姓、
金額、
p.支払い日
から
顧客C
RIGHT OUTER JOIN 支払い p
の上
c.顧客ID = p.顧客ID;
結果のセットは次のようになります。
例 3: 完全外部結合
一方、FULL OUTER JOIN は、すべての顧客情報と支払いを取得します。これにはすべての顧客とすべての支払いが含まれ、テーブル間に一致しない場合は NULL 値が表示されます。
選択するc.customer_id、
c.名、
c.姓、
金額、
p.支払い日
から
顧客C
FULL OUTER JOIN 支払い p
の上
c.顧客ID = p.顧客ID;
MySQL は FULL OUTER JOIN をネイティブにサポートしていないことに留意することをお勧めします。 LEFT JOIN、UNION、RIGHT JOIN を使って柔術の魔法を実行する必要があります。かなり面倒なことを付け加えておきます。
結論
このチュートリアルでは、OUTER JOINS についてすべて学びました。 SQL の OUTER JOIN とは何か、OUTER JOIN の種類、およびこれらの種類の OUTER JOIN の使用例について学びました。