Underfrågor med semi join och anti join

Att joina data i SQL

Maham Faisal Khan

Senior Content Developer, DataCamp

En genomgång av joins

Diagram för en INNER JOIN på fältet id

Ett diagram som visar två tabeller: left_table och right_table. Resultatet av att joina de två frågorna visas till höger och returnerar bara de poster som matchade på id-kolumnen i båda tabellerna.

Att joina data i SQL

Additiva joins

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
Att joina data i SQL

Additiva joins

Ett diagram som förklarar en additiv join. Till vänster visas två tabeller, left_table och right_table. Till höger visas resultatet av en INNER JOIN med en id-kolumn på de två tabellerna. Fält med olika namn läggs till med sina ursprungliga namn. Eftersom date-fältet finns i båda tabellerna läggs det till två gånger.

Att joina data i SQL

Semi join

En semi join väljer poster i den första tabellen där ett villkor är uppfyllt i den andra tabellen.

Ett diagram som visar två tabeller, left_table och right_table, som används för att demonstrera en semi join. left_table innehåller två kolumner, id och col1. right_table innehåller bara en kolumn, col2.

Att joina data i SQL

Semi join

Ett diagram som visar två tabeller, left_table och right_table, som används för att demonstrera en semi join. col2 används för att filtrera col1. Poster i left_table där col1 inte hittar en matchning i col2 har tonats ned.

Att joina data i SQL

Semi join

Ett diagram som visar två tabeller, left_table och right_table. Resultatet av en semi join på båda tabellerna visas till höger. Bara poster i left_table där col1 hittar en matchning i col2 returneras. Dessa motsvarar id 2 och 3.

Att joina data i SQL

Inledning av vår 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          |
Att joina data i SQL

Vi bygger vidare på vår semi join

SELECT country
FROM states
WHERE indep_year < 1800;
|----------|
| country  |
|----------|
| Portugal |
| Spain    |
|----------|
Att joina data i SQL

Färdigställ semi join (intro till underfrågor)

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      |
|-------------------------|-----------|-------------|
Att joina data i SQL

Anti join

Ett diagram som visar två tabeller, left_table och right_table, som används för att demonstrera en anti join. col2 används för att filtrera col1. Poster i left_table där col1 inte hittar en matchning i col2 har INTE tonats ned.

Att joina data i SQL

Anti join

Ett diagram som visar två tabeller, left_table och right_table. Resultatet av en anti join på båda tabellerna visas till höger. Bara poster i left_table där col1 inte hittar en matchning i col2 returneras. Dessa motsvarar id 1 och 4.

Att joina data i SQL

En anti join med 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    |
Att joina data i SQL

Nu kör vi en övning!

Att joina data i SQL

Preparing Video For Download...