La plupart des jointures nécessitent une condition de correspondance (ON). Le CROSS JOIN est différent : il retourne toutes les combinaisons possibles de lignes entre les tables jointes. Ce résultat est appelé produit cartésien.
Un CROSS JOIN produit un résultat dont le nombre de lignes est le produit du nombre de lignes de la première table par celui de la seconde. Il n'y a pas de condition de correspondance : chaque ligne de la table A rencontre chaque ligne de la table B.
Visualisation :
Table A (Couleurs) Table B (Tailles)
+-----------+ +-----------+
| couleur | | taille |
+-----------+ +-----------+
| Rouge | --\ | Petit |
| Bleu | ---|------> | Moyen |
+-----------+ --/ | Grand |
+-----------+
Résultat (Combinaisons) :
Rouge, Petit
Rouge, Moyen
Rouge, Grand
Bleu, Petit
Bleu, Moyen
Bleu, Grand
Si la table A a 2 lignes et la table B en a 3, le résultat aura 2 x 3 = 6 lignes.
Deux façons d'écrire un CROSS JOIN. La syntaxe explicite est recommandée pour la clarté :
-- Syntaxe explicite (recommandée)
SELECT
table1.column,
table2.column
FROM
table1
CROSS JOIN
table2;
-- Syntaxe implicite (ancienne)
SELECT
table1.column,
table2.column
FROM
table1,
table2;
Attention : Soyez prudent avec
CROSS JOINsur de grandes tables. Joindre deux tables de 1 000 lignes chacune produira 1 000 000 lignes !
Créer un rapport qui montre chaque catégorie de film pour chaque magasin, même si le magasin n'a pas de films dans cette catégorie.
SELECT
s.store_id,
c.name AS category_name
FROM
store AS s
CROSS JOIN
category AS c;
Cela produit une liste de toutes les catégories pour le magasin 1, puis pour le magasin 2.
CROSS JOIN est souvent utilisé pour générer des permutations pour des tests ou pour construire des calendriers où il faut voir tous les créneaux horaires pour tous les utilisateurs.
LEFT JOIN, il permet d'identifier les combinaisons manquantes dans vos données.ON (pas de condition de correspondance).