Problème :
Vous souhaitez obtenir toutes les combinaisons de lignes de deux tables en SQL.
Exemple :
Voici deux tableaux :l'un contient des lettres (letters
), et l'autre contient des chiffres (numbers
):
lettre |
---|
X |
Oui |
nombre |
---|
0 |
1 |
2 |
Solution 1 :
Afin de combiner chaque ligne des letters
tableau avec chaque ligne de numbers
table, nous utiliserons le CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
Le résultat de la requête ressemble à ceci :
lettre | numéro |
---|---|
X | 0 |
Oui | 0 |
X | 1 |
Oui | 1 |
X | 2 |
Oui | 2 |
Solution 2 :
Une autre façon d'effectuer le CROSS JOIN est la suivante :
SELECT * FROM letters, numbers;
Cela obtiendra exactement le même résultat produit par la requête précédente.
Discussion :
En règle générale, un CROSS JOIN
produit un ensemble de résultats dans lequel chaque ligne d'une table est jointe à chaque ligne d'une autre table. En d'autres termes, si la première table stocke n lignes et la deuxième table stocke m lignes, puis un CROSS JOIN
se traduira par un produit cartésien de n × m Lignes. C'est pourquoi il y a six lignes renvoyées par la requête dans l'exemple ci-dessus.
Parce qu'un CROSS JOIN
produit toutes les combinaisons possibles des lignes parmi les tables jointes, il n'est pas nécessaire de spécifier une relation. Ainsi, contrairement aux autres JOINs
, il n'y a pas de ON
clause dans un CROSS JOIN
.