· SQL Guroo · SQL Tutorial  · 3 min read

Mastering SQL Joins - Understanding CROSS JOIN

Learn how to use CROSS JOIN in SQL with simple, practical examples.

Learn how to use CROSS JOIN in SQL with simple, practical examples.

Introduction

CROSS JOIN creates all possible combinations between two tables. Think of it like pairing every item from one list with every item from another list. It’s also known as a Cartesian product.

Why CROSS JOIN Matters?

It’s useful when you need to:

  • Create all possible combinations
  • Generate a matrix of possibilities
  • Create sample data for testing
  • Pair each item with every other item

Main Content: Understanding CROSS JOIN

Let’s use these simple tables:

-- Create two simple tables
CREATE TABLE colors (
    color_name VARCHAR(20)
);

CREATE TABLE sizes (
    size_name VARCHAR(20)
);

-- Insert sample data
INSERT INTO colors VALUES
('Red'),
('Blue'),
('Green');

INSERT INTO sizes VALUES
('Small'),
('Medium'),
('Large');

Example 1: Basic CROSS JOIN

Let’s create all possible color and size combinations:

SELECT 
    c.color_name,
    s.size_name
FROM colors c
CROSS JOIN sizes s;

This simple query:

  1. Takes each color
  2. Combines it with every size
  3. Creates all possible pairs

Results:

color_name | size_name
-----------|----------
Red        | Small
Red        | Medium
Red        | Large
Blue       | Small
Blue       | Medium
Blue       | Large
Green      | Small
Green      | Medium
Green      | Large

Notice that:

  • Each color appears with every size
  • Total rows = (number of colors) × (number of sizes)
  • In this case, 3 colors × 3 sizes = 9 combinations

Example 2: Creating a Price Matrix

Let’s create a simple price list using two number tables:

-- Create and populate tables
CREATE TABLE base_prices (price INT);
CREATE TABLE multipliers (factor INT);

INSERT INTO base_prices VALUES (10), (20), (30);
INSERT INTO multipliers VALUES (1), (2), (3);

-- Generate price combinations
SELECT 
    b.price as base_price,
    m.factor as multiplier,
    b.price * m.factor as final_price
FROM base_prices b
CROSS JOIN multipliers m;

This query:

  1. Takes each base price
  2. Multiplies it by each factor
  3. Shows all possible price combinations

Results:

base_price | multiplier | final_price
-----------|------------|-------------
10         | 1          | 10
10         | 2          | 20
10         | 3          | 30
20         | 1          | 20
20         | 2          | 40
20         | 3          | 60
30         | 1          | 30
30         | 2          | 60
30         | 3          | 90

Example 3: Creating Date Combinations

Let’s create a simple calendar grid:

-- Create and populate tables
CREATE TABLE days (day_name VARCHAR(10));
CREATE TABLE times (hour INT);

INSERT INTO days VALUES 
('Monday'), ('Tuesday'), ('Wednesday');

INSERT INTO times VALUES 
(9), (10), (11);

-- Generate all time slots
SELECT 
    d.day_name,
    t.hour as hour_of_day
FROM days d
CROSS JOIN times t
ORDER BY 
    CASE d.day_name 
        WHEN 'Monday' THEN 1
        WHEN 'Tuesday' THEN 2
        WHEN 'Wednesday' THEN 3
    END,
    t.hour;

This query:

  1. Takes each day
  2. Combines it with each hour
  3. Creates all possible time slots

Results:

day_name   | hour_of_day
-----------|-------------
Monday     | 9
Monday     | 10
Monday     | 11
Tuesday    | 9
Tuesday    | 10
Tuesday    | 11
Wednesday  | 9
Wednesday  | 10
Wednesday  | 11

Best Practices

  1. Table Size Awareness

    • Remember results = rows_table1 × rows_table2
    • Be careful with large tables
    • Consider row limits for testing
  2. Query Organization

    • Use clear table aliases
    • List smaller table first (for readability)
    • Use proper indentation
  3. Performance Considerations

    • Avoid CROSS JOIN on large tables
    • Use WHERE clauses after the join if needed
    • Test with small data sets first
  4. Use Cases

    • Use for generating combinations
    • Perfect for lookup tables
    • Good for creating test data
  5. Common Mistakes to Avoid

    • Don’t use ON clause (CROSS JOIN doesn’t need it)
    • Don’t confuse with INNER JOIN
    • Don’t use with large tables without limits

Remember:

  • CROSS JOIN creates all possible combinations
  • No matching condition is needed
  • Results grow exponentially with table size
  • Perfect for generating matrices and combinations

Happy querying! 🚀

Back to Blog

Related Posts

View All Posts »