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 .