Subquery's met semi-joins en anti-joins

Data joinen in SQL

Maham Faisal Khan

Senior Content Developer, DataCamp

We halen alle joins erbij

Schema voor een INNER JOIN op het veld id

Een diagram met twee tabellen: left_table en right_table. Het resultaat van het samenvoegen van de twee query's zie je hiernaast. Alleen de records die in de id-kolom van beide tabellen overeenkomen, worden weergegeven.

Data joinen in SQL

Additive joins

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
Data joinen in SQL

Additive joins

Een diagram dat een additive join uitlegt. Aan de linkerkant staan twee tabellen, left_table en right_table. Aan de rechterkant wordt het resultaat getoond van een INNER JOIN met een id-kolom op de twee tabellen. Velden met andere namen worden met hun oorspronkelijke naam toegevoegd. Omdat het datumveld in beide tabellen staat, wordt het twee keer toegevoegd.

Data joinen in SQL

Semi-join

Een semi-join zoekt records in de eerste tabel die aan een voorwaarde voldoen in de tweede tabel.

Een diagram met twee tabellen, left_table en right_table, die worden gebruikt om een semi-join te laten zien. left_table heeft twee kolommen, id en col1. right_table heeft maar één kolom, col2.

Data joinen in SQL

Semi-join

Een diagram met twee tabellen, left_table en right_table, die worden gebruikt om een semi-join te tonen. col2 wordt gebruikt om col1 te filteren. De records in left_table waar col1 geen match heeft in col2 zijn vervaagd.

Data joinen in SQL

Semi-join

Een diagram met twee tabellen, left_table en right_table. Rechts staat het resultaat van een semi-join op beide tabellen. Alleen records in left_table waar col1 een match vindt in col2 zijn geretourneerd. Deze komen overeen met id's 2 en 3.

Data joinen in SQL

We beginnen onze semi-join

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          |
Data joinen in SQL

Voortbouwend op onze semi-join

SELECT country
FROM states
WHERE indep_year < 1800;
|----------|
| country  |
|----------|
| Portugal |
| Spain    |
|----------|
Data joinen in SQL

Maak de semi-join af (een inleiding tot subquery's)

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      |
|-------------------------|-----------|-------------|
Data joinen in SQL

Anti-join

Een diagram met twee tabellen, left_table en right_table, die worden gebruikt om een anti-join te laten zien. col2 wordt gebruikt om col1 te filteren. Records in left_table waar col1 geen match vindt in col2, zijn NOT vervaagd.

Data joinen in SQL

Anti-join

Een diagram met twee tabellen, left_table en right_table. Rechts staat het resultaat van een anti-join op beide tabellen. Alleen records in left_table waar col1 geen match vindt in col2 zijn geretourneerd. Deze komen overeen met id's 1 en 4.

Data joinen in SQL

Een anti-join met de presidenten

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    |
Data joinen in SQL

Laten we oefenen!

Data joinen in SQL

Preparing Video For Download...