SQL UNION Оператор
Оператор UNION используется для объединения множества результатов двух или более заявлений на SELECT.
Обратите внимание на то, что каждый оператор ЗЕЬЕСТ внутри Союза должны иметь одинаковое число столбцов. Столбцы также должны иметь одинаковые типы данных
Кроме того, столбцы в каждом ЗЕЬЕСТ должны быть в том же самом порядке.
SQL UNION Синтаксис
SELECT column_name(s)
FROM table1
UNION
SELECT column_name(s)
FROM table2
;
Note: Оператор UNION выбирает только различные значения по умолчанию.
Чтобы разрешить повторяющиеся значения, используйте ключевое слово ALL с UNION.
SQL UNION ALL Синтаксис
SELECT column_name(s)
FROM table1
UNION ALL
SELECT column_name(s)
FROM table2
;
PS: Имена столбцов в результатах запросов, союзной, как правило, равны именам столбцов в первом ЗЕЬЕСТ в Союзе.
Arguments
<query_specification> | ( <query_expression> )
Is a query specification or query expression that returns data to be combined with the data from another query specification or query expression. The definitions of the columns that are part of a UNION operation don’t have to be the same, but they must be compatible through implicit conversion. When data types differ, the resulting data type is determined based on the rules for data type precedence. When the types are the same but differ in precision, scale, or length, the result is based on the same rules for combining expressions. For more information, see Precision, Scale, and Length (Transact-SQL).
Columns of the xml data type must be equal. All columns must be either typed to an XML schema or untyped. If typed, they must be typed to the same XML schema collection.
UNION
Specifies that multiple result sets are to be combined and returned as a single result set.
ALL
Incorporates all rows into the results, including duplicates. If not specified, duplicate rows are removed.
Examples
между таблицами с разными именами столбцов:
(SELECT e_name AS name, email FROM employees) UNION (SELECT c_name AS name, email FROM customers);
Определение глобального порядка и ограничение итоговых строк:
(SELECT name, email FROM employees) UNION (SELECT name, email FROM customers) ORDER BY name LIMIT 10;
Добавление постоянной строки:
(SELECT 'John Doe' AS name, 'john.doe@example.net' AS email) UNION (SELECT name, email FROM customers);
Differing types:
SELECT CAST('x' AS CHAR(1)) UNION SELECT REPEAT('y',4); + | CAST('x' AS CHAR(1)) | + | x | | yyyy | +
Возврат результатов в порядке очередности каждого отдельного SELECT с помощью столбца сортировки:
(SELECT 1 AS sort_column, e_name AS name, email FROM employees) UNION (SELECT 2, c_name AS name, email FROM customers) ORDER BY sort_column;
Разница между UNION, EXCEPT и INTERSECT . и доступны в MariaDB 10.5.0 .
CREATE TABLE seqs (i INT); INSERT INTO seqs VALUES (1),(2),(2),(3),(3),(4),(5),(6); SELECT i FROM seqs WHERE i <= 3 UNION SELECT i FROM seqs WHERE i>=3; + | i | + | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | + SELECT i FROM seqs WHERE i <= 3 UNION ALL SELECT i FROM seqs WHERE i>=3; + | i | + | 1 | | 2 | | 2 | | 3 | | 3 | | 3 | | 3 | | 4 | | 5 | | 6 | + SELECT i FROM seqs WHERE i <= 3 EXCEPT SELECT i FROM seqs WHERE i>=3; + | i | + | 1 | | 2 | + SELECT i FROM seqs WHERE i <= 3 EXCEPT ALL SELECT i FROM seqs WHERE i>=3; + | i | + | 1 | | 2 | | 2 | + SELECT i FROM seqs WHERE i <= 3 INTERSECT SELECT i FROM seqs WHERE i>=3; + | i | + | 3 | + SELECT i FROM seqs WHERE i <= 3 INTERSECT ALL SELECT i FROM seqs WHERE i>=3; + | i | + | 3 | | 3 | +
Круглые скобки для указания приоритета из MariaDB 10.4.0
CREATE OR REPLACE TABLE t1 (a INT); CREATE OR REPLACE TABLE t2 (b INT); CREATE OR REPLACE TABLE t3 (c INT); INSERT INTO t1 VALUES (1),(2),(3),(4); INSERT INTO t2 VALUES (5),(6); INSERT INTO t3 VALUES (1),(6); ((SELECT a FROM t1) UNION (SELECT b FROM t2)) INTERSECT (SELECT c FROM t3); + | a | + | 1 | | 6 | + (SELECT a FROM t1) UNION ((SELECT b FROM t2) INTERSECT (SELECT c FROM t3)); + | a | + | 1 | | 2 | | 3 | | 4 | | 6 | +
SQL UNION Оператор
Результат операции UNION установлен оператор используется для объединения двух или более ЗЕЬЕСТ.
Обратите внимание, что UNION внутри каждого ЗЕЬЕСТ должны иметь одинаковое число столбцов. Столбцы также должны иметь одинаковые типы данных
В то же время, порядок столбцов в каждой ЗЕЬЕСТ должны быть одинаковыми.
SQL UNION Синтаксис
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2 ;
Примечание: По умолчанию, оператор UNION , чтобы выбрать другое значение.Если разрешить повторяющиеся значения, используйте UNION ALL.
Синтаксис SQL UNION ALL
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2 ;
Примечание: UNION результирующий набор всегда равен имена столбцов в первую очередь выберите имена столбцов заявление Союза.
Общие правила
Существует лишь одно важное правило, о котором следует помнить при использовании оператора UNION: порядок, количество и тип данных столбцов должны быть идентичны во всех запросах. Типы данных не обязательно должны быть идентичны, но они должны быть совместимы
Например, типы CHAR и VARCHAR являются совместимыми. По умолчанию результирующий цабор использует размер наибольшего из совместимых типов, и в запросе, в котором объединяются три столбца типа CHAR — CHAR(5), CHAR(IO) и CHAR(12), результаты будут в формате CHAR(12), а в столбцы меньшего размера будут добавляться дополнительные пробелы
Типы данных не обязательно должны быть идентичны, но они должны быть совместимы. Например, типы CHAR и VARCHAR являются совместимыми. По умолчанию результирующий цабор использует размер наибольшего из совместимых типов, и в запросе, в котором объединяются три столбца типа CHAR — CHAR(5), CHAR(IO) и CHAR(12), результаты будут в формате CHAR(12), а в столбцы меньшего размера будут добавляться дополнительные пробелы.
Хотя согласно стандарту ANSI оператор INTERSECT имеет более высокий приоритет по сравнению с другими операторами для работы с наборами, на многих платформах эти операторы рассматриваются как имеющие одинаковый приоритет. Вы можете явным образом управлять приоритетом операторов, используя скобки. В противном случае СУБД, скорее всего, будет выполнять их в порядке слева направо.
Предложение DISTINCT может (в зависимости от платформы) потребовать существенных затрат производительности, поскольку при этом часто требуется дополнительный проход по результирующему набору для удаления дублирующихся записей. Предложение ALL для увеличения производительности можно указывать во всех случаях, когда не ожидается наличия дубликатов (или если дубликаты допустимы).
Согласно стандарту ANSI в запросе можно использовать только одно предложение ORDER BY. Ставьте его в конце последней инструкции SELECT. Чтобы избежать двусмысленности при указании столбцов и таблиц, обязательно присваивайте всем столбцам всех таблиц соответствующие псевдонимы. Тем не менее при указании имен столбцов в запросе SELECT … UNION используется только псевдоним из первого запроса. Например:
SELECT
au_lname AS lastname,
au_fname AS firstname
FROM authors
UNION
SELECT
emp_lname AS lastname,
emp_fname AS firstname
FROM employees
ORDER BY lastname, firstname;
Кроме того, поскольку в запросах оператора UNION могут содержаться столбцы с совместимыми типами данных, возможны вариации поведения кода на разных платформах, особенно в том, что касается длины типа данных столбца. Например, если столбец au_fname первого запроса заметно длиннее столбца emplname второго запроса, то разные платформы могут применять разные правила определения используемой длины. Однако, как правило, платформы выбирают для результирующего набора более длинный (и менее ограниченный) тип данных.
Каждая СУРБД может применять свои собственные правила определения имени столбца, если столбцы в разных таблицах имеют разные имена. Как правило, используются имена из первого запроса.
Объединение результатов запросов к двум таблицам с помощью оператора SQL UNION
До сих пор мы рассматривали запросы с оператором UNION, в которых объединялись результаты из одной таблицы. Теперь будем объединять результаты из двух таблиц.
Пример 6. Есть база данных склада строительных материалов. В ней есть таблицы, содержащая данные об обоях. Таблица Vinil содержит данные о виниловых обоях, таблица Paper — о бумажных обоях. Требуется узнать данные о ценах обоев из одной и другой таблицы.
Чтобы извлечь не повторяющиеся данные о ценах на виниловые обои, составим запрос со словом DISTINCT:
Результатом выполнения запроса будет следующая таблица:
Чтобы извлечь не повторяющиеся данные о ценах на бумажные обои, составим следующий запрос, также со словом DISTINCT:
Результатом выполнения запроса будет следующая таблица:
Теперь составим объединённый запрос с оператором UNION:
Так как мы не используем слово ALL, дубликаты значений 400, 500 и 530 выводиться не будут. Результатом выполнения запроса будет следующая таблица:
Пример 7. База данных и таблицы — те же, что и в предыдущем примере.
Требуется получить все данные о ценах, в том числе повторяющиеся. Запрос на объединение результатов с использованием оператора UNION будет аналогичен запросу в предыдущем примере, но вместо просто UNION пишем UNION ALL:
Результатом выполнения запроса будет следующая таблица:
При помощи оператора SQL UNION можно объединить как простые запросы, так и запросы, содержащие подзапросы (вложенные запросы). Рассмотрим соответствующий пример.
Пример 8. Есть база данных «Театр». В её таблице Play содержатся данные о постановках (названия — в столбце Name), в таблице Director — даные о режиссёрах (в столбце Fname — имя, в столбце Lname — фамилия). Первичный ключ таблицы Director — dir_id — идентификационный номер режиссёра. Dir_id также — внешний ключ таблицы Play, он ссылается на первичный ключ таблицы Director. Требуется вывести спектакли режиссеров John Barton и Trevor Nunn.
Решение. Объединим результаты двух запросов — один возвращает спектакли режиссёра John Barton, другой — режиссёра Trevor Nunn. А каждый из этих объединяемых запросов к таблице Play делаем с подзапросом к таблице Director, который возвращает dir_id по имени и фамилии режиссёра. Каждый внешний запрос принимает из вложенного запроса значение ключа dir_id и возвращает названия постановок (Name):
голоса
Рейтинг статьи
Example — Single Field With Same Name
Let’s look at how to use the SQL UNION ALL operator that returns one field. In this simple example, the field in both SELECT statements will have the same name and data type.
For example:
SELECT supplier_id FROM suppliers UNION ALL SELECT supplier_id FROM orders ORDER BY supplier_id;
This SQL UNION ALL example would return the supplier_id multiple times in the result set if that same value appeared in both the suppliers and orders table. The SQL UNION ALL operator does not remove duplicates. If you wish to remove duplicates, try using the UNION operator.
Now, let’s explore this example further will some data.
If you had the suppliers table populated with the following records:
supplier_id | supplier_name |
---|---|
1000 | Microsoft |
2000 | Oracle |
3000 | Apple |
4000 | Samsung |
And the orders table populated with the following records:
order_id | order_date | supplier_id |
---|---|---|
1 | 2015-08-01 | 2000 |
2 | 2015-08-01 | 6000 |
3 | 2015-08-02 | 7000 |
4 | 2015-08-03 | 8000 |
And you executed the following UNION ALL statement:
SELECT supplier_id FROM suppliers UNION ALL SELECT supplier_id FROM orders ORDER BY supplier_id;
You would get the following results:
supplier_id |
---|
1000 |
2000 |
2000 |
3000 |
4000 |
6000 |
7000 |
8000 |
Объединение UNION и UNION ALL в SQL – описание и примеры
Пришло время поговорить об объединении данных по средствам конструкции union и union all, так как это иногда бывает очень полезно, и без использования такой конструкции бывает порой не обойтись. Примеры будем писать в СУБД MSSQL 2008, используя язык SQL.
И начать хотелось бы с того, что мы с Вами уже рассматривали много примеров написания запросов на SQL, например, оператор select языка SQL, или использование строковых функций SQL, также рассматривали программирование как на plpgsql так и на transact-sql, например, Как написать функцию на PL/pgSQL и Transact-sql – Табличные функции и временные таблицы соответственно.
Я не просто так указал вышеперечисленные статьи, а указал я их, потому, что для более лучшего понимания и усвоения сегодняшнего урока, необходимо начальные знания (это сайт для начинающих программистов), которые как раз Вы можете получить из вышеупомянутого материала.
И так приступим. И для начала давайте рассмотрим, что же это за операторы union и union all.
Примеры использования union и union all
Для начала создадим две простых таблицы test_table и test_table_2
Они одинаковые для примера, только разные названия. Я заполнил их вот такими данными:
Теперь давайте напишем запрос, который объединит результирующие данные в одни, например через union. Синтаксис очень прост:
Как Вы видите, вывелось всего 5 строк, так как у нас первая строка в первом запросе и первая строка во втором запросе одинаковые, поэтому они объединились.
Теперь давайте объединим через union all
Здесь уже вывелись все строки, так как мы указали union all.
А теперь давайте рассмотрим, какие могут быть ошибки даже в этом простом запросе. Например, мы перепутали последовательность полей:
Или мы в первом запросе указали дополнительное поле, а во втором этого не сделали.
Также, например, при использовании order by:
Здесь мы указали сортировку в каждом запросе, а нужно было только в последнем, например:
И напоследок, хотел рассказать об одной хитрости, которую можно использовать тогда когда, например, все-таки необходимо вывести в одном запросе какое-то поле, а в других его нет или просто оно не нужно, для этого можете написать вот такой запрос:
т.е. как Вы видите просто там, где должно быть поле ставить пусто и запрос отлично отработает, например:
И еще один небольшой совет, так как запросы при объединении через union довольно обширные, то лучше на их основе создать представление (Views), в случае если данный запрос Вам требуется постоянно, и уже к этому представлению обращаться каждый раз, когда требуется, а зачем нужны представления мы с Вами уже рассматривали вот здесь – Что такое представления и зачем они нужны.
Заметка! Если Вас интересует SQL и T-SQL, рекомендую пройти наши курсы по T-SQL, с помощью которых Вы «с нуля» научитесь работать с SQL и программировать с использованием языка T-SQL в Microsoft SQL Server.
Union all в Access — увеличение времени исполнения?
Есть 2 запроса Q1 и Q2 Время выполнения Q1 — 6 сек, Q2 — 4 сек
Ok, надо UNION ALL этих запросов.
SELECT * FROM Q1 UNION ALL SELECT * FROM Q2
Выполняю -> 28 сек.
Кто-нибудь может: 1. Обьяснить тупому, что происходит. 2. Подсказать пути к увеличению быстродействия.
Ошибка времени исполненияДоброго времени суток! Опираясь на.
Ошибка времени исполненияПомогите разобраться с ошибкой. Проблема только в функции create_file. Почему-то когда запускается.
Замеры времени исполнения методов
Выскакивают предупреждения и ошибка времени исполнения. Си
Разнородные структуры . Спасибо за идею — проверю.
А насчет памяти — кгм 256 метров — мало? Ну, добавлю еще 256 и проверю
Проверял я после вопроса твоего. Нормально все работало. Особенно и время то не увеличилось — 20% максимум. Наборы, правда у меня одинаковые, як близнецы-братья и тип полей у них один и тот же. Правда через АхСекс на Джете проверял. А у тебя что за движок — механизм?
Так! 2 All! Дела таковы — беру, запускаю запрос — 6 сек, прошу его сохранить данные во временную таблицу — 15 сек. 4->13 сек. => 13+15=28 — все ок. Только вот непонятно — почему 6 сек выполнения запроса перешли в 15 сек создания таблицы? (Вопрос риторический, но идеи приветствубтся)
Критерием окончания выполнения запроса служит появление цифры кол-ва записей внизу запроса.
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Объясните разницу во времени исполнения кодаДоброго времени суток. Ниже привожу 2 программы, которые отличаются лишь способом получения.
Как в Gradle отключить логирование времени исполнения ?Как в Gradle отключить логирование времени исполнения ? — очень мешает читабельности вывода. 75%.
Средство для оценки времени исполнения программыНуждаюсь в совете. Допустим есть шесть консольных программ, написанных на 3 языках (C#, C++, C). .
голоса
Рейтинг статьи
Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)
Д. Использование простого UNION
При выполнении приведенного ниже примера в результирующий набор включается содержимое столбцов таблиц и . Так как ключевое слово ALL не используется, повторяющиеся значения не включаются в результаты.
Е. Использование UNION двух инструкций SELECT с ORDER BY
Если какая-либо инструкция SELECT в инструкции UNION содержит предложение ORDER BY, это предложение должно находиться после всех инструкций SELECT. В приведенном ниже примере показаны случаи правильного и неправильного использования в двух инструкциях , в которых столбец сортируется с помощью предложения ORDER BY.
Ж. Использование UNION двух инструкций SELECT с WHERE и ORDER BY
В приведенном ниже примере показаны случаи правильного и неправильного использования в двух инструкциях , в которых требуются предложения WHERE и ORDER BY.
Difference between SQL JOIN and UNION
1.) The columns of joining tables may be different in JOIN but in UNION the number of columns and order of columns of all queries must be same.
2.) The UNION puts rows from queries after each other( puts vertically ) but JOIN puts the column from queries after each other (puts horizontally), i.e. it makes a cartesian product.
Syntax:
SELECT <column_list>t SELECT <column_list> ...]
The queries are all executed independently but their output is merged.
In the following example, no clause have been added with UNION, so, by default UNION is acting as UNION and only the unique rows are available in the result set.
Sample table: product
PROD_CODE PROD_NAME COM_NAME LIFE ---------- --------------- ---------- ---------- PR001 T.V. SONY 7 PR002 DVD PLAYER LG 9 PR003 IPOD PHILIPS 9 PR004 SOUND SYSTEM SONY 8 PR005 MOBILE NOKIA 6
Sample table: purchase
PUR_NO PROD_CODE PROD_NAME COM_NAME PUR_QTY PUR_AMOUNT ---------- ---------- --------------- ---------- ---------- ---------- 2 PR001 T.V. SONY 15 450000 1 PR003 IPOD PHILIPS 20 60000 3 PR007 LAPTOP H.P. 6 240000 4 PR005 MOBILE NOKIA 100 300000 5 PR002 DVD PLAYER LG 10 30000 6 PR006 SOUND SYSTEM CREATIVE 8 40000
SQL Code:
Relational Algebra Expression:
Relational Algebra Tree:
Output:
PROD_CODE PROD_NAME ---------- --------------- PR001 T.V. PR002 DVD PLAYER PR003 IPOD PR004 SOUND SYSTEM PR005 MOBILE PR006 SOUND SYSTEM PR007 LAPTOP
Pictorial Representation
Пример — одиночное поле с тем же именем
Давайте посмотрим, как использовать SQL оператор UNION ALL, который возвращает одно поле. В этом простом примере поле в обоих операторах SELECT будет иметь одинаковое имя и тип данных.
Например.
PgSQL
SELECT FROM UNION SELECT FROM ORDER |
Этот SQL пример UNION ALL будет возвращать supplier_id
несколько раз в наборе результатов, если это же значение появилось в таблицах suppliers
и orders
. SQL оператор UNION ALL не
удаляет дубликаты. Если вы хотите удалить дубликаты, попробуйте использовать оператор UNION.
Теперь давайте рассмотрим этот пример, далее приведем некоторые данные.
И вы выполнили следующий оператор UNION ALL.
PgSQL
SELECT supplier_id
FROM suppliers
UNION ALL
SELECT supplier_id
FROM orders
ORDER BY supplier_id;
Как видно из этого примера, UNION ALL взял все значения supplier_id
из таблицы suppliers
, а также из таблицы orders
и возвратил комбинированный набор результатов. Дубликаты не были удалены, как вы можете видеть по значению supplier_id
2000, которое дважды появляется в наборе результатов.
Frequently Asked Questions
Question: I need to compare two dates and return the count of a field based on the date values. For example, I have a date field in a table called last updated date. I have to check if trunc(last_updated_date >= trunc(sysdate-13).
Answer: Since you are using the COUNT function which is an aggregate function, we’d recommend using the Oracle UNION operator. For example, you could try the following:
SELECT a.code AS Code, a.name AS Name, COUNT(b.Ncode) FROM cdmaster a, nmmaster b WHERE a.code = b.code AND a.status = 1 AND b.status = 1 AND b.Ncode <> 'a10' AND TRUNC(last_updated_date) <= TRUNC(sysdate-13) GROUP BY a.code, a.name UNION SELECT a.code AS Code, a.name AS Name, COUNT(b.Ncode) FROM cdmaster a, nmmaster b WHERE a.code = b.code AND a.status = 1 AND b.status = 1 AND b.Ncode <> 'a10' AND TRUNC(last_updated_date) > TRUNC(sysdate-13) GROUP BY a.code, a.name;
The Oracle UNION allows you to perform a count based on one set of criteria.
TRUNC(last_updated_date) <= TRUNC(sysdate-13)
As well as perform a count based on another set of criteria.
TRUNC(last_updated_date) > TRUNC(sysdate-13)
Синтаксис применения SQL запроса UNION
Оператор UNION размещается между SQL запросами :
В представленном примере в одну кучу свалили информацию из трех таблиц, имеющих однотипные столбцы, что, конечно, неправильно, но это работает.
UNION весьма полезен в случаях, когда требуется получить консолидированную информацию, разделенную на несколько одинаковых таблиц, например рабочая и архивная таблицы. В этом случае, с использованием UNION можно извлекать данные, сгруппированные по годам и месяцам, включая и текущий период, а также получить полную информацию, связанную с определенным объектом.
UNION может быть использован совместно с оператором ALL для получения всех записей. Но необходимо отметить, что UNION ALL работает быстрее, чем просто UNION, поскольку при использовании оператора UNION проводится дополнительная фильтрация результата аналогичная SELECT DISTINCT, а при использовании UNION ALL — нет.
Синтаксис применения SQL запроса UNION
Оператор UNION размещается между SQL запросами :
В представленном примере в одну кучу свалили информацию из трех таблиц, имеющих однотипные столбцы, что, конечно, неправильно, но это работает.
UNION весьма полезен в случаях, когда требуется получить консолидированную информацию, разделенную на несколько одинаковых таблиц, например рабочая и архивная таблицы. В этом случае, с использованием UNION можно извлекать данные, сгруппированные по годам и месяцам, включая и текущий период, а также получить полную информацию, связанную с определенным объектом.
UNION может быть использован совместно с оператором ALL для получения всех записей. Но необходимо отметить, что UNION ALL работает быстрее, чем просто UNION, поскольку при использовании оператора UNION проводится дополнительная фильтрация результата аналогичная SELECT DISTINCT, а при использовании UNION ALL — нет.
Combination of SQL Union vs Union All in a Select statement
We can use SQL Union vs Union All in a Select statement. Suppose we want to perform the following activities on our sample tables.
- Result Set A= UNION between and
- Result Set= Union All between and Result Set A
In the following query, we use parentheses to perform Union between and tables. SQL Server runs the query inside parentheses and then performs Union All between result set and table.
1 |
SELECTNationalIDNumber, LoginID, JobTitle, BirthDate, MaritalStatus, Gender FROMAdventureWorks2017.HumanResources.Employee_M UNIONAll (— Parentheses SELECTNationalIDNumber, LoginID, JobTitle, BirthDate, MaritalStatus, Gender FROMAdventureWorks2017.HumanResources.Employee_F UNION SELECTNationalIDNumber, LoginID, JobTitle, BirthDate, MaritalStatus, Gender FROMAdventureWorks2017.HumanResources.Employee_All ) |
We can understand it easily with execution plan. In the following screenshot, we can see the Actual Execution plan.
Step 1: Concatenation data (SQL Union) between Employee_F and Employee_All table.
Step 2: Concatenation data (SQL Union All) between Employee_M and Step 1 output.
SQL Union All Operator Overview
The SQL Union All operator combines the result of two or more Select statement similar to a SQL Union operator with a difference. The only difference is that it does not remove any duplicate rows from the output of the Select statement.
The syntax for SQL Union All operator
1 |
SELECTcolumn1,Column2…Column(N)FROMtableA UnionAll SELECTcolumn1,Column2…Column(N)FROMtableB; |
Let us rerun the previous examples with SQL Union All operator.
1 |
SELECTID FROMTableA UNIONAll SELECTID FROMTableB; |
In the following image, you can see Output of both SQL Union vs Union All operators. SQL Union All return output of both Select statements. It does not remove any overlapping rows.
If the tables do not have any overlapping rows, SQL Union All output is similar to SQL Union operator.
1 |
SELECTNationalIDNumber, LoginID, JobTitle, BirthDate, MaritalStatus, Gender FROMAdventureWorks2017.HumanResources.Employee_M UNIONAll SELECTNationalIDNumber, LoginID, JobTitle, BirthDate, MaritalStatus, Gender FROMAdventureWorks2017.HumanResources.Employee_F |
We can see following output of SQL Union All output of Employee_M and Employee_F tables.
Now, rerun the query with three tables Employee_M and Employee_F and Employee_All tables. We got 10 records in output of SQL Union between these three tables. Each table contains 5 records. We should get 15 rows in the output of Union All operator on these tables.
1 |
SELECTNationalIDNumber, LoginID, JobTitle, BirthDate, MaritalStatus, Gender FROMAdventureWorks2017.HumanResources.Employee_M UNIONAll SELECTNationalIDNumber, LoginID, JobTitle, BirthDate, MaritalStatus, Gender SELECTNationalIDNumber, LoginID, JobTitle, BirthDate, MaritalStatus, Gender FROM AdventureWorks2017.HumanResources.Employee_All |
Пример возвращающий одно поле
Ниже приведен пример MySQL оператора UNION, который возвращает одно поле из нескольких SELECT предложений (и оба поля имеют одинаковый тип данных):
MySQL
SELECT supplier_id
FROM suppliers
UNION
SELECT supplier_id
FROM order_details;
SELECT FROM UNION SELECT FROM |
В этом примере с MySQL оператором UNION, если supplier_id
используется как в suppliers
, так и в таблице order_details
, он появится один раз в вашем результирующем наборе. MySQL оператор UNION удалит дубликаты. Если вы не хотите удалять дубликаты, попробуйте использовать MySQL оператор UNION ALL.
Как применять оператор SQL UNION для объединения результатов запросов
Оператор языка SQL UNION предназначен для объединения результирующих таблиц базы данных, полученных с применением слова SELECT. Условие объединения результирующих таблиц: совпадение числа, порядка следования и типа данных столбцов. ORDER BY следует применять к результату объединения и размещать только в конце составного запроса. Оператор UNION имеет следующий синтаксис:
В этой конструкции объединяемые запросы могут иметь условия в секции WHERE, а могут не иметь их. При помощи оператора UNION можно объединить запросы на извлечение данных как из одной таблицы, так и из разных.
При использовании оператора UNION без слова ALL результат не содержит дубликатов, а со словом ALL — содержит дубликаты.
Example — Single Field With Same Name
Let’s look at how to use the SQL UNION operator that returns one field. In this simple example, the field in both SELECT statements will have the same name and data type.
For example:
SELECT supplier_id FROM suppliers UNION SELECT supplier_id FROM orders ORDER BY supplier_id;
In this SQL UNION operator example, if a supplier_id appeared in both the suppliers and orders table, it would appear once in your result set. The UNION operator removes duplicates. If you do not wish to remove duplicates, try using the UNION ALL operator.
Now, let’s explore this example further will some data.
If you had the suppliers table populated with the following records:
supplier_id | supplier_name |
---|---|
1000 | Microsoft |
2000 | Oracle |
3000 | Apple |
4000 | Samsung |
And the orders table populated with the following records:
order_id | order_date | supplier_id |
---|---|---|
1 | 2015-08-01 | 2000 |
2 | 2015-08-01 | 6000 |
3 | 2015-08-02 | 7000 |
4 | 2015-08-03 | 8000 |
And you executed the following UNION statement:
SELECT supplier_id FROM suppliers UNION SELECT supplier_id FROM orders ORDER BY supplier_id;
You would get the following results:
supplier_id |
---|
1000 |
2000 |
3000 |
4000 |
6000 |
7000 |
8000 |
Правила применения UNION
При использовании UNION необходимо соблюдать несколько правил, регламентирующих
порядок применения оператора :
- совместимость типов данных в соответствующих столбцах запросов;
- одинаковое число столбцов во всех объединяемых запросах;
- запрет пустых значений (NULL) в любом столбце объединения;
- нельзя использовать UNION в подзапросах.
Тип столбцов нескольких запросов может не совпадать, но обязательно должен быть совместимым
путем неявного преобразования. Следует помнить, что столбцы с типом данных XML должны быть
эквивалентными, т.е. тип столбцов должен быть определен либо в XML-схеме, либо быть
нетипизированными. Типизированные столбцы должны относиться к одной и той же коллекции XML-схем.
Write Complex Queries with UNION and UNION ALL
We’ve covered the differences between and and why you might choose one or the other. With this information, you can now retrieve data from two or more tables in your database. Both and play an important role in the use of recursive queries, a more advanced topic that is covered in great detail in our Recursive Queries course.
Don’t forget to bookmark this page so you can have easy access to the explanations and examples of UNION vs. UNION ALL. Also, consider saving this page of our SQL Cookbook, which explains how to combine the results of two queries in SQL. This knowledge can take your SQL queries to the next level, helping you handle complex use cases with ease!