Sous-requêtes avec semi-jointures et anti-jointures

Joindre des données en SQL

Maham Faisal Khan

Senior Content Developer, DataCamp

Appel de toutes les jointures

Schéma d'un INNER JOIN sur le champ id

Schéma montrant deux tables : left_table et right_table. Le résultat de la jointure des deux requêtes apparaît à droite, ne retournant que les enregistrements ayant une correspondance sur la colonne id dans les deux tables.

Joindre des données en SQL

Jointures additives

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
Joindre des données en SQL

Jointures additives

Schéma expliquant une jointure additive. À gauche, deux tables, left_table et right_table, sont affichées. À droite, le résultat d'un INNER JOIN utilisant une colonne id sur les deux tables est montré. Les champs aux noms différents sont ajoutés avec leurs noms d'origine. Comme le champ date apparaît dans les deux tables, il est ajouté deux fois.

Joindre des données en SQL

Semi-jointure

Une semi-jointure sélectionne les enregistrements de la première table lorsqu'une condition est satisfaite dans la deuxième table.

Schéma montrant deux tables, left_table et right_table, servant à illustrer une semi-jointure. left_table contient deux colonnes, id et col1. right_table ne contient qu'une colonne, col2.

Joindre des données en SQL

Semi-jointure

Schéma montrant deux tables, left_table et right_table, utilisées pour illustrer une semi-jointure. col2 servira à filtrer col1. Les enregistrements de left_table où col1 ne trouve pas de correspondance dans col2 sont estompés.

Joindre des données en SQL

Semi-jointure

Schéma montrant deux tables, left_table et right_table. Le résultat d'une semi-jointure sur les deux tables est affiché à droite. Seuls les enregistrements de left_table où col1 trouve une correspondance dans col2 sont retournés. Ils correspondent aux ids 2 et 3.

Joindre des données en SQL

Lancer notre semi-jointure

SELECT country, continent, president
FROM presidents;
| country  | continent     | president               |
| -------- | ------------- | ----------------------- |
| Egypt    | Africa        | Abdel Fattah el-Sisi    |
| Portugal | Europe        | Marcelo Rebelo de Sousa | 
| USA      | North America | Joe Biden               |
| Uruguay  | South America | Luis Lacalle Pou        |
| Pakistan | Asia          | Asif Ali Zardari        |
| Chile    | South America | Gabriel Boric           |
| India    | Asia          | Droupadi Murmu          |
Joindre des données en SQL

Poursuivre la semi-jointure

SELECT country
FROM states
WHERE indep_year < 1800;
|----------|
| country  |
|----------|
| Portugal |
| Spain    |
|----------|
Joindre des données en SQL

Terminer la semi-jointure (intro aux sous-requêtes)

SELECT president, country, continent
FROM presidents
WHERE country IN
    (SELECT country
     FROM states
     WHERE indep_year < 1800);
|-------------------------|-----------|-------------|
| president               | country   | continent   |
|-------------------------|-----------|-------------|
| Marcelo Rebelo de Sousa | Portugal  | Europe      |
|-------------------------|-----------|-------------|
Joindre des données en SQL

Anti-jointure

Schéma montrant deux tables, left_table et right_table, utilisées pour illustrer une anti-jointure. col2 servira à filtrer col1. Les enregistrements de left_table où col1 ne trouve pas de correspondance dans col2 ne sont PAS estompés.

Joindre des données en SQL

Anti-jointure

Schéma montrant deux tables, left_table et right_table. Le résultat d'une anti-jointure sur les deux tables est affiché à droite. Seuls les enregistrements de left_table où col1 ne trouve pas de correspondance dans col2 sont retournés. Ils correspondent aux ids 1 et 4.

Joindre des données en SQL

Une anti-jointure avec les présidents

SELECT country, president
FROM presidents
WHERE continent LIKE '%America' 
    AND country NOT IN
        (SELECT country
         FROM states
         WHERE indep_year < 1800);
| country  |  president       |
| -------- | ---------------- | 
| Uruguay  | Luis Lacalle Pou |
| Chile    | Gabriel Boric    |
Joindre des données en SQL

Passons à la pratique !

Joindre des données en SQL

Preparing Video For Download...