Les jointures
I. Les jointuresâïž
Nous allons créer une nouvelle base de données ayant deux tables :
Ă vous de jouer 1
1. Créez une table auteur
comportant les attributs suivants
- id : entier - clé primaire
- nom : texte
- prenom : texte
- ann_naissance : entier
- langue_ecriture : texte
Créez une table livre
comportant les attributs suivants
- id : entier - clé primaire
- titre : texte
- id_auteur : entier
- ann_publi : entier
- note : entier
Solution
CREATE TABLE auteur
(id INT PRIMARY KEY, nom TEXT, prenom TEXT, ann_naissance INT, langue_ecriture TEXT);
CREATE TABLE livre
(id INT PRIMARY KEY, titre TEXT, id_auteur INT, ann_publi INT, note INT);
2. Nous allons ajouter les données de la table auteur
et de la table livre
Exécuter :
đ Nous avons maintenant 2 tables que nous allons pouvoir associer grĂące aux jointures.
Résumé
Il existe diffĂ©rents types de jointures en SQL. Cette annĂ©e nous nâĂ©tudierons que : JOIN ⊠ON
đ” Remarque : vous trouverez parfois Ă©crit INNER JOIN ⊠ON
. C'est la mĂȘme chose.
JOIN ... ON
JOIN ... ON
Exemple
Tester :
đ Il sâagit de la jointure la plus simple. Câest une jointure dite interne. Ce type de jointure va renvoyer les entrĂ©es des deux tables si jamais une correspondance a Ă©tĂ© trouvĂ©e entre les deux tables.
Ici lâidentifiant id
de la table auteur
correspond Ă lâidentifiant : id
stocké dans la table livre
.
FROM livre JOIN auteur
permet de créer une jointure entre les tables livre
et auteur
câest-Ă -dire rĂ©unir les tables livre
et auteur
en une seule table.
ON livre.id_auteur = auteur.id
signifie qu'une ligne de la table livre
devra ĂȘtre fusionnĂ©e avec la ligne de la table auteur
Ă condition que l'attribut id_auteur
de la ligne de la table livre
soit Ă©gal Ă l'attribut id
de la ligne de la table auteur
.
Noms d'attributs identiques
đ” Si un mĂȘme nom d'attribut est prĂ©sent dans les 2 tables (par exemple ici l'attribut id
), il est nécessaire d'ajouter le nom de la table devant afin de pouvoir les distinguer (auteur.id
et livre.id
)
AS
Lâutilisation des « alias », mot clĂ© AS, permet dâobtenir des Ă©critures plus compactes. Câest trĂšs souvent utilisĂ©.
Reprenons lâexemple prĂ©cĂ©dant mais en Ă©crivant les lignes suivantes :
La table livre
est désignée par la lettre l
et la table auteur
par la lettre a
.
Exécuter :
Ă vous de jouer 2
Exécutez
Quelle diffĂ©rence constatez-vous avec la requĂȘte prĂ©cĂ©dente ?
Solution
On a d'abord les colonnes de la table auteur
, puis ensuite celles de la table livre
.
Ă vous de jouer 3
Ăcrire la jointure entre la table livre
et la table auteur
en ne sélectionnant que les attributs titre de la tables livre
et nom
et prenom
de la table auteur
.
Solution
SELECT titre, nom , prenom
FROM livre
JOIN auteur ON livre.id_auteur = auteur.id;
Syntaxes
đ Dans le cas d'une jointure, Il est possible d'utiliser la clause WHERE
et ORDER BY
aprĂšs le JOIN ... ON ...
Ă vous de jouer 4
Ăcrire la jointure entre la table livre
et la table auteur
en ne sélectionnant que les attributs titre
, nom
, prenom
ann_publi
oĂč seules les annĂ©es de publication supĂ©rieures Ă 1950 sont considĂ©rĂ©es.
Le résultat sera donné par ordre alphabétique des nom d'auteur.
Solution
SELECT titre, nom , prenom , ann_publi
FROM livre
JOIN auteur ON livre.id_auteur = auteur.id
WHERE ann_publi >= 1950
ORDER BY nom ASC;
II. Les clĂ©s Ă©trangĂšresâïž
Clé étrangÚre
Les jointures permettent dâassocier plusieurs tables dans une mĂȘme requĂȘte. Pour cela nous avons besoin comme nous l'avons vu dans le schĂ©ma relationnel d'une clĂ© primaire et d'une clĂ© Ă©trangĂšre.
Dans notre exemple l'attribut id_auteur
de la tables livre
est bien une clé étrangÚre puisque cet attribut correspond à l'attribut id
de la table auteur
.
Il est possible lors de la création d'une table de définir une clé étrangÚre.
Ă vous de jouer 5
1. Ajoutez Ă la table livre
un enregistrement pour lequel id_auteur
nâest pas possible compte-tenu de la table existante (par exemple 12).
Solution
INSERT INTO livre
(id, titre, id_auteur, ann_publi, note)
VALUES
(17, "L'Odyssée", 12, 1571, 9);
2. Que se passe-t-il ?
Solution
đą Il ne se passe rien ... L'anomalie n'a pas Ă©tĂ© dĂ©tectĂ©e.
Exemple
đ Nous allons crĂ©er une nouvelle table livre_2, de la façon suivante :
Recommencer : essayez dâajouter Ă la table livre_2 un enregistrement pour lequel id_auteur nâest pas possible compte-tenu de la table existante (par exemple 12)
Clé étrangÚre
Grùce à cette clé étrangÚre, SQLite sera capable de détecter les anomalies au niveau de la clé étrangÚre.
CrĂ©ditsâïž
Jean-Louis THIROT, Valérie MOUSSEAUX et Mireille COILHAC
D'aprÚs David Roche, Pixees et Stéphan Van Zuijlen Lycée Jean Moulin