Aller au contenu principal

Les jointures

SQL - Requêtes avec JOIN

mysql -h etudiants.joliciel.org -u etudiant -p
use biblio;
Mot de passe d'accès au serveur SQL

Notions théoriques

Qu'est ce qu'une jointure SQL ?

Une jointure permet de créer une liaison entre 2 ou plusieurs tables pour pouvoir récupérer un résultat bien précis.

La jointure des tables se fait avec des requêtes SQL.

astuce

La seule chose pour que les jointures fonctionnent correctement est d’avoir des valeurs uniques (des identifiants) sur chacune des tables à lier.

Ces identifiants sont les clés primaires et les clés étrangères.

Exemple pratique

Prenons l’exemple de la gestion d'une bibliothèque avec des livres qui appartiennent à un genre de livre.

  • Cette base de données est composée de 2 tables :
    • la table T1 contient la liste des livres ;
    • la table T2 contient la liste des genres de livre.

Nous voyons dans ce MPD que la table T1 (livre) mémorise l’identifiant du genre de livres dans un champ (clé étrangère) nommée "id_genre" qui fait référence au champ "id" (clé primaire) de la table T2 (genre de livre).

Qu'est-ce qu'un MPD ?

Un MPD (Modèle Physique de Données) est la représentation des données d'un système d'information.

Lors de la modélisation d'une base de données avec MERISE, le MPD est la dernière étape.

La représentation des données est réalisée en langage SQL.

Lier des tables sans le mot clé JOIN

Il est possible de lier 2 tables dans une requête SQL sans utiliser explicitement le mot clé JOIN.

Pour cela, il suffit d'utiliser une condition dans la clause WHERE qui compare les colonnes de liaison des deux tables.

remarque

Lier 2 tables dans une requête SQL sans utiliser explicitement le mot clé JOIN est appelée une "ancienne" jointure (old-style join) ou une jointure implicite.

Liste de tous les livres avec leur genre

Nous souhaitons obtenir une liste de tous les livres avec leur genre.

Voici une requête possible (sans le mot clé JOIN) :

SELECT livre.titre, genre.libelle
FROM livre, genre WHERE livre.id_genre = genre.id;

Cette requête compare l'id du genre pour chaque livre avec l'id du genre dans la table genre.

astuce

L'utilisation de JOIN est préférable pour plusieurs raisons :

  • JOIN permet de séparer les critères de liaison et de filtrage, ce qui peut rendre la requête plus claire.
  • JOIN est plus flexible car il permet d'effectuer différents types de jointures (INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN) qui ne peuvent pas être réalisées aussi facilement avec la méthode WHERE.

Lier des tables avec le mot clé JOIN

Liste de tous les livres avec leur genre

Nous souhaitons obtenir une liste de tous les livres avec leur genre.

Voici une autre requête possible (avec le mot clé JOIN) :

SELECT livre.titre, genre.libelle
FROM livre JOIN genre ON livre.id_genre = genre.id;

astuce

Pour obtenir la 2ème requête, nous avons remplacé dans la 1ère requête :

  • FROM par JOIN
  • WHERE par ON
Différences d'une requête sans/avec JOIN
  • sans JOIN :
    SELECT livre.titre, genre.libelle
    FROM livre, genre WHERE livre.id_genre = genre.id;
  • avec JOIN :
    SELECT livre.titre, genre.libelle
    FROM livre JOIN genre ON livre.id_genre = genre.id;

Les principaux types de jointure

Les 4 principaux types de jointure sont :

Nous allons maintenant étudier comment lier des tables avec le mot clé JOIN.

Test de mémorisation/compréhension


Qu'est-ce qu'une jointure SQL ?


Qu'est-ce qui est nécessaire pour que les jointures fonctionnent correctement ?


Qu'est-ce qu'un MPD ?


Qu'est-ce qu'une clé étrangère dans une base de données ?


Quels sont les 4 principaux types de jointure en SQL ?