Temps de lecture approximative : 12 minutes

Jointure SQL

Depuis le début du cours, nos requêtes portent uniquement sur une table à la fois. Les jointures en SQL permettent d’associer plusieurs tables dans une même requête. Cela permet d'exploiter la puissance des bases de données relationnelles pour obtenir des résultats qui combinent les données de plusieurs tables en même temps de manière efficace. Dans ce chapitre, nous aborderons deux types de jointures différents avec les commandes SQL suivantes : INNER JOIN et LEFT JOIN.

Les jointures SQL consistent à associer les lignes de deux tables en associant l'égalité des valeurs d'une colonne d'une première table par rapport à la valeur d'une colonne d'une seconde table. On nomme ce concept : la condition. L'intérêt des jointures ? Elles sont tout d'abord un moyen d'optimiser les processus, en améliorant leur vitesse d'exécution. De manière générale, il est préférable de faire une seule requête avec plusieurs jointures plutôt que plusieurs requêtes simples. Elles permettens également d'éviter les répétitions d'informations.

INNER JOIN

Dans le langage SQL la commande INNER JOIN, est un type de jointure très commune pour lier plusieurs tables entre-elles dans une même requête. Cette commande retourne les enregistrements lorsqu'il y a au moins une ligne dans chaque colonne listé dans la condition. Autrement dit, lorsque la condition est respectée dans les deux tables.

Illustration pour l'intersection de la sélection des enregistrements avec la commande INNER JOIN en SQL
Intersection de la sélection des enregistrements avec la commande INNER JOIN en SQL

L’utilisation la plus basique de cette commande s’effectue de la manière suivante :

SQL
SELECT *
FROM table_1
INNER JOIN table_2 ON table_1.une_colonne = table_2.autre_colonne;

Cette requête SQL va donc sélectionner grâce à la commande INNER JOIN les enregistrements des tables table_1 et table_2 lorsque les données de la colonne une_colonne de la table table_1 est égal aux données de la colonne autre_colonne de la table table_2.

Afin de mettre en évidence l'utilisation de la commande INNER JOIN et de comprendre rapidement comment cette dernière fonctionne, voyons sans plus attendre un exemple simple. Pour cet exemple, nous utiliserons les tables clients et commandes qui contientent les colonnes et données suivantes. Ces dernières simulent les tables qui contiennent les clients et les commandes d'une entreprise quelconque.

Table : clients
id prenom nom email
1 Marine Leroy mleroy@example.com
2 Jean René jrene@example.com
3 Ted Bundy tbundy@example.com
4 Paul Bismuth pbismuth@example.com
5 Caroline Rodriguez crodriguez@example.com
Table : commandes
id_commande id_client date_ajout transporteur
1 1 2019-04-01 Mondial Relay
2 2 2019-04-02 Colissimo
3 2 2019-04-05 Colissimo
4 5 2019-04-08 Colissimo
5 9 2019-04-10 Colissimo

Reprenons notre première requête SQL avec la commande INNER JOIN et complétons correctement cette dernière avec les tables exemples. Nous souhaitons sélectionner uniquement les clients qui ont commandés avec leurs commandes respectives. Pour effectuer cette opération, la requête est la suivante :

SQL
SELECT id_client, id_commande, date_ajout, transporteur
FROM clients
INNER JOIN commandes ON clients.id = commandes.id_client;
id_client email id_commande date_ajout transporteur
1 mleroy@example.com 1 2019-04-01 Mondial Relay
2 jrene@example.com 2 2019-04-02 Colissimo
2 jrene@example.com 3 2019-04-05 Colissimo
5 crodriguez@example.com 4 2019-04-08 Colissimo

Le résultat de la requête met en évidence la jointure et son utilité. On retrouve donc les commandes des clients #1, #2 et #5, car ils ont commandé au moins une fois. A l'inverse, on ne retrouve pas les clients #3 et #4 car ils n'ont pas de commande associés. On peut remarquer également l'absence de la commande #5. En effet, cette dernière est lié au client #9 qui n'est pas présente dans la table clients. Cet enregistrement ne fait donc pas parti de l'intersection.

LEFT JOIN

Dans le langage SQL la commande LEFT JOIN, est un type de jointure commune pour lier plusieurs tables entre-elles dans une même requête. Cette commande retourne tous les enregistrements de la table première table, celle de gauche (left), avec la correspondance dans la deuxième table si la condition est respectée. En d'autres termes, ce type de jointure permet de retourner tous les enregistrements d'une table avec les données liées d'une autre table si elles existent.

@todo
@todo

L’utilisation la plus basique de cette commande s’effectue de la manière suivante :

SQL
SELECT *
FROM table_1
LEFT JOIN table_2 ON table_1.une_colonne = table_2.autre_colonne;

Cette requête SQL va donc sélectionner grâce à la commande LEFT JOIN tous les enregistrements de la table table_1 et les enregistrements lorsque les données de la colonne une_colonne de la table table_1 est égal aux données de la colonne autre_colonne de la table table_2.

Afin de mettre en évidence l'utilisation de la commande LEFT JOIN et de comprendre rapidement comment cette dernière fonctionne, voyons sans plus attendre un exemple simple. Pour cet exemple, nous utiliserons les mêmes tables clients et commandes déjà décrites ci-dessus.

Reprenons notre première requête SQL avec la commande LEFT JOIN et complétons correctement cette dernière avec les tables exemples. Nous souhaitons sélectionner tous les clients avec leurs commandes respectives. Pour effectuer cette opération, la requête est la suivante :

SQL
SELECT id_client, id_commande, date_ajout, transporteur
FROM clients
LEFT JOIN commandes ON clients.id = commandes.id_client;
id_client email id_commande date_ajout transporteur
1 mleroy@example.com 1 2019-04-01 Mondial Relay
2 jrene@example.com 2 2019-04-02 Colissimo
2 jrene@example.com 3 2019-04-05 Colissimo
3 tbundy@example.com      
4 pbismuth@example.com      
5 crodriguez@example.com 4 2019-04-08 Colissimo

Le résultat de la requête met en évidence la jointure avec la commande LEFT JOIN, son utilité et surtout sa différence avec la commande INNER JOIN. On retrouve donc bien tous les clients avec les commandes respectives. Pour les clients #3 et #4 qui n'ont pas de commandes, les colonnes sélectionnés de la table commandes sont vides.

Jointures sur plus de deux tables

Nos exemples précédents montrent comment faire une jointure entre deux tables. Il se peut que vous ayez besoin de faire une jointure entre plus de deux tables. La syntaxe est la suivante pour les commandes INNER JOIN et LEFT JOIN. Cette syntaxe peut être répété autant de fois que nécessaire.

INNER JOIN

SQL
SELECT *
FROM table_1
INNER JOIN table_2 ON table_1.une_colonne = table_2.autre_colonne
INNER JOIN table_3 ON table_1.une_colonne = table_3.autre_colonne;

LEFT JOIN

SQL
SELECT *
FROM table_1
LEFT JOIN table_2 ON table_1.une_colonne = table_2.autre_colonne
LEFT JOIN table_3 ON table_1.une_colonne = table_3.autre_colonne;