MySQL CROSS JOIN

MySQL CROSS JOIN is used to combine all possibilities of the two or more tables and returns the result that contains every row from all contributing tables. The CROSS JOIN is also known as CARTESIAN JOIN, which provides the Cartesian product of all associated tables. The Cartesian product can be explained as all rows present in the first table multiplied by all rows present in the second table. It is similar to the Inner Join, where the join condition is not available with this clause.

We can understand it with the following visual representation where CROSS JOIN returns all the records from table1 and table2, and each row is the combination of rows of both tables.

MySQL CROSS JOIN

MySQL CROSS JOIN Syntax

The CROSS JOIN keyword is always used with the SELECT statement and must be written after the FROM clause. The following syntax fetches all records from both joining tables:

snippet
SELECT column-lists
FROM table1
CROSS JOIN table2;

In the above syntax, the column-lists is the name of the column or field that you want to return and table1 and table2 is the table name from which you fetch the records.

MySQL CROSS JOIN Example

Let us take some examples to understand the working of Left Join or Left Outer Join clause:

CROSS JOIN clause for joining two tables

Here, we are going to create two tables "customers" and "contacts" that contains the following data:

Table: customers

MySQL CROSS JOIN

Table: contacts

MySQL CROSS JOIN

To fetch all records from both tables, execute the following query:

snippet
SELECT *
FROM customers
CROSS JOIN contacts;

After successful execution of the query, it will give the following output:

MySQL CROSS JOIN

When the CROSS JOIN statement executed, you will observe that it displays 42 rows. It means seven rows from customers table multiplies by the six rows from the contacts table.

Note
NOTE: To avoid the result of repeated columns twice, it is recommended to use individual column names instead of SELECT * statement.

Ambiguous Columns problem in MySQL CROSS JOIN

Sometimes, we need to fetch the selected column records from multiple tables. These tables can contain some column names similar. In that case, MySQL CROSS JOIN statement throws an error: the column name is ambiguous. It means the name of the column is present in both tables, and MySQL gets confused about which column you want to display. The following examples explain it more clearly:

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

The above CROSS JOIN throws an error as given in the image below:

MySQL CROSS JOIN

This problem can be resolved by using the table name before the column name. The above query can be re-written as:

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

After executing the above query, we will get the following output:

MySQL CROSS JOIN

LEFT JOIN with WHERE Clause

The WHERE clause is used to return the filter result from the table. The following example illustrates this with the CROSS JOIN clause:

snippet
SELECT customers.customer_id, customers.cust_name, customers.income, orders.order_id, orders.price
FROM customers
CROSS JOIN orders
USING(customer_id) WHERE price>1500 AND price<5000;

This statement gives the below result:

MySQL CROSS JOIN

MySQL CROSS JOIN Multiple Tables

We have already created two tables named "customers" and "orders". Let us create one more table and name it as "contacts" that contains the following data:

MySQL CROSS JOIN

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.

snippet
SELECT * FROM customer
LEFT JOIN(orders CROSS JOIN contacts)
ON customer.customer_id=contact_id
ORDER BY income;

After successful execution of the above query, it will give the following output:

MySQL CROSS JOIN
Related Tutorial
Follow Us
https://www.facebook.com/Rookie-Nerd-638990322793530 https://twitter.com/RookieNerdTutor https://plus.google.com/b/117136517396468545840 #
Contents