Jointures SQL : Guide pratique sur les jointures (Update 2024-2025)
Les jointures permettent d’extraire des informations issues de tables mises en relation. Cette instruction est une des plus importantes en SQL.
Si tu commences à manipuler des bases de données relationnelles et à coder en SQL, tu dois apprendre à maîtriser l’art des jointures SQL.
Joindre deux tables revient à créer une nouvelle table temporaire qui fusionne les données de deux datasets.
Il existe de nombreuses manières de fusionner les enregistrements présents sur deux tables.
Trouver la bonne manière et la réaliser sans se tromper est parfois difficile !
Mais pas de panique, cet article te présente les jointures SQL à connaître quand tu commence à te former à SQL.
Qu’est-ce qu’une jointure SQL?
Les jointures SQL sont très utilisées par un Data analyst, que ce soit sur des plateformes propriétaires comme Oracle, IBM ou encore MySQL.
Le SQL est langage qui permet de manipuler des bases de données (database) mettant en relation une série de tables. Chaque table prend la forme d’un tableau, composé de lignes et de colonnes dans lesquelles sont classées les données (comme un tableau Excel).
Ces tables sont ensuite mises en relation à l’aide d’une clé primaire et d’une clé étrangère. Pour associer les données des différentes tables mises en relation, on doit utiliser une jointure.
Prenons un exemple que nous allons utiliser tout au long de cet article. Nous allons effectuer des jointures sur une base de données composées de deux tables :
- Une table Cinema, composée d’une liste de films avec différentes informations concernant celle-ci. L’ID_film correspond à la clé primaire de la table, c’est à dire un identifiant qui permet d’identifier un film de manière unique (un peu comme un numéro de série).
- Une table Acteurs qui liste des acteurs. L’ID film est la clé étrangère, elle permet de savoir dans quel film l’acteur a joué. Par exemple : Mark Hamill a joué dans le film dont l’ID_film est 2 et si on regarde dans la table Cinema, l’ID 2 correspond au film Star Wars.
Si tu souhaites associer les données de ces deux tables afin d’effectuer une analyse, alors tu dois faire une jointure SQL !
Quand utiliser les jointures SQL?
Une jointure est une requête qui sert à fusionner toute ou partie de deux tables d’une base de données relationnelles afin d’obtenir un nouveau dataset facile à exploiter.
Par exemple, si tu veux associer les acteurs et leur film, tu dois faire une jointure SQL. Dans ce cas, il s’agit d’identifier uniquement les correspondances entre un acteur et un film. On va donc réaliser une jointure de type INNER JOIN pour associer les données de deux tables que lorsque l’ID_film est identique.
Cette nouvelle table est donc née de la jointure des deux tables précédentes. Elle permet d’identifier facilement que deux acteurs ont joué dans le même film. En effet, "Don’t look up" est répété deux fois car son ID se trouve dans deux lignes différentes de la table Acteurs.
Ainsi, une jointure SQL facilite l’analyse en fusionnant les données de plusieurs tables. Il existe différents types de jointures SQL adaptées à la question qu’on se pose. Savoir les utiliser est essentiel si tu souhaites te spécialiser dans l’analyse de données.
Avec Databird, tu peux acquérir les compétences d’un Data analyst en quelques semaines. Nos formations sont adaptées à tous les emplois du temps !
{{cours-gratuit-sql="/brouillon"}}
Les différents types de jointures SQL
Il existe plusieurs instructions de jointures différentes. Chaque jointure a des caractéristiques particulières qu’il faut connaître avant de s’en servir. Bien choisir sa jointure peut te faire gagner du temps et t’éviter des problèmes !
INNER JOIN
INNER JOIN : définition
Le INNER JOIN est une jointure qui permet d’associer les données de deux tables seulement s’il existe une correspondance. Ainsi, la nouvelle table associe les enregistrements (=lignes) que si la clé est identique. En mathématiques on appelle ça une intersection.
Dans cet article :
- La table A correspond à la table Cinéma. Dans la jointure, elle est positionnée à gauche,
- La table B correspond à la table Acteurs. Dans la jointure, elle est positionnée à droite.
INNER JOIN : requête SQL
Nous allons maintenant voir comment construire la requête SQL INNER JOIN.
La requête se décompose en 3 parties :
- SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence,
- INNER JOIN est le type de jointure utilisée,
- ON définit la clé de jointure (ID_film).
SELECT colonnes 1, colonnes 2, …
FROM table1
INNER JOIN table2
ON clé de jointure
INNER JOIN : exemple d’utilisation
Voici la requête SQL qui a permis d’obtenir le tableau présenté précédemment :
SELECT ID_film, Nom_du_film, Annee_de_sortie, Note_IMDB
FROM Cinema
INNER JOIN Acteurs
ON Cinema.ID_film = Acteurs.ID_film
Tu remarques qu’il manque l’ID_film 4 de la table Cinema, correspondant au film Titanic. En effet, il n’existe pas de correspondance entre à l’ID_film 4 dans la table Acteurs. La nouvelle table ne contient pas l’acteur Tom Hanks car il n’est associé à aucun film.
C’est logique : INNER JOIN ne garde que les lignes qui font l’objet d’une intersection.
LEFT JOIN
LEFT JOIN : définition
Cette instruction réalise une jointure entre deux tables en gardant toutes les informations de la table de gauche. Les données de la table de droite sont associées à la table de gauche seulement si leur clé correspond.
Remarque : Quand on dit “à gauche” et “à droite”, on fait référence à l’ordre d’apparition des tables après la clause ON : table_gauche.attribut = table_droite.attribut.
LEFT JOIN appartient à la famille des jointures OUTER JOIN. Si un enregistrement ne se situe pas dans la table de droite mais qu’il existe la table de gauche, alors on trouve la valeur NULL dans le dataset final.
Contrairement à un INNER JOIN, un LEFT JOIN préserve les données de la table de gauche, même en l’absence de correspondance.
LEFT JOIN : requête SQL
La requête LEFT JOIN se construit ainsi :
- SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence.
- LEFT JOIN est le type de jointure SQL
- ON définit la clé de jointure (ID_film)
SELECT colonnes 1, colonnes 2, …
FROM table1
LEFT JOIN table2
ON clé de jointure
LEFT JOIN : Exemple d’utilisation
Nous allons garder les mêmes tables qu’au début de l’article. Nous allons appliquer la requête SQL LEFT JOIN sur ces deux tables.
SELECT *
FROM cinema
LEFT JOIN acteurs
ON cinema.id_film = acteurs.id_film
Remarque : l’étoile derrière la clause SELECT signifie “tout sélectionner”.
Ici, tous les enregistrements de la table Cinema sont présents. Cependant, comme aucun acteur est associé à l’ID_film 4 (Titanic), on trouve des valeurs NULL.
Tu remarques également que Tom Hanks ne figure pas dans cette nouvelle table. C’est normal car la table de référence est la table de gauche, c’est à dire la table Cinema.
{{cours-gratuit-sql="/brouillon"}}
LEFT JOIN sans intersection
Cette jointure est un LEFT JOIN auquel on retire les enregistrements qui correspondent à la table de droite. Ainsi, on ne garde que les données de la table de gauche qui n’ont aucune correspondance avec la table de droite.
SELECT colonnes 1, colonnes 2, …
FROM table1<br> LEFT JOIN table2
ON condition
WHERE table2.id IS NULL
RIGHT JOIN
RIGHT JOIN: définition
Cette requête SQL réalise une jointure en gardant toutes les informations de la table de droite. S’il n’y a pas de correspondance avec la table de gauche, la cellule de l’information manquante contient la valeur NULL. Il s’agit d’un OUTER JOIN aussi.
RIGHT JOIN: Requête SQL
La requête SQL RIGHT JOIN se décompose de la manière suivante :
- SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence.
- RIGHT JOIN est le type de jointure SQL
- ON définit la clé de jointure (ID_film)
SELECT colonnes 1, colonnes 2, …
FROM table1
RIGHT JOIN table2
ON condition
RIGHT JOIN : Exemple d’utilisation
Faisons un RIGHT JOIN des tables Cinema et Acteurs :
SELECT *
FROM Cinema
RIGHT JOIN Acteurs
ON Cinema.ID_film = Acteurs.ID_film
Ici, comme la table Cinéma ne contient aucun film de Tom Hanks, la ligne contient des valeurs NULL.
RIGHT JOIN sans intersection
Cette jointure est juste le RIGHT JOIN auquel on retire les enregistrements de la table de Gauche. Ainsi, on ne garde que les lignes de la table de droite qui n’ont aucune correspondance avec la table de gauche.
SELECT colonnes 1, colonnes 2, …
FROM table1
RIGHT JOIN table2
ON condition
WHERE table1.id IS NULL
FULL JOIN
FULL JOIN : définition
Le FULL JOIN va réaliser une jointure totale entre deux tables. On va prendre les enregistrements de toutes les tables et les mettre dans la table de résultat. Les cellules qui n’auront pas de correspondance dans les deux tables en auront pour valeur : NULL.
Cette jointure n'exclut aucune donnée, ni à droite ni à gauche. Elle appartient également à la famille des OUTER JOIN.
FULL JOIN: requête SQL
La requête se construit de la manière suivante :
- SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence.
- FULL JOIN est le type de jointure SQL
- ON définit la clé de jointure
SELECT colonnes 1, colonnes 2, …
FROM table1
FULL JOIN table2
ON condition
FULL JOIN : exemple d’utilisation
Pour réaliser une jointure FULL JOIN de nos deux tables, la requêt SQL sera :
SELECT *
FROM Cinema
FULL JOIN Acteurs
ON Cinema.id_film = Acteurs.id_film
Voici le résultat :
Ici, la table contient tous les enregistrements des deux tables, qu’il y ait une correspondance ou non.
Bravo ! Tu connais les principales jointures SQL ! Pour apprendre à les maîtriser, télécharge le programme de nos formations et inscris toi à notre prochaine session !
{{cours-gratuit-sql="/brouillon"}}
NATURAL JOIN
NATURAL JOIN: définition
NATURAL JOIN permet de joindre deux tables à condition qu’il existe deux colonnes qui portent le même nom et qui contiennent des données du même type.
La jointure NATURAL JOIN a la particularité de ne pas utiliser la clause ON dans sa requête SQL. Cette jointure cherche automatiquement une clé entre les colonnes des deux tables. Si elle la trouve, elle associe les données sur la base de cette clé, sinon un NULL apparaît.
NATURAL JOIN : requête SQL
La requête se construit de la manière suivante :
- SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence.
- NATURAL JOIN est le type de jointure SQL
SELECT colonnes 1, colonnes 2, …
FROM table1
NATURAL JOIN table2
NATURAL JOIN : exemple d’utilisation
Appliquons maintenant cette jointure à notre exemple :
SELECT *
FROM cinema
NATURAL JOIN acteurs
On obtient le résultat suivant :
Ici, on trouve le même résultat que la jointure INNER JOIN. Pourtant, la jointure NATURAL JOIN n’a pas eu besoin de clause ON. Elle a déduit que la colonne ID_film était la clé de jointure car le nom et le type de donnée de cette colonne sont les mêmes dans les deux tables.
CROSS JOIN
CROSS JOIN : définition
CROSS JOIN est une jointure assez particulière. Elle réalise un produit cartésien entre les données de deux tables.
Késako ? C’est facile : si la table A possède 10 lignes et que la table B possède 10 lignes alors la table issue de la jointure aura 100 lignes.
Ainsi, chaque ligne de la table A est associée à toutes les lignes de la table B.
Ici, on n’utilise pas de clé de jointure. Toutes les lignes sont associées avec celles de l’autre table.
CROSS JOIN : requête SQL
Voici de quoi se compose la commande SQL :
- SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence.
- CROSS JOIN est le type de jointure SQL
SELECT colonnes 1, colonnes 2, …
FROM table1
CROSS JOIN table2
CROSS JOIN : exemple d’utilisation
Appliquons maintenant cette jointure avec notre exemple de cinéma :
SELECT *
FROM acteurs
CROSS JOIN cinema
On obtient le résultat suivant :
Tu peux remarquer que chaque ligne de la table Cinema a été associée à chaque ligne de la table Acteurs. C’est parce que la table de gauche (Cinema) correspond à la table A sur le schéma ci-dessus.
Remarque : l’intégralité de la table n’est pas présente, elle contient 30 lignes. C’est logique car 5*6 = 30.
UNION JOIN
UNION JOIN : définition
Le UNION JOIN réalise le même travail que la jointure FULLJOIN mais il s’utilise avec des tables qui ont les mêmes colonnes. Pour mieux comprendre nous allons introduire une nouvelle table « acteurs FR » qui réunit des acteurs français.
La jointure SQL UNION permet de créer une table unique qui réunit toutes les données des deux tables mais à la différence d’un FULL JOIN, la table finale n’a pas de doublons.
UNION JOIN : requête SQL
- SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence
- UNION définit le type de jointure SQL
- SELECT et FROM permettent de choisir quelles informations sont extraites depuis la deuxième table.
SELECT colonnes 1, colonnes 2, …
FROM table1
UNION
SELECT colonnes 1, colonnes 2, …
FROM table2</h6>
UNION JOIN : exemple d’utilisation
Appliquons maintenant cette jointure avec notre exemple de cinéma :
SELECT *
FROM Acteurs_USA
UNION <br> SELECT *
FROM Acteurs_FR
On obtient le résultat suivant :
La table qui résulte de cette jointure contient tous les enregistrements des deux tables. L’opération est la même que pour le FULL JOIN mais le résultat ne contient pas de NULL ni de doublons. Pour les tables où les colonnes portent les mêmes noms, on préférera l’UNION.
SELF JOIN
SELF JOIN : définition
Le SELF JOIN est une jointure qui est faite sur elle-même. Cela revient à réaliser une jointure sur deux tables identiques.
Ces jointures sont utilisées lorsqu’une table possède une clé primaire et une clé étrangère à la fois. Nous allons prendre une nouvelle table pour expliquer cette jointure.
Voici la table « Employees » :
Cette table donne la liste des employés. Sa clé primaire correspond à l’ID_employee.
La colonne ID_manager indique qui est le manager de l’employé en question.
Concrètement, Antoine est le manager de Yves et Yves est le manager de Marc.
Autrement dit, ID_employee est la clé primaire et ID_manager est la clé étrangère. La jointure SELF JOIN va permettre de mettre en évidence le manager de chaque employé.
SELF JOIN :requête SQL
Ici, la requête est plus compliquée car il faut dupliquer la table avant de pouvoir réaliser la jointure SELF JOIN :
- SELECT sélectionne et renomme les colonnes de la table,
- FROM définit la table de référence et la renomme afin de bien dissocier les deux tables.
- JOIN applique la jointure sur la table dupliquée, qui est renommée également,
- ON définit la clé de jointure
SELECT table1.clé_primaire,; table1.colonne1,
table1.clé_étrangère,
table2.colonne1 as Table2colonne1,
FROM Table table1
JOIN Table table2
ON table1.clé_étrangère = table2.clé_primaire
SELF JOIN : exemple d’utilisation
Voici la requête appliquée à notre exemple :
SELECT Employees.ID_employee, Employees.Nom, Managers.Nom,
FROM Employees
LEFT JOIN Employees as Managers
ON Employees.ID_manager = Managers.ID_manager
Remarque : « as » sert à renommer la table et les colonnes pour ne pas se perdre dans la nouvelle table.
Ici, nous avons réalisé une jointure SELF JOIN par le biais d’une jointure LEFT JOIN. Il est tout à fait possible de réaliser la même opération avec d’autres types de jointures.
Le résultat de la requête SQL est le suivant :
Voilà ! Tu connais maintenant les jointures SQL incontournables ! Si toi aussi tu veux devenir un maître de la Data analyse alors fonce t’inscrire à notre formation SQL et rejoins la grande famille des Databirdies !
{{formation-sql="/brouillon"}}