Si tu commences à manipuler des bases de données relationnelles, 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.
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 !
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.
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
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 !
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
UNION JOIN : exemple d’utilisation
Appliquons maintenant cette jointure avec notre exemple de cinéma :
SELECT *
FROM Acteurs_USA
UNION
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 et rejoins la grande famille des Databirdies !