# SQL Server: Unlocking the Power of Combinations: The CROSS JOIN Magic Unveiled!

In T-SQL (Transact-SQL), a `Cross Join`

or `Cartesian Join`

is used to combine all rows from two or more tables, resulting in a Cartesian product. It means that each row from the first table will be matched with every row from the second table. Please do keep in mind that cross joins can quickly generate large result sets, so they should be used with caution and when necessary.

## Sample Data to Demo Cross Join

You can use this DB Fiddle to follow along and practice cross join

Here's an example of a cross join in T-SQL:

Let's say we have two tables: "Product" and "Color" with the following data:

Table: Product

ProductId | ProductName |
---|---|

1 | T-shirt |

2 | Jeans |

3 | Sneakers |

Table: Color

ColorId | ColorName |
---|---|

101 | Red |

102 | Blue |

103 | Green |

## Cross Join to Generate All Possible Product Color Combinations

Now, let's perform a cross join between these two tables:

`SELECT *`

FROM Product

CROSS JOIN Color

ORDER BY ProductId

,ColorId;

Instead of using the explicit CROSS JOIN keyword, you can simply list the tables separated by a comma to achieve the same result.

`SELECT *`

FROM Product

,Color

ORDER BY ProductId

,ColorId;

The result of this cross join will be:

ProductId | ProductName | ColorId | ColorName |
---|---|---|---|

1 | T-shirt | 101 | Red |

1 | T-shirt | 102 | Blue |

1 | T-shirt | 103 | Green |

2 | Jeans | 101 | Red |

2 | Jeans | 102 | Blue |

2 | Jeans | 103 | Green |

3 | Sneakers | 101 | Red |

3 | Sneakers | 102 | Blue |

3 | Sneakers | 103 | Green |

As you can see, each row from the "Product" table is combined with every row from the "Color" table, resulting in a total of nine rows (3 x 3) in the output. The ProductId and ProductName are repeated for each color in the result set.

This cross join helps in creating a matrix of all possible combinations of products and colors. Again, keep in mind that cross joins can quickly generate large result sets, so use them judiciously and consider applying filtering or other methods to limit the output as needed.