Зміст курсу
Розширений Рівень SQL
Розширений Рівень SQL
Клауза UNION
Ви успішно освоїли внутрішні запити, і ми вже зацікавили клієнта, який хоче, щоб ми написали для нього SQL-запити.
Але є одна вимога - нам доведеться об'єднувати багато таблиць і працювати з ними. Тому, перш ніж поглиблюватися в JOINs
, давайте ознайомимося з важливою конструкцією: UNION
.
Давайте коротко розглянемо ключові моменти при роботі з UNION
:
- Кількість та порядок стовпців: Усі запити, які комбінуються за допомогою
UNION
, повинні мати однакову кількість стовпців, і ці стовпці повинні бути в тому ж порядку; - Типи даних: Типи даних відповідних стовпців кожного запиту мусять бути сумісними;
- Унікальні рядки: За замовчуванням,
UNION
видаляє дублікати рядків. Для включення дублікатів використовуєтьсяUNION ALL
.
Для кращого розуміння як правильно об'єднувати таблиці за допомогою клози UNION
, я ввів додаткову таблицю, яка містить інформацію про підрядників
.
Тут небагато інформації, лише first_name
, last_name
та email
.
Ось як виглядає ця таблиця:
Ви можете побачити, що ця таблиця має схожість з таблицею employees
. Використовуючи ключове слово UNION
, ми можемо об'єднати ці дві таблиці, щоб, наприклад, побачити список усіх імен та прізвищ співробітників і підрядників, які беруть участь у діяльності компанії.
Для цього ми використаємо ключове слово UNION
:
(SELECT employee_id as id, first_name, last_name FROM employees) UNION (SELECT contractor_id as id, first_name, last_name FROM contractors) ORDER BY id
Давайте коротко розглянемо, що тут відбувається:
У нас є 2 запити, які повертають 3 стовпці з однаковими типами даних для кожного стовпця.
Тобто, ми хочемо побачити Id
, first_name
, та last_name
всіх учасників компанії.
Ми також змінили псевдонім Id, так що стовпці в обох запитах SELECT
мають однакові назви.
Далі ми використовуємо клітинку UNION
, щоб поєднати результати цих двох запитів SELECT
з вилученням дублікатів (хоча у нас немає дублікатів).
Після цього ми використовуємо клітинку ORDER BY
для сортування за Id
.
Примітка
Ми сортуємо за Id, який є спільним стовпцем для обох таблиць.
Для кращого розуміння потрібно усвідомити, що після поєднання за допомогою клітинки UNION
, ми отримуємо "один великий запит", з яким потім можна працювати, використовуючи різні клітинки; в нашому випадку це клітинка ORDER BY
.
Але ми не можемо використовувати умови, як WHERE
чи GROUP BY
для таблиць, об'єднаних таким чином за допомогою умови UNION
.
Для цього нам потрібно записати це об’єднання у вигляді підзапиту в секції FROM
.
Ось як це буде виглядати:
SELECT id, first_name, last_name FROM ( SELECT employee_id AS id, first_name, last_name FROM employees UNION SELECT contractor_id AS id, first_name, last_name FROM contractors ) AS combined WHERE first_name = 'Jane'
Отже, використання запиту у вигляді підзапиту у розділі FROM
відкриває перед нами широкий спектр можливостей!
Примітка:
Спочатку це може здатися складним, але повірте мені, маючи ці знання та вміння використовувати такі структури, написання складних запитів і виконання вам поставлених завдань стане набагато легшим.
Дякуємо за ваш відгук!