Aller au contenu

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