Aller au contenu principal

4 types de jointures

Voyons maintenant les 4 principaux types de jointure.

SQL - Requêtes avec JOIN

mysql -h mariadb.app.ndlpavranches.fr -u etudiant -p
use biblio;
📌 Mot de passe d'accès au serveur SQL

Petite vérification​

Avant de commencer, vérifiez si vous savez...

  1. sur la table livres, écrire SELECT COUNT(*) AS Nombre_de_livres FROM livres; et vérifier que le résultat s'affiche sur une seule ligne, avec une colonne nommée Nombre_de_livres (et non COUNT(*))
  2. sur la table livres, écrire une requête combinant MAX(nbpages) et MIN(nbpages) dans un même SELECT, et vérifier qu'elle retourne bien une seule ligne contenant les deux valeurs
  3. expliquer la différence entre ce que retourne SUM(nbpages) et ce que retourne AVG(nbpages) sur la table livres
📌 Réponse attendue

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 MLD 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 MLD ?

Un MLD (Modèle Logique de Données) représente les tables et les relations entre les tables.

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 MLD ?


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 ?