Cours
Au cours de votre analyse de données en SQL, vous devrez souvent consulter plusieurs tableaux et les joindre pour obtenir les résultats souhaités. Joindre des tableaux pour analyser des données est une compétence requise pour un data scientist également. Dans ce tutoriel, vous apprendrez les différents types de jointures que vous pouvez effectuer dans PostgreSQL. Vous étudierez d'abord les concepts préliminaires des jointures en SQL, puis les différents types de jointures et leurs syntaxes dans PostgreSQL. Vous terminerez ce tutoriel en exécutant différents types de requêtes de jointure à l'aide de deux tableaux. Pour pouvoir suivre le cours, vous devez connaître les bases du langage SQL et savoir comment écrire des requêtes simples dans PostgreSQL. Si vous cherchez des ressources pour les apprendre, les suivantes peuvent vous être utiles.
- Guide du débutant pour PostgreSQL
- Cours d'introduction à SQL pour la science des données par DataCamp
Commençons.
Configurer l'environnement de la base de données dans PostgreSQL
Avant d'étudier les bases des jointures SQL, il serait bon de créer quelques tableaux pour vos analyses. Vous aurez besoin d'au moins deux tableaux ayant au moins une colonne en commun. Bien que vous puissiez exécuter des requêtes auto-jointes sur le même tableau, ignorons ce fait pour l'instant.
Vous pouvez effectuer toutes les opérations SQL à l'aide d'un outil appelé pgAdmin
qui est généralement fourni avec l'installation de PostgreSQL. Ouvrons pgAdmin
et créons une base de données (donnez-lui un nom de votre choix) pour créer les tableaux si vous n'avez pas de base de données existante avec laquelle procéder. Vous pouvez ensuite créer les deux tableaux suivants avec les spécifications données -
- nom_étudiant (id, nom)
- student_stream (id, stream)
Notez que les deux tableaux ont en commun la colonne id
. Vous pouvez utiliser les instructions suivantes CREATE
pour créer les tableaux -
- Pour nom_étudiant -
CREATE TABLE student_name ( id smallint, name "char"[] );
- Pour student_stream -
CREATE TABLE student_stream ( id smallint, stream "char"[] );
Insérons maintenant quelques enregistrements dans les tableaux.
- Pour nom_étudiant -
INSERT INTO student_name(id, name) VALUES (1, 'Sayak');
INSERT INTO student_name(id, name) VALUES (2, 'Alex');
INSERT INTO student_name(id, name) VALUES (3, 'Sameer');
INSERT INTO student_name(id, name) VALUES (4, 'Rick');
- Pour student_stream -
INSERT INTO student_stream(id, stream) VALUES (1, 'CS');
INSERT INTO student_stream(id, stream) VALUES (1, 'IT');
INSERT INTO student_stream(id, stream) VALUES (2, 'ECE');
INSERT INTO student_stream(id, stream) VALUES (9, 'ECE');
Les entrées du tableau devraient ressembler à ce qui suit si vous avez exécuté les requêtes ci-dessus sans rien changer -
Vous disposez à présent de deux tableaux simples. Passons maintenant à l'étude des bases des jointures SQL.
Joints SQL - Notions de base
Les jointures SQL vous permettent de rassembler deux tableaux ou plus (parfois un seul) à l'aide d'identifiants communs. Prenons l'exemple des deux tableaux ci-dessus que vous avez créés - les deux tableaux ont en commun la colonne id
. Vous pouvez vous interroger sur la nécessité de la jointure en SQL. Discutons-en brièvement.
En raison des contraintes de normalisation, il se peut que vous ne disposiez pas de toutes les informations requises dans un seul tableau. La normalisation est non seulement souhaitée mais aussi nécessaire pour maintenir la cohérence, réduire la redondance et prévenir plusieurs insertions et anomalies de mise à jour. Reprenez les deux tableaux ci-dessus. Supposons que vous souhaitiez connaître les filières dans lesquelles Sayak
s'est inscrit. Pour obtenir la réponse à cette question, vous devrez joindre les deux tableaux (des sous-requêtes peuvent également être utilisées, mais n'y pensons pas pour l'instant) et procéder ensuite en conséquence.
Pour que deux tableaux puissent être reliés, il faut qu'il y ait quelque chose de commun entre eux. Cela signifie-t-il que les deux tableaux doivent avoir au moins une colonne portant le même nom ? Ou qu'est-ce que cette maladie exactement ?
Les tableaux que vous souhaitez joindre peuvent ne pas avoir de colonne portant le même nom, mais ils devraient logiquement être identiques, c'est-à-dire que leurs types de données devraient être les mêmes. Vous ne pouvez pas joindre deux tableaux dont la colonne porte le même nom mais dont les types de données sont différents. Étudions maintenant les différents types de jointures SQL.
Différents types de jointures SQL
Dans cette section, vous étudierez plusieurs types de jointures SQL -
- INNER JOIN
- Auto-jonction
- OUTER JOIN
- JOINT A LA GAUCHE
- JOINTE À DROITE
- JOINT COMPLET
- JOINT CROISÉ
- Semi-jonction et anti-jonction
PostgreSQL fournit des mots-clés distincts pour les types de jointures mentionnés en majuscules. Examinons-les une à une. Pour cela, vous allez d'abord étudier les jointures visuellement, puis vous exécuterez les requêtes de jointure correspondantes dans PostgreSQL.
INNER JOIN
Pour comprendre visuellement INNER JOIN
, regardez le diagramme suivant -
Dans l'exemple ci-dessus, la colonne considérée est la colonne id
. INNER JOIN
ignorera les autres colonnes pour lesquelles les valeurs ne sont pas communes aux deux tableaux. Exécutons maintenant une requête dans PostgreSQL qui effectuera INNER JOIN
entre les deux tableaux - nom_étudiant et flux_étudiant.
En exécutant la requête suivante, vous obtenez le résultat présenté dans la figure ci-dessus -
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
INNER JOIN student_stream AS s2
ON s1.id = s2.id;
s1
et s2
sont les alias des deux tableaux. Vous avez utilisé le mot-clé ON
avec INNER JOIN
. La requête peut également être exécutée à l'aide du mot-clé USING
-
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
INNER JOIN student_stream AS s2
USING (id);
La jointure automatique vous permet d'effectuer des jointures sur le même tableau. Mais où cette option peut-elle s'avérer judicieuse ? Supposons que vous disposiez d'un tableau composé des colonnes suivantes -
- Pays
- Continent
Vous voulez maintenant inscrire deux pays de manière à ce que leurs continents soient identiques. La figure suivante devrait vous donner une idée des résultats escomptés.
OUTER JOIN
OUTER JOIN
peuvent être divisés en trois types -
LEFT JOIN ou Left Outer JOIN: Le diagramme suivant vous donne une bonne idée de LEFT JOIN
en SQL -
Notez que, contrairement à INNER JOIN
, LEFT JOIN
vous permet de récupérer les tableaux de gauche (dans l'ordre que vous avez spécifié dans votre requête) pour lesquels il n'y a pas d'entrée correspondante dans le tableau de droite. Cela signifie que Sameer
et Rick
ne sont inscrits dans aucune filière. La requête correspondante sera -
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
LEFT JOIN student_stream AS s2
ON s1.id = s2.id;
RIGHT JOIN ou Right Outer JOIN : RIGHT JOIN
est exactement le contraire de LEFT JOIN
-
RIGHT JOIN
peut vous aider à trouver la ou les filières pour lesquelles aucun étudiant ne s'est inscrit. La requête pour cela serait -
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
RIGHT JOIN student_stream AS s2
ON s1.id = s2.id;
FULL JOIN ou Full Outer JOIN: FULL JOIN
vous permet de combiner LEFT JOIN
et RIGHT JOIN
en une seule compilation -
La requête correspondante serait -
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
FULL JOIN student_stream AS s2
ON s1.id = s2.id;
Notez que vous pouvez exécuter toutes les requêtes OUTER JOIN
ci-dessus en utilisant le mot-clé USING
. Étudions maintenant CROSS JOIN
.
JOINT CROISÉ
CROSS JOIN
est essentiellement le produit cartésien entre deux éléments exprimés à l'aide de SQL. Supposons que vous ayez besoin de toutes les combinaisons possibles entre deux tableaux ou même dans un seul tableau. Pour ce faire, vous aurez besoin de CROSS JOIN
. La figure suivante présente ce concept de manière visuelle -
Vous disposez déjà de deux tableaux pour tester cette méthode. Afin d'obtenir toutes les combinaisons possibles entre les colonnes id
des tableaux student_name
et student_stream
, vous pouvez exécuter la requête suivante -
SELECT s1.id, s2.id
FROM student_name AS s1
CROSS JOIN student_stream AS s2;
Et vous obtenez le résultat suivant -
Voyons maintenant les deux autres types de jointure pour lesquels PostgreSQL ne fournit pas de mots-clés directs.
Semi-jonction et anti-jonction
Considérons les tableaux que vous avez créés plus tôt dans le didacticiel :
Semi Join
Les requêtes sont généralement exécutées sous la forme de sous-requêtes dans lesquelles les lignes sont extraites du premier tableau en fonction d'une condition (ou d'un ensemble de conditions) qui est remplie dans le second tableau. Supposons que le tableau de gauche soit le premier tableau et que le tableau de droite soit le deuxième tableau.
Anti Join
Les requêtes sont tout le contraire. Dans Anti Join
, les lignes sont extraites du premier tableau en fonction d'une condition (ou d'un ensemble de conditions) qui n' est pas remplie dans le second tableau. Voici un diagramme pour vous permettre de comprendre visuellement -
La demande de réalisation du site Semi Join
serait -
select id, name
from student_name
where id IN
(select id from student_stream where stream
IN ('CS', 'IT', 'ECE'));
De même, la requête qui réalise Anti Join
, dans ce cas, serait -
select id, name
from student_name
where id NOT IN
(select id from student_stream where stream
IN ('CS', 'IT', 'ECE'));
Notez l'utilisation de NOT
dans la requête ci-dessus.
Passer à la vitesse supérieure dans l'utilisation des jointures SQL
C'est tout pour ce tutoriel. Vous avez étudié plusieurs types de jointures SQL dans ce tutoriel et vous vous êtes familiarisé avec leur syntaxe PostgreSQL. Si vous souhaitez vous entraîner à des exercices stimulants de jointure SQL, nous vous conseillons de suivre la formation Joining Data in SQL de DataCamp. En fait, le matériel du cours a été utilisé comme référence pour réaliser ce tutoriel.
Faites-moi part de vos questions dans la section Comments
.