PaliSkill
SQL Intermédiaire

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

À faire

Voici 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

À faire

Voici 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

À faire

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

Quitter le module