Leçon 3 / 9 — Chapitre 1: Jointures fondamentales
LEFT JOIN : garder toutes les lignes même sans correspondance
LEFT JOIN fonctionne comme INNER JOIN, avec une différence essentielle : il garde toutes les lignes de la table de gauche (la première citée), même quand aucune correspondance n'existe dans la table de droite. Les colonnes de la table de droite valent alors NULL (« aucune valeur »).
SELECT p.nom, c.quantite
FROM produits p
LEFT JOIN commandes c ON p.id = c.produit_id;
Cette fois, Stylo et Biscuits réapparaissent dans le résultat — puisque produits est la table de gauche —, mais avec c.quantite à NULL, faute de commande correspondante. Les autres lignes sont identiques à celles obtenues avec INNER JOIN.
À retenir :
LEFT JOIN table2 ON condition;garde toutes les lignes de la table de gauche, avec ou sans correspondance dans la table de droite.- Quand aucune correspondance n'existe, les colonnes de la table de droite valent
NULLdans le résultat. LEFT JOINretourne toujours au moins autant de lignes qu'INNER JOINsur la même condition — jamais moins.
À vous de jouer : comparez le nombre de lignes retournées par INNER JOIN et par LEFT JOIN sur cette même condition, et identifiez les lignes en plus.
À vous de jouer
À faireVoici deux tables produits et commandes :
produits
id | nom | categorie | prix | stock
1 | Cahier | papeterie | 500 | 40
2 | Stylo | papeterie | 100 | 120
3 | Savon | hygiene | 300 | 25
4 | Jus | boisson | 600 | 15
5 | Biscuits | alimentaire | 400 | 60
6 | Dentifrice | hygiene | 500 | 10
commandes
id | produit_id | quantite
1 | 1 | 3
2 | 1 | 2
3 | 3 | 5
4 | 4 | 1
5 | 6 | 4
Combien de lignes retourne :
SELECT p.nom, c.quantite
FROM produits p
LEFT JOIN commandes c ON p.id = c.produit_id;
Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.
💡 Un nombre.
À vous de jouer
À faireVoici deux tables produits et commandes :
produits
id | nom | categorie | prix | stock
1 | Cahier | papeterie | 500 | 40
2 | Stylo | papeterie | 100 | 120
3 | Savon | hygiene | 300 | 25
4 | Jus | boisson | 600 | 15
5 | Biscuits | alimentaire | 400 | 60
6 | Dentifrice | hygiene | 500 | 10
commandes
id | produit_id | quantite
1 | 1 | 3
2 | 1 | 2
3 | 3 | 5
4 | 4 | 1
5 | 6 | 4
Le nom 'Stylo' apparaît-il dans le résultat de SELECT p.nom, c.quantite FROM produits p LEFT JOIN commandes c ON p.id = c.produit_id; ? Répondez par oui ou non.
Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.
💡 Oui ou non.
À vous de jouer
À faireVoici deux tables produits et commandes :
produits
id | nom | categorie | prix | stock
1 | Cahier | papeterie | 500 | 40
2 | Stylo | papeterie | 100 | 120
3 | Savon | hygiene | 300 | 25
4 | Jus | boisson | 600 | 15
5 | Biscuits | alimentaire | 400 | 60
6 | Dentifrice | hygiene | 500 | 10
commandes
id | produit_id | quantite
1 | 1 | 3
2 | 1 | 2
3 | 3 | 5
4 | 4 | 1
5 | 6 | 4
Dans le résultat de SELECT p.nom, c.quantite FROM produits p LEFT JOIN commandes c ON p.id = c.produit_id;, quelle est la valeur de c.quantite pour la ligne concernant 'Stylo' ?
Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.
💡 Une valeur spéciale SQL (en majuscules).