Accéder au contenu principal

Introduction aux jointures SQL

Dans ce tutoriel, vous apprendrez les mécanismes des jointures en SQL et leurs différents types.
Actualisé 16 janv. 2025  · 9 min de lecture

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.

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 -

tableaux student_name et student_stream

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 -

Diagramme de jointure interne

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.

résultat de la jointure automatique (sous forme de tableau)

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 -

Diagramme de la jointure gauche 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 -

diagramme de la jointure droite en SQL

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 -

Diagramme de la jointure complète en SQL

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 -

Schéma de la jonction transversale

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 -

Tableau de toutes les combinaisons possibles

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 :

Tableau original

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 -

Diagrammes de semi-jonction et d'antijonction

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.

Sujets

Cours de SQL

cours

Joining Data in SQL

4 hr
192.6K
Level up your SQL knowledge and learn to join tables together, apply relational set theory, and work with subqueries.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow
Apparenté

blog

Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024

Un guide complet pour explorer les questions d'entretien AWS de base, intermédiaires et avancées, ainsi que des questions basées sur des situations réelles. Il couvre tous les domaines, garantissant ainsi une stratégie de préparation bien équilibrée.
Zoumana Keita 's photo

Zoumana Keita

30 min

blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates a offert plus de 20k bourses d'études à nos partenaires à but non lucratif au deuxième trimestre 2023. Découvrez comment des apprenants défavorisés et assidus ont transformé ces opportunités en réussites professionnelles qui ont changé leur vie.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

2022-2023 Rapport annuel DataCamp Classrooms

À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 min

blog

Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Vous êtes actuellement à la recherche d'un emploi qui utilise Snowflake ? Préparez-vous à répondre à ces 20 questions d'entretien sur le flocon de neige pour décrocher le poste !
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

blog

Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Découvrez le parcours inspirant de Saghar Hazinyar, diplômée de Code to Inspire, qui a surmonté les défis en Afghanistan et s'est épanouie grâce à une bourse de DataCamp Donates.
Fereshteh Forough's photo

Fereshteh Forough

4 min

blog

Nous avons fait don de bourses DataCamp Premium à un million de personnes, et ce n'est pas fini.

Réparties entre nos deux programmes d'impact social, DataCamp Classrooms et #DCDonates, les bourses offrent un accès illimité à tout ce que DataCamp Premium a à offrir.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Voir plusVoir plus