Depuis le début de ce chapitre, 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 cette section, 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 consiste d’abord d’offrir 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. Les jointures permettent également d’éviter les répétitions d’informations.
I.1.1 Jointure par la commande 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.
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_A
INNER JOIN table_B ON table_A.une_colonne = table_B.autre_colonne;
Cette requête SQL va donc sélectionner grâce à la commande INNER JOIN les enregistrements des tables A et B lorsque les données de la colonne une_colonne de la table A est égal aux données de la colonne autre_colonne de la table B.
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 employés et missions qui contiennent les colonnes et données suivantes.
Ces dernières simulent les tables qui contiennent les employés et les missions d’une entreprise quelconque.
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 employés qui ont effectué des missions avec leurs missions respectives. Pour effectuer cette opération, la requête est la suivante :
—SQL—
SELECT id, nom, id_mission, date_depart, date_destination
FROM employés
INNER JOIN missions ON employés.id = missions.id_employe;
Le résultat de la requête met en évidence la jointure et son utilité. On retrouve donc les missions des employés #395, #400 et #415, car ils ont effectué au moins une mission. A l’inverse, on ne retrouve pas les autre employés tel que #300 et #301 , etc. car ils n’ont pas de missions associés. On peut remarquer également l’absence de la mission #7. En effet, cette dernière est lié à l’employé #1022 qui n’est pas présent dans la table employés. Cet enregistrement ne fait donc pas parti de l’intersection.
I.1.2 Jointure par la commande LEFT JOIN (avec intersection)
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.
Intersection de la sélection des enregistrements avec la commande LEFT JOIN en SQL
L’utilisation la plus basique de cette commande s’effectue de la manière suivante :
—SQL—
SELECT *
FROM table_A
LEFT JOIN table_B ON table_A.une_colonne = table_B.autre_colonne;
Cette requête SQL va donc sélectionner grâce à la commande LEFT JOIN tous les enregistrements de la table A et les enregistrements lorsque les données de la colonne une_colonne de la table A est égal aux données de la colonne autre_colonne de la table B.
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 employés et missions 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 employés avec leurs missions respectives. Pour effectuer cette opération, la requête est la suivante :
—SQL—
SELECT id, nom, id_mission, date_depart, date_destination
FROM employés
LEFT JOIN missions ON employés.id = missions.id_employe;
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 employés avec les missions respectives. Pour les employés #396 et #397 , etc qui n’ont pas de missions, les colonnes sélectionnés de la table missions sont vides.
I.1.3 Jointure par la commande LEFT JOIN (sans intersection)
Ce type de jointure permet de retourner tous les enregistrements d’une table qui n’ont pas des liaisons avec une autre table.
L’utilisation la plus basique de cette commande s’effectue de la manière suivante :
—SQL—
SELECT *
FROM table_A
LEFT JOIN table_B ON table_A.une_colonne = table_B.autre_colonne
WHERE table_B.autre_colonne IS NULL;
Cette requête SQL va donc sélectionner grâce à la commande LEFT JOIN tous les enregistrements de la table A qui n’ont pas de liaison avec la table B.
Afin de mettre en évidence l’utilisation de la commande LEFT JOIN sans intersection 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 employés et missions 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 employés qui n’ont pas effectué des missions. Pour effectuer cette opération, la requête est la suivante :
SQL
SELECT id, nom, id_mission, date_depart, date_destination
FROM employés
LEFT JOIN missions ON employés.id = missions.id_employe
WHERE missions.id_employe IS NULL;
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 employés qui n’ont pas de missions, les colonnes sélectionnés de la table missions sont vides.