Dans le langage SQL, la commande CROSS JOIN est un type de jointure sur 2 tables SQL qui permet de retourner le produit cartésien. Autrement dit, cela permet de retourner chaque ligne d’une table avec chaque ligne d’une autre table. Ainsi effectuer le produit cartésien d’une table A qui contient 30 résultats avec une table B de 40 résultats va produire 1200 résultats (30 x 40 = 1200). En général la commande CROSS JOIN est combinée avec la commande WHERE pour filtrer les résultats qui respectent certaines conditions.
Attention, le nombre de résultat peut facilement être très élevé. S’il est effectué sur des tables avec beaucoup d’enregistrements, cela peut ralentir sensiblement le serveur.
Syntaxe
Pour effectuer un jointure avec CROSS JOIN, il convient d’effectuer une requête SQL respectant la syntaxe suivante:
SELECT * FROM table1 CROSS JOIN table2
Méthode alternative pour retourner les mêmes résultats :
SELECT * FROM table1, table2
L’une ou l’autre de ces syntaxes permettent d’associer tous les résultats de table1 avec chacun des résultats de table2.
Exemple
Imaginons une application de recettes de cuisines qui contient 2 tables d’ingrédients, la table legume et la table fruit.
Table legume :
l_id | l_nom_fr_fr | l_nom_en_gb |
---|---|---|
45 | Carotte | Carott |
46 | Oignon | Onion |
47 | Poireau | Leek |
Table fruit :
f_id | f_nom_fr_fr | f_nom_en_gb |
---|---|---|
87 | Banane | Banana |
88 | Kiwi | Kiwi |
89 | Poire | Pear |
Pour une raison quelconque l’application doit associer tous les légumes avec tous les fruits. Toutes les combinaisons doivent être affichées. Pour cela il convient d’effectuer l’une ou l’autre des requêtes suivantes:
SELECT l_id, l_nom_fr_fr, f_id, f_nom_fr_fr FROM legume CROSS JOIN fruit
ou :
SELECT l_id, l_nom_fr_fr, f_id, f_nom_fr_fr
FROM legume, fruit
Résultats :
l_id | l_nom_fr_fr | f_id | f_nom_fr_fr |
---|---|---|---|
45 | Carotte | 87 | Banane |
45 | Carotte | 88 | Kiwi |
45 | Carotte | 89 | Poire |
46 | Oignon | 87 | Banane |
46 | Oignon | 88 | Kiwi |
46 | Oignon | 89 | Poire |
47 | Poireau | 87 | Banane |
47 | Poireau | 88 | Kiwi |
47 | Poireau | 89 | Poire |
Le résultat montre bien que chaque légume est associé à chaque fruit. Avec 3 fruits et 3 légumes, il y a donc 9 lignes de résultats (3 x3 = 9).