Оператор SQL UNION
Оператор SQL UNION используется для объединения двух и более запросов оператора SQL SELECT.
Оператор SQL UNION имеет следующий синтаксис:
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2
Важно отметить, что каждый из операторов SQL SELECT должен иметь в своем запросе одинаковое количество столбцов и типы возвращаемых данных, иначе произойдет ошибка при формировании результирующей таблицы.
Примеры оператора SQL UNION. Имеется следующая таблица Artists:
| Singer | Album | Year | Sale |
| The Prodigy | Invaders Must Die | 2008 | 1200000 |
| Drowning Pool | Sinner | 2001 | 400000 |
| Massive Attack | Mezzanine | 1998 | 2300000 |
| The Prodigy | Fat of the Land | 1997 | 600000 |
| The Prodigy | Music For The Jilted Generation | 1994 | 1500000 |
| Massive Attack | 100th Window | 2003 | 1200000 |
| Drowning Pool | Full Circle | 2007 | 800000 |
| Massive Attack | Danny The Dog | 2004 | 1900000 |
| Drowning Pool | Resilience | 2013 | 500000 |
Пример 1. С помощью оператора SQL UNION вывести название исполнителя и альбома с использованием оператора UNION:
SELECT Singer FROM Artists UNION SELECT Album FROM Artists
| Singer | Album |
| The Prodigy | Invaders Must Die |
| Drowning Pool | Sinner |
| Massive Attack | Mezzanine |
| The Prodigy | Fat of the Land |
| The Prodigy | Music For The Jilted Generation |
| Massive Attack | 100th Window |
| Drowning Pool | Full Circle |
| Massive Attack | Danny The Dog |
| Drowning Pool | Resilience |
SQL оператор UNION
В этом учебном материале вы узнаете, как использовать SQL оператор UNION с синтаксисом и примерами.
Описание
SQL оператор UNION используется для объединения результирующих наборов из 2 или более операторов SELECT. Он удаляет повторяющиеся строки между различными запросами SELECT.
Каждый оператор SELECT в UNION должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.
В чем разница между UNION и UNION ALL
- UNION удаляет повторяющиеся строки
- Оператор UNION ALLне удаляет повторяющиеся строки
Синтаксис
Синтаксис для оператора UNION в SQL.
SELECT expression1, expression2, . expression_n
FROM tables
[WHERE conditions]
UNION
SELECT expression1, expression2, . expression_n
FROM tables
[WHERE conditions];
Параметры или аргумент
expression1 , expression2 , expression_n Столбцы или расчеты, которые вы хотите получить tables Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица WHERE conditions Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны
Примечание
- В обоих операторах SELECT должно быть одинаковое количество выражений
- Соответствующие выражения должны иметь одинаковый тип данных в запросах SELECT. Например: expression1 должен иметь одинаковый тип данных как в первом, так и во втором операторе SELECT
- Смотрите также оператор UNION ALL
Пример — одиночное поле с тем же именем
Давайте посмотрим, как использовать SQL оператор UNION, который возвращает одно поле. В этом простом примере поле в обоих операторах SELECT будет иметь одинаковое имя и тип данных.
Например.
SELECT supplier_id
FROM suppliers
SELECT supplier_id
FROM orders
ORDER BY supplier_id;
В этом SQL примере оператора UNION, если supplier_id появилось в таблицах suppliers и orders , оно будет один раз в вашем наборе результатов. Оператор UNION удаляет дубликаты. Если вы не хотите удалить дубликаты, попробуйте использовать оператор UNION ALL.
Теперь давайте рассмотрим этот пример, далее приведем некоторые данные.
Если у вас была таблица suppliers , заполненная следующими записями.
| supplier_id | supplier_name |
|---|---|
| 1000 | Yandex |
| 2000 | |
| 3000 | Oracle |
| 4000 | Bing |
И таблица orders заполнена следующими записями.
| order_id | order_date | supplier_id |
|---|---|---|
| 2019-07-01 | 2000 | |
| 2019-07-01 | 6000 | |
| 2019-07-02 | 7000 | |
| 2019-07-03 | 8000 |
И вы выполнили следующий запрос UNION.
SELECT supplier_id
FROM suppliers
SELECT supplier_id
FROM orders
ORDER BY supplier_id;
Вы получите следующие результаты.
| supplier_id |
|---|
| 1000 |
| 2000 |
| 3000 |
| 4000 |
| 6000 |
| 7000 |
| 8000 |
Как видно из этого примера, UNION взял все значения supplier_id из таблицы suppliers , а также из таблицы orders и возвратил комбинированный набор результатов. Поскольку оператор UNION удалил дубликаты между результирующими наборами, поле supplier_id 2000 отображается только один раз, даже если оно находится в таблицах suppliers и orders . Если вы не хотите удалять дубликаты, попробуйте вместо этого использовать оператор UNION ALL.
Пример — разные имена полей
Нет необходимости, чтобы соответствующие столбцы в каждом операторе SELECT имели одинаковые имена, но они должны быть с одинаковыми, соответствующими типами данных.
Если у вас нет одинаковых имен столбцов между операторами SELECT, это становится немного сложнее, особенно если вы хотите упорядочить результаты запроса, используя оператор ORDER BY.
Давайте посмотрим, как использовать оператор UNION с разными именами столбцов и упорядочиванием результатов запроса.
Например.
SQL — Оператор UNION
Оператор UNION используется для объединения результирующего набора из двух или более операторов SELECT. Каждый оператор SELECT в UNION должен иметь одинаковое количество столбцов. Столбцы также должны иметь похожие типы данных и в каждой инструкции SELECT быть в том же порядке.
Синтаксис UNION
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;
Синтаксис UNION ALL
Оператор UNION по умолчанию выбирает только разные значения. Чтобы разрешить повторяющиеся значения, используйте UNION ALL:
SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;
Пример UNION
Следующий оператор SQL выбирает все разные города (только отдельные значения) от «users» и «delivery»:
Пример:
SELECT city FROM users UNION SELECT city FROM delivery ORDER BY city;
Пример SQL UNION ALL
Следующий оператор SQL выбирает все города (дублирующиеся значения также) из «users» и «delivery»:
Пример:
SELECT city FROM users UNION ALL SELECT city FROM delivery ORDER BY city;
SQL UNION с WHERE
Следующий оператор SQL выбирает все разные испанские города (только отдельные значения) от «users» и «delivery»:
Пример:
SELECT city, country FROM users WHERE country='Spain' UNION SELECT city, country FROM delivery WHERE country='Spain' ORDER BY city;
SQL UNION ALL с WHERE
Следующий оператор SQL выбирает все испанские города (повторяющиеся значения) также из «users» и «delivery»:
Пример:
SELECT city, country FROM users WHERE country='Spain' UNION ALL SELECT city, country FROM delivery WHERE country = 'Spain' ORDER BY city;
Что делает union
Результаты двух запросов можно обработать, используя операции над множествами: объединение, пересечение и вычитание. Эти операции записываются соответственно так:
запрос1UNION [ALL]запрос2запрос1INTERSECT [ALL]запрос2запрос1EXCEPT [ALL]запрос2
Здесь запрос1 и запрос2 — это запросы, в которых могут использоваться все возможности, рассмотренные до этого.
UNION по сути добавляет результаты второго запроса к результатам первого (хотя никакой порядок возвращаемых строк при этом не гарантируется). Более того, эта операция убирает дублирующиеся строки из результата так же, как это делает DISTINCT , если только не указано UNION ALL .
INTERSECT возвращает все строки, содержащиеся в результате и первого, и второго запроса. Дублирующиеся строки отфильтровываются, если не указано ALL .
EXCEPT возвращает все строки, которые есть в результате первого запроса, но отсутствуют в результате второго. (Иногда это называют разницей двух запросов.) И здесь дублирующиеся строки отфильтровываются, если не указано ALL .
Чтобы можно было вычислить объединение, пересечение или разницу результатов двух запросов, эти запросы должны быть « совместимыми для объединения » , что означает, что они должны иметь одинаковое число столбцов и соответствующие столбцы должны быть совместимых типов, как описывается в Разделе 10.5.
Операции над множествами можно объединять, например
запрос1UNIONзапрос2EXCEPTзапрос3
(запрос1UNIONзапрос2) EXCEPTзапрос3
Как показано выше, вы можете использовать круглые скобки, чтобы управлять очередью обработки. Без круглых скобок UNION и EXCEPT объединяются слева направо, но оператор INTERSECT имеет больший приоритет, чем первые два. Таким образом,
запрос1UNIONзапрос2INTERSECTзапрос3
запрос1UNION (запрос2INTERSECTзапрос3)
Вы также можете заключить отдельный запрос в круглые скобки. Это важно, если в запросе необходимо использовать любое из предложений, обсуждаемых в следующих разделах, например LIMIT . Без круглых скобок возникнет синтаксическая ошибка или предложение будет восприниматься как относящееся к результату операции над множествами, а не к её аргументам. Например,
SELECT a FROM b UNION SELECT x FROM y LIMIT 10
не вызовет ошибку, но будет означать
(SELECT a FROM b UNION SELECT x FROM y) LIMIT 10
SELECT a FROM b UNION (SELECT x FROM y LIMIT 10)
| Пред. | Наверх | След. |
| 7.3. Списки выборки | Начало | 7.5. Сортировка строк ( ORDER BY ) |