Что делает union
Перейти к содержимому

Что делает union

  • автор:

Оператор 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 Google
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

Результаты двух запросов можно обработать, используя операции над множествами: объединение, пересечение и вычитание. Эти операции записываются соответственно так:

запрос1 UNION [ALL] запрос2 запрос1 INTERSECT [ALL] запрос2 запрос1 EXCEPT [ALL] запрос2 

Здесь запрос1 и запрос2 — это запросы, в которых могут использоваться все возможности, рассмотренные до этого.

UNION по сути добавляет результаты второго запроса к результатам первого (хотя никакой порядок возвращаемых строк при этом не гарантируется). Более того, эта операция убирает дублирующиеся строки из результата так же, как это делает DISTINCT , если только не указано UNION ALL .

INTERSECT возвращает все строки, содержащиеся в результате и первого, и второго запроса. Дублирующиеся строки отфильтровываются, если не указано ALL .

EXCEPT возвращает все строки, которые есть в результате первого запроса, но отсутствуют в результате второго. (Иногда это называют разницей двух запросов.) И здесь дублирующиеся строки отфильтровываются, если не указано ALL .

Чтобы можно было вычислить объединение, пересечение или разницу результатов двух запросов, эти запросы должны быть « совместимыми для объединения » , что означает, что они должны иметь одинаковое число столбцов и соответствующие столбцы должны быть совместимых типов, как описывается в Разделе 10.5.

Операции над множествами можно объединять, например

запрос1 UNION запрос2 EXCEPT запрос3 
(запрос1 UNION запрос2) EXCEPT запрос3 

Как показано выше, вы можете использовать круглые скобки, чтобы управлять очередью обработки. Без круглых скобок UNION и EXCEPT объединяются слева направо, но оператор INTERSECT имеет больший приоритет, чем первые два. Таким образом,

запрос1 UNION запрос2 INTERSECT запрос3 
запрос1 UNION (запрос2 INTERSECT запрос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 )

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *