Summary: in this tutorial, you will learn how to use Oracle CROSS JOIN to combine each row from the first table with every row from the second table.
Introduction to Oracle CROSS JOIN clause #
A CROSS JOIN is an optional clause of a SELECT statement. A CROSS JOIN clause allows you to merge rows from two tables by combining each row from the first table with every row from the second table.
Here’s the syntax of the CROSS JOIN clause:
SELECT column_list
FROM X
CROSS JOIN Y;Code language: SQL (Structured Query Language) (sql)In this syntax, the CROSS JOIN clause combines each row in the X table with every row in the Y table to create a result set.
Unlike other joins such as LEFT JOIN, RIGHT JOIN, and FULL JOIN, the CROSS JOIN does not have a condition (ON clause) for joining rows of the two tables.
The result of a CROSS JOIN is known as a Cartesian product. In Math, given two sets X and Y, the Cartesian product of X x Y is the set of all ordered pair (x,y), where x belongs to X and y belongs to Y.
Visualizing an Oracle Cross Join #
Suppose you have two tables X and Y, and want to merge rows from both tables using a cross join:
- The
Xtable has two columns:id(key) andx. - The
Ytable has two columns:id(key) andy.
A cross join returns a result set that includes all possible combinations of rows from the X table with rows from the Y table:
The following diagram illustrates how a cross works:
Oracle CROSS JOIN Clause Example #
We’ll use the products and warehouses table from the sample database:
Suppose you want to carry a physical inventory, you can construct a query that returns the product name and warehouse name, and blank quantity.
The following statement uses a CROSS JOIN clause to combine each row of the products table with every row in the warehouses table:
SELECT
warehouse_name,
product_name,
' ' quantity
FROM
products
CROSS JOIN warehouses
ORDER BY
warehouse_name;Code language: SQL (Structured Query Language) (sql)Output:

In this example, the cross join returns all combinations of product name and warehouses.
In practice, warehouse officers can use this query for physical inventory checking.
The products table 288 rows and the warehouses table has 9 rows, therefore, the cross join of these tables returns 2,592 rows (288 x 9).
Summary #
- Use the Oracle
CROSS JOINto merge rows from two tables by combining a row from the first table with every row from the second table.