Podzapytania z semi join i anti join

Łączenie danych w SQL

Maham Faisal Khan

Senior Content Developer, DataCamp

Przegląd złączeń

Diagram dla INNER JOIN po polu id

Diagram przedstawiający dwie tabele: left_table i right_table. Po prawej stronie pokazano wynik złączenia — zwrócono tylko rekordy dopasowane po kolumnie id.

Łączenie danych w SQL

Złączenia addytywne

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
Łączenie danych w SQL

Złączenia addytywne

Diagram objaśniający złączenie addytywne. Po lewej stronie pokazano dwie tabele: left_table i right_table. Po prawej — wynik INNER JOIN po kolumnie id. Pola o różnych nazwach są dodawane z oryginalnymi nazwami. Pole date, występujące w obu tabelach, pojawia się dwukrotnie.

Łączenie danych w SQL

Semi join

Semi join wybiera rekordy z pierwszej tabeli, dla których warunek jest spełniony w drugiej tabeli.

Diagram przedstawiający dwie tabele: left_table i right_table, używane do demonstracji semi join. left_table zawiera dwie kolumny: id i col1. right_table zawiera tylko jedną kolumnę: col2.

Łączenie danych w SQL

Semi join

Diagram przedstawiający dwie tabele: left_table i right_table, używane do demonstracji semi join. col2 służy do filtrowania col1. Rekordy z left_table, gdzie col1 nie znalazło dopasowania w col2, są wyszarzone.

Łączenie danych w SQL

Semi join

Diagram przedstawiający dwie tabele: left_table i right_table. Po prawej stronie pokazano wynik semi join. Zwrócono tylko rekordy z left_table, gdzie col1 znalazło dopasowanie w col2 — odpowiadają one id 2 i 3.

Łączenie danych w SQL

Rozpoczęcie 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          |
Łączenie danych w SQL

Rozbudowanie semi join

SELECT country
FROM states
WHERE indep_year < 1800;
|----------|
| country  |
|----------|
| Portugal |
| Spain    |
|----------|
Łączenie danych w SQL

Ukończenie semi join (wstęp do podzapytań)

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      |
|-------------------------|-----------|-------------|
Łączenie danych w SQL

Anti join

Diagram przedstawiający dwie tabele: left_table i right_table, używane do demonstracji anti join. col2 służy do filtrowania col1. Rekordy z left_table, gdzie col1 nie znalazło dopasowania w col2, nie są wyszarzone.

Łączenie danych w SQL

Anti join

Diagram przedstawiający dwie tabele: left_table i right_table. Po prawej stronie pokazano wynik anti join. Zwrócono tylko rekordy z left_table, gdzie col1 nie znalazło dopasowania w col2 — odpowiadają one id 1 i 4.

Łączenie danych w SQL

Anti join z tabelą 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    |
Łączenie danych w SQL

Czas na ćwiczenia!

Łączenie danych w SQL

Preparing Video For Download...