Poddotazy se semi join a anti join

Joining Data in SQL

Maham Faisal Khan

Senior Content Developer, DataCamp

Přehled spojení

Diagram pro INNER JOIN na poli id

Diagram znázorňující dvě tabulky: left_table a right_table. Výsledek spojení je zobrazen vpravo – vráceny jsou pouze záznamy se shodou ve sloupci id.

Joining Data in SQL

Aditivní spojení

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

Aditivní spojení

Diagram vysvětlující aditivní spojení. Vlevo jsou zobrazeny dvě tabulky, left_table a right_table. Vpravo je výsledek INNER JOIN podle sloupce id. Sloupce s různými názvy jsou přidány pod původními názvy. Sloupec date se vyskytuje v obou tabulkách, proto je přidán dvakrát.

Joining Data in SQL

Semi join

Semi join vybírá záznamy z první tabulky, kde je splněna podmínka v druhé tabulce.

Diagram znázorňující dvě tabulky, left_table a right_table, pro demonstraci semi join. left_table obsahuje dva sloupce: id a col1. right_table obsahuje pouze sloupec col2.

Joining Data in SQL

Semi join

Diagram znázorňující dvě tabulky, left_table a right_table, pro demonstraci semi join. col2 filtruje col1. Záznamy z left_table, kde col1 nenalezla shodu v col2, jsou vybledlé.

Joining Data in SQL

Semi join

Diagram znázorňující dvě tabulky, left_table a right_table. Výsledek semi join je zobrazen vpravo. Vráceny byly pouze záznamy z left_table, kde col1 nalezla shodu v col2. Odpovídají id 2 a 3.

Joining Data in SQL

Zahájení 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          |
Joining Data in SQL

Rozšíření semi join

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

Dokončení semi join (úvod do poddotazů)

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

Anti join

Diagram znázorňující dvě tabulky, left_table a right_table, pro demonstraci anti join. col2 filtruje col1. Záznamy z left_table, kde col1 nenalezla shodu v col2, nejsou vybledlé.

Joining Data in SQL

Anti join

Diagram znázorňující dvě tabulky, left_table a right_table. Výsledek anti join je zobrazen vpravo. Vráceny byly pouze záznamy z left_table, kde col1 nenalezla shodu v col2. Odpovídají id 1 a 4.

Joining Data in SQL

Anti join s tabulkou presidents

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

Pojďme si procvičit!

Joining Data in SQL

Preparing Video For Download...