Подзапросы с полусоединением и антисоединением

Объединение данных в SQL

Maham Faisal Khan

Senior Content Developer, DataCamp

Все виды соединений

Диаграмма INNER JOIN по полю id

Диаграмма двух таблиц: left_table и right_table. Результат объединения показан справа: возвращаются только записи, совпавшие по столбцу id в обеих таблицах.

Объединение данных в SQL

Аддитивные соединения

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
Объединение данных в SQL

Аддитивные соединения

Диаграмма аддитивного соединения. Слева — две таблицы: left_table и right_table. Справа — результат INNER JOIN по столбцу id. Поля с разными именами добавляются с исходными именами. Поскольку поле date присутствует в обеих таблицах, оно добавляется дважды.

Объединение данных в SQL

Полусоединение

Полусоединение (semi join) выбирает записи из первой таблицы, для которых выполняется условие во второй таблице.

Диаграмма двух таблиц, left_table и right_table, используемых для демонстрации полусоединения. left_table содержит два столбца: id и col1. right_table содержит только один столбец: col2.

Объединение данных в SQL

Полусоединение

Диаграмма двух таблиц, left_table и right_table, используемых для демонстрации полусоединения. col2 применяется для фильтрации col1. Записи в left_table, где col1 не находит совпадения в col2, затенены.

Объединение данных в SQL

Полусоединение

Диаграмма двух таблиц, left_table и right_table. Результат полусоединения показан справа: возвращены только записи из left_table, где col1 находит совпадение в col2. Это записи с id 2 и 3.

Объединение данных в SQL

Начало построения полусоединения

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          |
Объединение данных в SQL

Развитие полусоединения

SELECT country
FROM states
WHERE indep_year < 1800;
|----------|
| country  |
|----------|
| Portugal |
| Spain    |
|----------|
Объединение данных в SQL

Завершение полусоединения (введение в подзапросы)

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      |
|-------------------------|-----------|-------------|
Объединение данных в SQL

Антисоединение

Диаграмма двух таблиц, left_table и right_table, используемых для демонстрации антисоединения. col2 применяется для фильтрации col1. Записи в left_table, где col1 не находит совпадения в col2, НЕ затенены.

Объединение данных в SQL

Антисоединение

Диаграмма двух таблиц, left_table и right_table. Результат антисоединения показан справа: возвращены только записи из left_table, где col1 не находит совпадения в col2. Это записи с id 1 и 4.

Объединение данных в SQL

Антисоединение с таблицей 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    |
Объединение данных в SQL

Давайте потренируемся!

Объединение данных в SQL

Preparing Video For Download...