Subinterogări cu semi-join și anti-join

Joining Data in SQL

Maham Faisal Khan

Senior Content Developer, DataCamp

Tipuri de join-uri

Diagramă pentru un INNER JOIN pe câmpul id

O diagramă cu două tabele: left_table și right_table. Rezultatul join-ului este afișat în dreapta, returnând doar înregistrările care s-au potrivit pe coloana id în ambele tabele.

Joining Data in SQL

Join-uri aditive

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

Join-uri aditive

O diagramă explicând un join aditiv. În stânga sunt afișate două tabele, left_table și right_table. În dreapta este afișat rezultatul unui INNER JOIN pe coloana id. Câmpurile cu nume diferite sunt adăugate cu numele lor original. Deoarece câmpul date apare în ambele tabele, acesta este adăugat de două ori.

Joining Data in SQL

Semi join

Un semi-join selectează înregistrările din primul tabel unde o condiție este îndeplinită în al doilea tabel.

O diagramă cu două tabele, left_table și right_table, folosite pentru a demonstra un semi-join. left_table conține două coloane, id și col1. right_table conține doar coloana col2.

Joining Data in SQL

Semi join

O diagramă cu două tabele, left_table și right_table, folosite pentru a demonstra un semi-join. col2 filtrează col1. Înregistrările din left_table unde col1 nu găsește o corespondență în col2 sunt estompate.

Joining Data in SQL

Semi join

O diagramă cu două tabele, left_table și right_table. Rezultatul unui semi-join este afișat în dreapta. Sunt returnate doar înregistrările din left_table unde col1 găsește o corespondență în col2, corespunzând id-urilor 2 și 3.

Joining Data in SQL

Începem semi-join-ul

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

Continuăm semi-join-ul

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

Finalizăm semi-join-ul (introducere în subinterogări)

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

O diagramă cu două tabele, left_table și right_table, folosite pentru a demonstra un anti-join. col2 filtrează col1. Înregistrările din left_table unde col1 nu găsește o corespondență în col2 nu sunt estompate.

Joining Data in SQL

Anti join

O diagramă cu două tabele, left_table și right_table. Rezultatul unui anti-join este afișat în dreapta. Sunt returnate doar înregistrările din left_table unde col1 nu găsește o corespondență în col2, corespunzând id-urilor 1 și 4.

Joining Data in SQL

Un anti-join cu tabelul 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

Să exersăm!

Joining Data in SQL

Preparing Video For Download...