Les différentes jointures
- MYPE SAS
- 5 mai
- 4 min de lecture
Dernière mise à jour : 24 juil.
Dans cet article, nous verrons les différents types de jointure possibles en SQL. Vous constaterez que, si de nombreux types de jointures sont possibles, la plus couramment utilisée est la INNER JOIN. C’est d’ailleurs vers cette jointure que renvoie le mot-clef JOIN utilisé sans précision.
INNER JOIN
La jointure INNER JOIN, ou EQUIJOIN, renvoie les lignes d’une table 1 et d’une table 2, dans lesquelles on trouve les colonnes colonne1 et colonne2 respectivement, pour lesquelles il y a l’égalité table1.colonne1=table2.colonne2. Cette requête ne renvoie pas une ligne pour laquelle table1.colonne1 existe mais table2.colonne2 n’existe pas, par exemple.
Exemple de syntaxe :
SELECT *
FROM table1 JOIN table2
ON table1.colonne1=table2.colonne2;
Exemple :
On dispose d’une base de données gest_fact, représentant les factures d’une entreprise. Cette base de données est constituée des tables suivantes : produit(nom_produit, gamme, type, prix_unitaire), facture(num_facture, date_facture, magasin, nom_client), ligne_facture(id_lf, nom_produit, num_facture, quantite, num_lf, statut). Imaginons qu’on souhaite afficher les noms des clients à qui s’adressent toutes les factures contenant le produit ‘P01’. Voici le code correspondant, et la réponse obtenue :

NATURAL JOIN
La jointure NATURAL JOIN, permet de réaliser une INNER JOIN, avec une condition implicite d’égalité entre des colonnes de même nom et de même type. Elle n’est pas implémentée dans SQL Server.
Exemple de syntaxe :
SELECT *
FROM table1 NATURAL JOIN table2;
Exemple :
L’exemple montré pour le INNER JOIN revient à faire :
SELECT DISTINT nom_client
FROM ligne_facture NATURAL JOIN facture
WHERE nom_produit=’P01’;
LEFT OUTER JOIN
La jointure LEFT OUTER JOIN, ou simplement LEFT JOIN, appliquée entre les tables 1 et 2, renvoie toutes les lignes de la table 1, complétées par les informations dans la table 2, lorsqu’il existe une ligne dans la table 2 respectant une condition d’égalité sur une colonne. Si une telle ligne n’existe pas, les cellules correspondantes sont simplement remplies par la valeur NULL. Ce type de jointure permet de s’assurer qu’on récupère bien toutes les informations de la table 1, même si la table 2 peut être incomplète.
Exemple de syntaxe :
SELECT *
FROM table1 LEFT OUTER JOIN table2
ON table1.colonne1=table2.colonne2;
Exemple :
On dispose d’une base de données gest_fact, représentant les factures d’une entreprise. Cette base de données est constituée des tables suivantes : produit(nom_produit, gamme, type, prix_unitaire), facture(num_facture, date_facture, magasin, nom_client), ligne_facture(id_lf, nom_produit, num_facture, quantite, num_lf, statut). On rajoute dans notre base de données un produit ‘P11’, qui n’a encore jamais été vendu. Voici ce que donne la jointure LEFT JOIN de produit avec ligne_facture :

Si on avait utilisé une jointure NATURAL JOIN, le produit ‘P11’ n’apparaîtrait pas.
RIGHT OUTER JOIN
La jointure RIGHT OUTER JOIN, ou simplement RIGHT JOIN, suit le même principe que la jointure LEFT OUTER JOIN, mais en échangeant les rôles des tables. On a ainsi :
SELECT * FROM table1 LEFT JOIN table2 ON table1.colonne1=table2.colonne2;
Qui est équivalente à :
SELECT * FROM table2 RIGHT JOIN table1 ON table1.colonne1=table2.colonne2;
FULL OUTER JOIN
La jointure FULL OUTER JOIN, ou simplement FULL JOIN, appliquée entre les tables 1 et 2, renvoie toutes les lignes de la table 1, complétées par les informations dans la table 2, lorsqu’il existe une ligne dans la table 2 respectant une condition d’égalité sur une colonne. Si une telle ligne n’existe pas, les cellules correspondantes sont simplement remplies par la valeur NULL. De plus, les lignes de la table 2 qui n’ont pas de lignes dans la table 1 leur correspondant, sont aussi représentées, et leurs lignes sont complétées par la valeur NULL. Ce type de jointure permet de s’assurer qu’on récupère bien toutes les informations de la table 1 et de la table 2, même quand elles n’ont pas de correspondance dans l’autre table.
Exemple de syntaxe :
SELECT *
FROM table1 FULL OUTER JOIN table2
ON table1.colonne1=table2.colonne2;
Exemple :
Prenons le même exemple que pour la jointure LEFT JOIN. On constate qu’on peut obtenir le même résultat avec une FULL JOIN :

CROSS JOIN
La jointure CROSS JOIN permet de faire le produit cartésien de deux tables. Lorsqu’on l’effectue entre une table 1 et une table 2, elle renvoie toutes les lignes de la table 1, accolées successivement à toutes les lignes de la table 2. Elle ne nécessite aucune condition d’égalité entre des colonnes, ce qui signifie qu’elle ne représente aucune correspondance réelle entre les deux lignes jointes. Elle renvoie aussi un nombre important de lignes, et est à utiliser avec précaution.
Exemple de syntaxe :
SELECT * FROM table1 CROSS JOIN table2;
Ce qui est équivalent à :
SELECT * FROM table1, table2;
Exemple :
Reprenons la base de données gest_fact utilisée jusqu’ici. Voici le résultat du produit cartésien des tables ‘produit’ et ‘facture’, qui n’ont pas de colonnes en commun :

Et voici le résultat du produit cartésien des tables ‘produit’ et ‘ligne_facture’, qui ont une colonne en commun. Il faut garder à l’esprit qu’une ligne ne représente pas une ligne de facture réelle, ni un produit réel, mais la juxtaposition d’une ligne de facture et d’un produit.

SELF JOIN
Une SELF JOIN est une jointure (quelle qu’elle soit) d’une table avec elle-même. Ceci est utile lorsqu’une table lie plusieurs de ses lignes entre elles.
Exemple de syntaxe :
SELECT * FROM table1 AS t1
INNER JOIN table1 AS t2
ON t1.colonne1=t2.colonne2 ;
Exemple :
Imaginons par exemple que la table ‘produit’ contienne une colonne ‘plus_avec’, qui contient le nom du produit qui a le plus été acheté en même temps que chaque produit. On souhaite maintenant afficher les caractéristiques de chaque produit, et, sur la même ligne, les caractéristiques du produit le plus vendu avec. Voici comment le faire :

👉 Retrouvez toutes nos formations en SQL.



Commentaires