Le titre et son auteur
Tu as rangé les livres du CDI dans deux tables. Dans livres, il y a un numéro d'auteur. Dans auteurs, il y a le nom.
Mais la documentaliste veut une seule liste : le titre, puis le nom. Pas un numéro !
Il faut demander à la base de recoller les deux tables. Cela s'appelle une jointure.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Jointure | Une requête qui recolle les lignes de deux tables, grâce à un lien. | Un livre et son auteur. |
| JOIN | Le mot SQL qui joint une deuxième table. En français : « joindre ». | FROM livres JOIN auteurs |
| ON | Le mot qui donne la condition du lien : quelle colonne égale quelle colonne. | ON livres.auteur_id = auteurs.id |
| Préfixe | Le nom de la table écrit devant une colonne, avec un point. | livres.titre |
| Alias de table | Un nom court donné à une table, avec AS. | livres AS l |
| LEFT JOIN | Une jointure qui garde toutes les lignes de la table de gauche, même sans lien. | auteurs LEFT JOIN livres |
| NULL | Une case vide : on ne connaît pas la valeur, ou il n'y en a pas. | Un auteur sans livre. |
| Clé étrangère | La colonne qui garde le numéro d'une ligne d'une autre table. | livres.auteur_id |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Recoller deux tables
Pour chaque livre, la base regarde son auteur_id. Elle cherche la ligne de auteurs qui a ce numéro comme id. Puis elle colle les deux lignes.
C'est ce que tu as fait à la main dans la leçon précédente. Maintenant, la base le fait pour toi, pour tous les livres d'un coup.
À toi : ta première jointure
-- JOIN colle les lignes des deux tables.
-- ON dit quelle colonne doit être égale à quelle colonne.
SELECT livres.titre, auteurs.nom
FROM livres
JOIN auteurs ON livres.auteur_id = auteurs.id;
-- Change l'ordre : SELECT auteurs.nom, livres.titre ...
Exemple travaillé : le recollage, livre par livre
| Livre | auteur_id | Auteur trouvé (id = auteur_id) | Ligne du résultat |
|---|---|---|---|
| Les Misérables | 1 | Victor Hugo | Les Misérables, Victor Hugo |
| Notre-Dame de Paris | 1 | Victor Hugo | Notre-Dame de Paris, Victor Hugo |
| La Gloire de mon père | 2 | Marcel Pagnol | La Gloire de mon père, Marcel Pagnol |
| Le Malade imaginaire | 3 | Molière | Le Malade imaginaire, Molière |
| Vingt mille lieues sous les mers | 4 | Jules Verne | Vingt mille lieues sous les mers, Jules Verne |
| Le Château de ma mère | 2 | Marcel Pagnol | Le Château de ma mère, Marcel Pagnol |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
À toi : devine le résultat
À toi de jouer
À toi : devine le résultat
3 questionsTes réponses sont corrigées ici et ne sont pas conservées. Un compte garde tes résultats.
Les préfixes et les alias
Si deux tables ont une colonne du même nom, comme id, la base ne sait pas laquelle tu veux. Tu écris donc la table devant : livres.titre.
C'est long. Donne un nom court à chaque table avec AS : livres AS l. Puis écris l.titre.
Tu peux ajouter WHERE, ORDER BY et LIMIT comme avant.
À toi : des noms courts
-- On donne un nom court à chaque table : l pour livres, a pour auteurs.
SELECT l.titre, a.nom
FROM livres AS l
JOIN auteurs AS a ON l.auteur_id = a.id
WHERE a.nom = 'Victor Hugo';
-- Essaie avec 'Marcel Pagnol'.
Ne jamais oublier le lien
Attention
Sans la condition du lien, la base colle chaque livre avec chaque auteur. Avec 6 livres et 5 auteurs, cela fait 6 fois 5, donc 30 lignes, presque toutes fausses.