Construire une base de données relationnelle

Partie 5
Chapitre 5 sur 8
Partie 5 – Exploiter et joindre des données avec SQL

Jointures

Lorsque vous travaillez sur une ou plusieurs bases de données avec une multitude de tables, il est parfois nécessaire de récupérer des informations dans plusieurs tables afin d’en créer une seule et unique contenant les données des différentes tables. Plutôt que de stocker peu de table avec énormément de colonnes, il est préférable de stocker plus de tables avec moins de colonnes pour optimiser les performances de vos systèmes et accélérer les traitements et les calculs.

Cependant, il est nécessaire de faire les jointures entre les tables soi-même.

La clause JOIN permet de lier les données de différentes tables à partir d’une ou plusieurs colonnes en commun.

Il existe plusieurs types de jointures, mais nous verrons ici les jointures essentielles, les plus communément utilisées et les plus importantes :

INNER JOIN : jointure interne, intersection entre les données, renvoie uniquement les lignes qui ont des valeurs communes aux deux tables.

FULL JOIN : jointure complète, renvoie les lignes de la table de gauche, les lignes qui ont des valeurs communes et les lignes de la table de droite.

LEFT JOIN : jointure gauche, renvoie les lignes de la table de gauche + les colonnes de la table de droite.

RIGHT JOIN : jointure droite, renvoie les lignes de la table de droite + les colonnes de la table de gauche.

 

La clause JOIN s’utilise avec le mot-clé ON qui définit les clés de jointure entre les tables.

INNER JOIN

INNER JOIN renvoie toutes les données qui sont partagées entre les deux tables.

NB : afin de faciliter les jointures, il est possible de nommer les tables dans la requête pour les appeler plus facilement en ajoutant le nom souhaité à la suite du nom de la table. Elles sont généralement renommées avec que quelques caractères pour prendre tout son intérêt.

SELECT <colonnes_table1>, <colonnes_tables2>
FROM <table1> t1
INNER JOIN <table2> t2
ON <t1.col1> = <t2.col2>;

FULL JOIN

FULL JOIN renvoie toutes les données des deux tables qui correspondent à la condition derrière ON, provenant de la table de gauche, de droite ou des deux.

SELECT <colonnes_table1>, <colonnes_tables2>
FROM <table1> t1
FULL JOIN <table2> t2
ON <t1.col1> = <t2.col2>;

LEFT JOIN

LEFT JOIN renvoie toutes les données de la table de gauche et ajoute les données correspondantes à la condition ON de la table de droite.

SELECT <colonnes_table1>, <colonnes_tables2>
FROM <table1> t1
LEFT JOIN <table2> t2
ON <t1.col1> = <t2.col2>;

RIGHT JOIN

RIGHT JOIN renvoie toutes les données de la table de droite et ajoute les données correspondantes à la condition ON de la table de gauche.

SELECT <colonnes_table1>, <colonnes_tables2>
FROM <table1> t1
RIGHT JOIN <table2> t2
ON <t1.col1> = <t2.col2>;

NB : RIGHT JOIN et LEFT JOIN ont exactement le même fonctionnement. L’une joint la table de gauche à celle de droite, l’autre l’inverse.

 

Exemple

Imaginons que nous ayons 5 tables :
-quality : id, station, Air Quality, Generated, Date Time
-long_lat : station, longitude, latitude
-no2_quality : id, NO2 Hour, NO2 Quality, NO2 Value, Generated, Date Time
-o3_quality : id, O3 Hour, O3 Quality, O3 Value, Generated, Date Time
-pm10_quality : id, PM10 Hour, PM10 Quality, PM10 Value, Generated, Date Time

Notre objectif est de joindre ces tables ensemble pour retrouver notre table complète de base ‘air_quality’.

Nous allons donc utiliser des jointures à gauche LEFT JOIN à partir de notre table ‘quality’. Les différentes tables possèdent la colonne ‘id’ en commun, clé primaire qui est partagée entre les tables, ce qui permet d’identifier chaque ligne. La table ‘long_lat’, elle, possède la colonne ‘station’ commune avec ‘quality’. Nous allons joindre ces différentes tables sur les colonnes définies avec le mot-clé ON.

SELECT t1.id, t1.station, t1."Air Quality", t2.longitude, t2.latitude,
       t3."O3 Hour", t3."O3 Quality", t3."O3 Value",
       t4."NO2 Hour", t4."NO2 Quality", t4."NO2 Value",
       t5."PM10 Hour", t5."PM10 Quality", t5."PM10 Value",
       t1."Generated", t1."Date Time"
FROM quality t1
LEFT JOIN long_lat t2 ON t1.station = t2.station
LEFT JOIN o3_quality t3 ON t1.id = t3.id
LEFT JOIN no2_quality t4 ON t1.id = t4.id
LEFT JOIN pm10_quality t5 ON t1.id = t5.id
ORDER BY t1.id;

 

 

Voilà, vous savez à peu près tout sur les jointures SQL.