Объединение подзапросов UNION или UNION ALL позволяет объединить результаты нескольких подзапросов в один результирующий набор данных. Каждый подзапрос должен иметь одинаковое количество столбцов, и объединяемые столбцы должны иметь одинаковый тип данных.
Рассмотрим таблицу с продуктами
products
| id | product_name | price |
|---|---|---|
| 10928473 | Стиральная машина Electrolux | 28499.99 |
| 20483739 | Беспроводные наушники JBL с микрофоном | 4999.0 |
| 73648393 | Игровая мышь Acer | 1099.0 |
| ... | ... | ... |
Оператор UNION объединяет результаты нескольких подзапросов и удаляет дубликаты строк из результирующего набора.
Например, используя оператор UNION, можно объединить результаты двух подзапросов, которые выбирают продукты с ценой выше 50000 и продукты с ценой ниже 1000:
(SELECT
id,
product_name,
price
FROM products WHERE price > 50000)
UNION
(SELECT
id,
product_name,
price
FROM products WHERE price < 1000)
В результате выполнения получится такая таблица:
union_products
| id | product_name | price |
|---|---|---|
| 81176602 | Весы кухонные ERGOLUX | 799.0 |
| 33801167 | Ноутбук Acer | 53849.0 |
| 16673098 | Фен Vitek | 799.0 |
| 66379812 | Ноутбук Dell | 90299.0 |
| 17728904 | Компьютерная мышь Logitech | 650.0 |
| 22657781 | Коврик для мыши черный | 440.0 |
Таблица на DB Fiddle
Оператор UNION ALL также объединяет результаты нескольких подзапросов, но не удаляет дубликаты строк. Это означает, что результирующий набор будет содержать все строки из всех подзапросов, включая повторяющиеся строки.
Например, мы можем использовать оператор UNION ALL, чтобы объединить результаты двух подзапросов, которые выбирают продукты с ценой ниже 1000 и компьютерные мыши, сохраняя все строки:
(SELECT
id,
product_name,
price
FROM products WHERE price < 1000)
UNION ALL
(SELECT
id,
product_name,
price
FROM products WHERE product_name LIKE '%мышь%')
Результат будет таким
union_products
| id | product_name | price |
|---|---|---|
| 17728904 | Компьютерная мышь Logitech | 650.0 |
| 22657781 | Коврик для мыши черный | 440.0 |
| 16673098 | Фен Vitek | 799.0 |
| 81176602 | Весы кухонные ERGOLUX | 799.0 |
| 73648393 | Игровая мышь Acer | 1099.0 |
| 17728904 | Компьютерная мышь Logitech | 650.0 |
Таблица на DB Fiddle
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.