SQL 速習チュートリアル

SQL FULL JOIN

FULL JOIN は、左テーブルまたは右テーブルのいずれかにマッチがある場合に、すべてのレコードを返します。

  • 左側のテーブルの行が右側のテーブルにマッチしない場合、結果セットには左側の行のデータと、右側の全カラムに対する NULL 値が含まれます。
  • 右側のテーブルの行が左側のテーブルにマッチしない場合、結果セットには右側の行のデータと、左側の全カラムに対する NULL 値が含まれます。

なお、FULL JOINFULL OUTER JOIN キーワードは同一であり、OUTER キーワードは省略可能です。

       注意:FULL JOIN は、非常に巨大な結果セット(リザルトセット)を返す可能性があるため、実行時には注意が必要です。

1. FULL JOIN の構文

SELECT カラム名
FROM テーブル1
FULL JOIN テーブル2
ON テーブル1.カラム名 = テーブル2.カラム名
WHERE 条件;

2. デモ用データベース

以下は「Customers(顧客)」テーブルからの抜粋です:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico

次は「Orders(注文)」テーブルからの抜粋です:

OrderIDCustomerIDEmployeeIDOrderDateShipperID
10308271996-09-183
103093731996-09-191
103107781996-09-202

3. SQL FULL JOIN の実装例

以下の SQL ステートメントは、すべての顧客と、すべての注文を抽出します。

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;

3.1 実行結果のサンプル

抽出されたデータは以下のようになります:

CustomerNameOrderID
NULL10309
NULL10310
Alfreds FutterkisteNULL
Ana Trujillo Emparedados y helados10308
Antonio Moreno TaqueríaNULL

       解説: FULL JOIN は、もう一方のテーブルに一致するデータがあるかどうかにかかわらず、双方のテーブルからすべてのマッチングレコードを返します。そのため、「Orders」にマッチしない「Customers」の行や、「Customers」にマッチしない「Orders」の行もすべてリストアップされます。