Database
 sql >> Base de données >  >> RDS >> Database

Comment obtenir toutes les combinaisons possibles de lignes à partir de deux tables en SQL

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 .