Sottoquery con semi join e anti join

Unire i dati in SQL

Maham Faisal Khan

Senior Content Developer, DataCamp

Tutti i tipi di join

Diagramma per un INNER JOIN sul campo id

Un diagramma con due tabelle: left_table e right_table. A destra il risultato dell’unione delle due query, che restituisce solo i record con id corrispondente in entrambe le tabelle.

Unire i dati in SQL

Join additivi

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
Unire i dati in SQL

Join additivi

Un diagramma che spiega un join additivo. A sinistra due tabelle, left_table e right_table. A destra il risultato di un INNER JOIN sulla colonna id. I campi con nomi diversi vengono aggiunti con i loro nomi originali. Poiché la colonna date appare in entrambe le tabelle, viene aggiunta due volte.

Unire i dati in SQL

Semi join

Un semi join seleziona i record nella prima tabella quando una condizione è soddisfatta nella seconda.

Un diagramma con due tabelle, left_table e right_table, usate per mostrare un semi join. left_table ha due colonne, id e col1. right_table ha una sola colonna, col2.

Unire i dati in SQL

Semi join

Un diagramma con due tabelle, left_table e right_table, usate per mostrare un semi join. col2 verrà usata per filtrare col1. I record di left_table in cui col1 non trova un match in col2 sono stati attenuati.

Unire i dati in SQL

Semi join

Un diagramma con due tabelle, left_table e right_table. A destra il risultato di un semi join su entrambe. Sono restituiti solo i record di left_table in cui col1 trova un match in col2: corrispondono agli id 2 e 3.

Unire i dati in SQL

Avviamo il nostro 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          |
Unire i dati in SQL

Costruiamo sul semi join

SELECT country
FROM states
WHERE indep_year < 1800;
|----------|
| country  |
|----------|
| Portugal |
| Spain    |
|----------|
Unire i dati in SQL

Completa il semi join (intro alle sottoquery)

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      |
|-------------------------|-----------|-------------|
Unire i dati in SQL

Anti join

Un diagramma con due tabelle, left_table e right_table, usate per mostrare un anti join. col2 verrà usata per filtrare col1. I record di left_table in cui col1 non trova un match in col2 NON sono stati attenuati.

Unire i dati in SQL

Anti join

Un diagramma con due tabelle, left_table e right_table. A destra il risultato di un anti join su entrambe. Sono restituiti solo i record di left_table in cui col1 non trova un match in col2: corrispondono agli id 1 e 4.

Unire i dati in SQL

Un anti join con i presidenti

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    |
Unire i dati in SQL

Ayo berlatih!

Unire i dati in SQL

Preparing Video For Download...