Subconsultas com semijunções e antijunções

Junção de dados no SQL

Maham Faisal Khan

Senior Content Developer, DataCamp

Chamando todas as junções

Diagrama de uma INNER JOIN com base no campo id

Diagrama mostrando duas tabelas: left_table e right_table. O resultado da junção das duas consultas é mostrado à direita, retornando apenas os registros com coluna id correspondente nas duas tabelas.

Junção de dados no SQL

Junções aditivas

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
Junção de dados no SQL

Junções aditivas

Diagrama explicando uma junção aditiva. No lado esquerdo, são exibidas duas tabelas, left_table e right_table. No lado direito, é mostrado o resultado de uma  usando a coluna id das duas tabelas. Os campos com nomes diferentes são adicionados com o nome original. Como o campo de data aparece nas duas tabelas, é adicionado duas vezes.

Junção de dados no SQL

Semijunção

Uma semijunção seleciona registros da primeira tabela em que uma condição é atendida na segunda tabela.

Diagrama mostrando duas tabelas, left_table e right_table, que serão usadas para demonstrar uma semijunção. left_table contém duas colunas, id e col1. right_table contém apenas uma coluna, col2.

Junção de dados no SQL

Semijunção

Diagrama mostrando duas tabelas, left_table e right_table, que estão sendo usadas para demonstrar uma semijunção. col2 será usada para filtrar col1. Os registros da left_table em que col1 não encontra uma correspondência em col2 estão em cinza

Junção de dados no SQL

Semijunção

Diagrama mostrando duas tabelas, left_table e right_table. O resultado de uma semijunção com ambas as tabelas é mostrado à direita. Somente os registros da left_table em que col1 e col2 têm valores correspondentes foram retornados. Eles correspondem aos IDs 2 e 3.

Junção de dados no SQL

Início à semijunção

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          |
Junção de dados no SQL

Elaboração da semi junção

SELECT country
FROM states
WHERE indep_year < 1800;
|----------|
| country  |
|----------|
| Portugal |
| Spain    |
|----------|
Junção de dados no SQL

Finalização da semijunção (introdução a subconsultas)

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      |
|-------------------------|-----------|-------------|
Junção de dados no SQL

Antijunção

Diagrama mostrando duas tabelas, left_table e right_table, que estão sendo usadas para demonstrar uma antijunção. col2 será usada para filtrar col1. Os registros na left_table em que a col1 não encontra uma correspondência na col2 NÃO estão em cinza.

Junção de dados no SQL

Antijunção

Diagrama mostrando duas tabelas, left_table e right_table. O resultado de uma antijunção com as duas tabelas é mostrado à direita. Somente os registros na left_table em que col1 não encontra uma correspondência em col2 foram retornados. Eles correspondem aos IDs 1 e 4.

Junção de dados no SQL

Uma antijunção com os presidentes

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    |
Junção de dados no SQL

Vamos praticar!

Junção de dados no SQL

Preparing Video For Download...