INNER JOIN LE PLUS COURANT
Renvoie uniquement les lignes ayant des valeurs correspondantes dans les deux tables. C'est le type de JOIN par défaut et le plus utilisé.
SELECT orders.id, customers.name, orders.amount
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.id
Points clés :
- Renvoie uniquement les enregistrements correspondants des deux tables
- Filtre automatiquement les lignes sans correspondance
- Le JOIN le plus performant
- Peut s'écrire simplement
JOIN (INNER est implicite)
📚 En savoir plus : Les JOIN SQL pour débutants, Guide des jointures MySQL, Guide des jointures SQL Server
LEFT JOIN
Renvoie toutes les lignes de la table de gauche et les lignes correspondantes de la table de droite. En l'absence de correspondance, les colonnes de la table de droite valent NULL.
SELECT customers.name, orders.amount
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
Points clés :
- Conserve tous les enregistrements de la table de gauche (la première)
- Valeurs NULL pour les colonnes de droite sans correspondance
- Aussi appelé LEFT OUTER JOIN
- Pratique pour trouver les enregistrements sans données liées
📚 En savoir plus : Les JOIN SQL pour débutants, Guide des jointures MySQL, Guide des jointures SQL Server
RIGHT JOIN
Renvoie toutes les lignes de la table de droite et les lignes correspondantes de la table de gauche. L'inverse du LEFT JOIN.
SELECT orders.amount, customers.name
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.id
Points clés :
- Conserve tous les enregistrements de la table de droite (la seconde)
- Valeurs NULL pour les colonnes de gauche sans correspondance
- Aussi appelé RIGHT OUTER JOIN
- Peut toujours être réécrit en LEFT JOIN
📚 En savoir plus : Les JOIN SQL pour débutants, Guide des jointures MySQL, Guide des jointures SQL Server
FULL OUTER JOIN
Renvoie toutes les lignes des deux tables, avec des valeurs NULL là où il n'y a pas de correspondance, dans un sens comme dans l'autre.
SELECT customers.name, orders.amount
FROM customers
FULL OUTER JOIN orders
ON customers.id = orders.customer_id
Points clés :
- Combine les résultats d'un LEFT JOIN et d'un RIGHT JOIN
- Affiche tous les enregistrements des deux tables
- Non pris en charge par MySQL (utilise UNION à la place)
- Pratique pour repérer toutes les relations et les manques
📚 En savoir plus : Les JOIN SQL pour débutants, FULL OUTER JOIN avec MySQL, Guide des jointures SQL Server
CROSS JOIN À UTILISER AVEC PRUDENCE
Renvoie le produit cartésien des deux tables : chaque ligne de la première table combinée à chaque ligne de la seconde.
SELECT sizes.name, colors.name
FROM sizes
CROSS JOIN colors
SELECT sizes.name, colors.name
FROM sizes, colors
Points clés :
- Pas besoin de clause ON (aucune condition de jointure)
- Nombre de lignes du résultat = (lignes de gauche × lignes de droite)
- Peut vite produire d'énormes jeux de résultats
- Pratique pour générer des combinaisons ou des données de test
📚 En savoir plus : Les JOIN SQL pour débutants, CROSS JOIN avec PostgreSQL
LEFT ANTI JOIN
Renvoie les lignes de la table de gauche sans correspondance dans la table de droite. Pratique pour trouver les enregistrements sans relation.
SELECT customers.name
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
WHERE orders.id IS NULL
SELECT customers.name
FROM customers
WHERE NOT EXISTS (
SELECT 1 FROM orders
WHERE orders.customer_id = customers.id
)
Points clés :
- S'écrit avec LEFT JOIN + WHERE IS NULL
- Trouve les enregistrements sans données liées
- Aussi appelé « LEFT EXCLUDING JOIN »
- Exemple : les clients qui n'ont jamais passé de commande
RIGHT ANTI JOIN
Renvoie les lignes de la table de droite sans correspondance dans la table de gauche. L'inverse du LEFT ANTI JOIN.
SELECT orders.id
FROM customers
RIGHT JOIN orders
ON customers.id = orders.customer_id
WHERE customers.id IS NULL
SELECT orders.id
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.id
WHERE customers.id IS NULL
Points clés :
- S'écrit avec RIGHT JOIN + WHERE IS NULL
- Trouve les enregistrements orphelins de la table de droite
- Peut toujours être réécrit en LEFT ANTI JOIN
- Exemple : les commandes sans client valide