Підзапити з напівзʼєднаннями та антизʼєднаннями

Об'єднання даних у 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...