SQL CROSS JOIN

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_idl_nom_fr_frl_nom_en_gb
45CarotteCarott
46OignonOnion
47PoireauLeek

Table fruit :

f_idf_nom_fr_frf_nom_en_gb
87BananeBanana
88KiwiKiwi
89PoirePear

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_idl_nom_fr_frf_idf_nom_fr_fr
45Carotte87Banane
45Carotte88Kiwi
45Carotte89Poire
46Oignon87Banane
46Oignon88Kiwi
46Oignon89Poire
47Poireau87Banane
47Poireau88Kiwi
47Poireau89Poire

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).

Partager