logo

MySQLクロスジョイン

MySQL CROSS JOIN は、2 つ以上のテーブルのすべての可能性を結合するために使用され、寄与するすべてのテーブルのすべての行を含む結果を返します。 CROSS JOIN は CARTESIAN JOIN とも呼ばれ、関連するすべてのテーブルのデカルト積を求めます。デカルト積は、最初のテーブルに存在するすべての行と 2 番目のテーブルに存在するすべての行を乗算したものとして説明できます。これは内部結合に似ていますが、この句では結合条件を使用できません。

これは、CROSS JOIN が table1 と table2 のすべてのレコードを返し、各行が両方のテーブルの行の組み合わせである次の視覚的表現で理解できます。

MySQLクロスジョイン

MySQL CROSS JOIN 構文

CROSS JOIN キーワードは常に SELECT ステートメントとともに使用され、FROM 句の後に記述する必要があります。次の構文は、両方の結合テーブルからすべてのレコードをフェッチします。

 SELECT column-lists FROM table1 CROSS JOIN table2; 

上記の構文では、column-lists は返す列またはフィールドの名前で、table1 と table2 はレコードをフェッチするテーブルの名前です。

MySQL CROSS JOIN の例

Left Join 句または Left external Join 句の動作を理解するために、いくつかの例を示します。

2 つのテーブルを結合するための CROSS JOIN 句

ここでは 2 つのテーブルを作成します 「顧客」 そして 「連絡先」 これには次のデータが含まれます。

表: 顧客

MySQLクロスジョイン

表: 連絡先

MySQLクロスジョイン

両方のテーブルからすべてのレコードをフェッチするには、次のクエリを実行します。

 SELECT * FROM customers CROSS JOIN contacts; 

クエリが正常に実行されると、次の出力が得られます。

MySQLクロスジョイン

CROSS JOIN ステートメントを実行すると、42 行が表示されることがわかります。これは、customers テーブルの 7 行に contacts テーブルの 6 行を乗算することを意味します。

注: 列が 2 回繰り返される結果を回避するには、SELECT * ステートメントの代わりに個々の列名を使用することをお勧めします。

MySQL CROSS JOIN におけるあいまいな列の問題

場合によっては、複数のテーブルから選択した列レコードをフェッチする必要があります。これらのテーブルには、類似した列名がいくつか含まれている場合があります。その場合、MySQL CROSS JOIN ステートメントはエラーをスローします: カラム名があいまいです。これは、カラムの名前が両方のテーブルに存在することを意味し、MySQL はどちらのカラムを表示するか混乱します。次の例では、これをより明確に説明しています。

 SELECT customer_id, cust_name, income, order_id, price FROM customer CROSS JOIN orders; 

上記の CROSS JOIN では、以下の画像に示すようなエラーがスローされます。

MySQLクロスジョイン

この問題は、列名の前にテーブル名を使用することで解決できます。上記のクエリは次のように書き直すことができます。

 SELECT customer.customer_id, customer.cust_name, customer.income, orders.order_id, orders.price FROM customer CROSS JOIN orders; 

上記のクエリを実行すると、次の出力が得られます。

MySQLクロスジョイン

WHERE 句を使用した LEFT JOIN

WHERE 句は、 フィルター 表からの結果。次の例は、CROSS JOIN 句を使用してこれを示しています。

 SELECT customers.customer_id, customers.cust_name, customers.income, orders.order_id, orders.price FROM customers CROSS JOIN orders USING(customer_id) WHERE price&gt;1500 AND price<5000; < pre> <p>This statement gives the below result:</p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-7.webp" alt="MySQL CROSS JOIN"> <h3>MySQL CROSS JOIN Multiple Tables</h3> <p>We have already created two tables named &apos; <strong>customers&apos;</strong> and &apos; <strong>orders&apos;</strong> . Let us create one more table and name it as &apos; <strong>contacts&apos; that contains the following data:</strong> </p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-8.webp" alt="MySQL CROSS JOIN"> <p>Here, we are going to explain CROSS JOIN with LEFT JOIN using three tables. Execute the following statement to join the three table customers, orders, and contacts. In this statement, first CROSS JOIN completed between orders and contacts, and then LEFT JOIN executes according to the specified condition.</p> <pre> SELECT * FROM customer LEFT JOIN(orders CROSS JOIN contacts) ON customer.customer_id=contact_id ORDER BY income; </pre> <p>After successful execution of the above query, it will give the following output:</p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-9.webp" alt="MySQL CROSS JOIN"> <hr></5000;>

上記のクエリが正常に実行されると、次の出力が得られます。

MySQLクロスジョイン