MySQL 速習チュートリアル

MySQL CROSS JOIN

1. MySQL CROSS JOIN の概要

CROSS JOIN 句は、2つ以上のテーブルのデカルト積(Cartesian product)を返します。これは、1つ目のテーブルのすべての行を、2つ目のテーブルのすべての行と組み合わせる処理です。

       注意: もし最初のテーブルに 100 行あり、2番目のテーブルに 500 行ある場合、結果セットは 100 × 500 = 50,000 行になります。CROSS JOIN は、潜在的に非常に巨大な結果セットを返す可能性があることに注意してください!

2. CROSS JOIN の構文

SELECT カラム名(s)
FROM テーブル1
CROSS JOIN テーブル2;

3. デモ用データベース

以下は、「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
10309331996-09-191
103107781996-09-202

4. MySQL CROSS JOIN の使用例

次の SQL は、「Customers」と「Orders」のデカルト積を返します。

-- 顧客と注文のすべての組み合わせを生成します
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
CROSS JOIN Orders;

4.1 WHERE 句を使用した CROSS JOIN

もしテーブル1とテーブル2の間にリレーション(関係性)がある場合、WHERE 句を追加することで、CROSS JOININNER JOIN 句と同じ結果を生成します。

-- リレーションを指定することで INNER JOIN と同等の結果を得る例
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
CROSS JOIN Orders
WHERE Customers.CustomerID = Orders.CustomerID;