Jeudi 21 novembre à 18h30
Découvrez les métiers de la data et comment vous y former !

Depuis plus de quatre ans, notre objectif est de permettre au plus grand nombre de se former aux métiers de la data, quelque soit votre profil. Cet évènement vous permettra de découvrir nos programmes de formation conçus pour vous permettre de vous reconvertir vers la data ou de monter en compétences !

Je m'inscris
Les métiers de la data vous intéressent mais vous ne savez pas comment y accéder ? - Le jeudi 21 novembre à 18h30
Les métiers de la data vous intéressent mais vous ne savez pas comment y accéder ? - Le jeudi 21 novembre à 18h30
Les métiers de la data vous intéressent mais vous ne savez pas comment y accéder ? - Le jeudi 21 novembre à 18h30
Je m'inscris

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.

Antoine Grignola
Co-fondateur de DataBird
Mis à jour le
18/10/2024

Découvrez notre formation outil dédiée à SQL.

Découvrir

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.

Tableau de films
ID_FILM NOM_DU_FILM ANNÉE_DE_SORTIE NOTE_IMDB
1 Jaws 1975 8.0
2 Star Wars 1977 8.6
3 Don't Look Up 2021 7.2
4 Titanic 1997 7.8
5 Le dernier Samouraï 2003 7.7

Tableau d'acteurs
NOM_ACTEUR DATE_DE_NAISSANCE ID_FILM
Roy Scheider 10/11/1932 1
Mark Hamill 25/09/1951 2
Meryl Streep 22/09/1949 3
Tom Cruise 03/07/1962 5
Tom Hanks 15/09/1977 NULL
Timothée Chalamet 27/12/1995 3

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.

Tableau Films et Acteurs
ID_FILM NOM_DU_FILM ANNÉE_DE_SORTIE NOTE_IMDB NOM_ACTEUR DATE_DE_NAISSANCE
1 Jaws 1975 8.0 Roy Scheider 10/11/1932
2 Star Wars 1977 8.6 Mark Hamill 25/09/1951
3 Don't Look Up 2021 7.2 Meryl Streep 22/09/1949
3 Don't Look Up 2021 7.2 Timothée Chalamet 27/12/1995
5 Le dernier Samouraï 2003 7.7 Tom Cruise 03/07/1962

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 :

  1. SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence, 
  2. INNER JOIN est le type de jointure utilisée,
  3. 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

Tableau des Films et Acteurs
ID_film Nom_du_film Année_de_sortie Note_IMDb Nom_Acteur Date_de_naissance
1 Jaws 1975 8.0 Roy Scheider 10/11/1932
2 Star Wars 1977 8.6 Mark Hamill 25/09/1951
3 Don't Look Up 2021 7.2 Meryl Streep 22/09/1949
3 Don't Look Up 2021 7.2 Timothée Chalamet 27/12/1995
5 Le dernier Samouraï 2003 7.7 Tom Cruise 03/07/1962

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 :

  1. SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence. 
  2. LEFT JOIN est le type de jointure SQL
  3. 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”.

Tableau des Films et Acteurs
ID_film Nom_du_film Année_de_sortie Note_IMDb Nom_Acteur Date_de_naissance
1 Jaws 1975 8.0 Roy Scheider 10/11/1932
2 Star Wars 1977 8.6 Mark Hamill 25/09/1951
3 Don't Look Up 2021 7.2 Meryl Streep 22/09/1949
3 Don't Look Up 2021 7.2 Timothée Chalamet 27/12/1995
4 Titanic 1997 7.8 NULL NULL
5 Le dernier Samouraï 2003 7.7 Tom Cruise 03/07/1962


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 :

  1. SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence. 
  2. RIGHT JOIN est le type de jointure SQL
  3. 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

Tableau Films et Acteurs - Right Join
ID_film Nom_du_film Année_de_sortie Note_IMDb Nom_Acteur Date_de_naissance
1 Jaws 1975 8.0 Roy Scheider 10/11/1932
2 Star Wars 1977 8.6 Mark Hamill 25/09/1951
3 Don't Look Up 2021 7.2 Meryl Streep 22/09/1949
3 Don't Look Up 2021 7.2 Timothée Chalamet 27/12/1995
NULL NULL NULL NULL Tom Hanks 15/09/1977
5 Le dernier Samouraï 2003 7.7 Tom Cruise 03/07/1962

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 :

  1. SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence. 
  2. FULL JOIN est le type de jointure SQL
  3. 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 :

Tableau des Films et Acteurs - RIGHT JOIN
ID_film Nom_du_film Année_de_sortie Note_IMDb Nom_Acteur Date_de_naissance
1 Jaws 1975 8.0 Roy Scheider 10/11/1932
2 Star Wars 1977 8.6 Mark Hamill 25/09/1951
3 Don't Look Up 2021 7.2 Meryl Streep 22/09/1949
3 Don't Look Up 2021 7.2 Timothée Chalamet 27/12/1995
4 Titanic 1997 7.8 NULL NULL
5 Le dernier Samouraï 2003 7.7 Tom Cruise 03/07/1962
NULL NULL NULL NULL Tom Hanks 15/09/1977

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 :

  1. SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence.
  2. 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 :

Tableau Films et Acteurs - Natural Join
ID_film Nom_du_film Année_de_sortie Note_IMDb Nom_Acteur Date_de_naissance
1 Jaws 1975 8.0 Roy Scheider 10/11/1932
2 Star Wars 1977 8.6 Mark Hamill 25/09/1951
3 Don't Look Up 2021 7.2 Meryl Streep 22/09/1949
3 Don't Look Up 2021 7.2 Timothée Chalamet 27/12/1995
5 Le dernier Samouraï 2003 7.7 Tom Cruise 03/07/1962

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 :

  1. SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence. 
  2. 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 :

Tableau Étendu des Films et Acteurs
ID_film_Cinema Nom_du_film Année_de_sortie Note_IMDb Nom_Acteur Date_de_naissance ID_film_Acteur
1 Jaws 1975 8.0 Roy Scheider 10/11/1932 1
1 Jaws 1976 8.1 Mark Hamill 25/09/1951 2
1 Jaws 1977 8.2 Meryl Streep 22/09/1949 3
1 Jaws 1978 8.3 Timothée Chalamet 27/12/1995 3
1 Jaws 1980 8.5 Tom Cruise 03/07/1962 5
1 Jaws 1981 8.6 Tom Hanks 15/09/1977 NULL
2 Star Wars 1977 8.6 Roy Scheider 10/11/1932 1
2 Star Wars 1977 8.6 Mark Hamill 25/09/1951 2
2 Star Wars 1977 8.6 Meryl Streep 22/09/1949 3
2 Star Wars 1977 8.6 Timothée Chalamet 27/12/1995 3
2 Star Wars 1977 8.6 Tom Cruise 03/07/1962 5
2 Star Wars 1977 8.6 Tom Hanks 15/09/1977 NULL

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.

Tableau des Acteurs
Nom_Acteur Date_de_naissance
Jean Dujardin 19/06/1972
Marion Cotillard 30/09/1975
Cécile de France 17/07/1975
Guillaume Canet 10/04/1973
Kad Merad 27/03/1964
Timothée Chalamet 27/12/1995

Tableau des Acteurs et Dates de Naissance
Nom_Acteur Date_de_naissance
Roy Scheider 10/11/1932
Mark Hamill 25/09/1951
Meryl Streep 22/09/1949
Tom Cruise 03/07/1962
Tom Hanks 15/09/1977
Timothée Chalamet 27/12/1995

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

  1. SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de référence 
  2. UNION définit le type de jointure SQL
  3. 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 :

Tableau des Acteurs et Dates de Naissance
Nom_Acteur Date_de_naissance
Roy Scheider 10/11/1932
Mark Hamill 25/09/1951
Meryl Streep 22/09/1949
Tom Cruise 03/07/1962
Tom Hanks 15/09/1977
Timothée Chalamet 27/12/1995
Jean Dujardin 19/06/1972
Marion Cotillard 30/09/1975
Cécile de France 17/07/1975
Guillaume Canet 10/04/1973
Kad Merad 27/03/1964

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 » :

Tableau des Employés et Managers
ID_employee Nom ID_manager
1 Antoine NULL
2 Yves 1
3 Marc 2


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 :

  1. SELECT sélectionne et renomme les colonnes de la table,
  2. FROM définit la table de référence et la renomme afin de bien dissocier les deux tables.
  3. JOIN applique la jointure sur la table dupliquée, qui est renommée également,
  4. 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 :

Tableau des Employés et Managers
Employees.ID_employee Employees.Nom Managers.Nom
1 Antoine NULL
2 Yves Antoine
3 Marc Yves

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"}}

Faites un premier pas dans la data avec nos cours gratuits
Démarrer
Difficulté :
Facile