Leçon 1 / 9 — Chapitre 1: Jointures fondamentales
INNER JOIN : combiner deux tables liées
Jusqu'ici, chaque requête ne portait que sur une seule table. Une base de données relationnelle contient souvent plusieurs tables liées entre elles par une valeur commune — une clé. INNER JOIN combine deux tables en associant les lignes qui partagent cette valeur.
Voici une seconde table, commandes, liée à produits par la colonne produit_id (qui correspond à id dans produits) :
commandes
id | produit_id | quantite
1 | 1 | 3
2 | 1 | 2
3 | 3 | 5
4 | 4 | 1
5 | 6 | 4
SELECT p.nom, c.quantite
FROM produits p
INNER JOIN commandes c ON p.id = c.produit_id;
p et c sont des alias de table (raccourcis, détaillés dans la leçon suivante). ON p.id = c.produit_id précise la condition de correspondance.
Le résultat contient une ligne par correspondance trouvée : Cahier (id 1) a deux commandes, il apparaît donc deux fois. Stylo et Biscuits n'ont aucune commande : INNER JOIN ne garde que les lignes où une correspondance existe des deux côtés, donc ils n'apparaissent pas du tout.
À retenir :
INNER JOIN table2 ON condition;combine deux tables en ne gardant que les lignes où la condition de correspondance est vraie des deux côtés.- Une ligne de la table de gauche apparaît une fois par correspondance trouvée — elle peut donc apparaître plusieurs fois, ou pas du tout.
- Une ligne sans aucune correspondance disparaît complètement du résultat avec
INNER JOIN.
À vous de jouer : dans un bac à sable SQL, créez les deux tables et testez cette requête pour observer les 5 lignes retournées.
À 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
INNER 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
Dans le résultat de SELECT p.nom, c.quantite FROM produits p INNER JOIN commandes c ON p.id = c.produit_id;, combien de fois le nom 'Cahier' apparaît-il ?
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 INNER 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.