В чем разница между UNION и UNION ALL? - PullRequest
1272 голосов
/ 08 сентября 2008

В чем разница между UNION и UNION ALL?

Ответы [ 24 ]

6 голосов
/ 15 июня 2009

объединение используется для выбора различных значений из двух таблиц где в качестве объединения все используются для выбора всех значений, включая дубликаты из таблиц

5 голосов
/ 12 апреля 2015

(из электронной книги по Microsoft SQL Server)

СОЮЗ [ВСЕ]

Указывает, что несколько наборов результатов должны быть объединены и возвращены как один набор результатов.

ALL

Включает все строки в результаты. Это включает в себя дубликаты. Если не указано, удаляются повторяющиеся строки.

UNION займет слишком много времени, так как к результатам будет применен поиск повторяющихся строк, например DISTINCT.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

эквивалентно:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

Побочным эффектом применения DISTINCT к результатам является операция сортировки для результатов.

UNION ALL результаты будут отображаться как произвольный порядок для результатов Но UNION результаты будут отображаться как ORDER BY 1, 2, 3, ..., n (n = column number of Tables) для результатов. Вы можете увидеть этот побочный эффект, когда у вас нет повторяющейся строки.

5 голосов
/ 27 апреля 2017

Я добавляю пример,

UNION , он сливается с отличным -> медленнее, потому что его нужно сравнивать (В Oracle SQL developer, выберите запрос, нажмите F10, чтобы увидеть анализ затрат).

UNION ALL , оно сливается без четких -> быстрее.

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

и

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
5 голосов
/ 17 мая 2016

Это хорошо понять с помощью диаграммы Венна.

здесь ссылка на источник. Есть хорошее описание.

enter image description here

2 голосов
/ 07 июня 2016

Предположим, у вас есть два стола Учитель & Ученик

Оба имеют 4 столбца с разными именами , как это

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

enter image description here

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

enter image description here

Вы можете применить UNION или UNION ALL для тех двух таблиц, которые имеют одинаковое количество столбцов. Но у них другое имя или тип данных.

Когда вы применяете операцию UNION к 2 таблицам, она игнорирует все повторяющиеся записи (значение всех столбцов строки в таблице совпадает со значением другой таблицы). Как это

SELECT * FROM Student
UNION
SELECT * FROM Teacher

результат будет

enter image description here

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

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

выход enter image description here

Производительность:

Очевидно, что производительность UNION ALL лучше, чем UNION , поскольку они выполняют дополнительную задачу по удалению дублирующихся значений. Вы можете проверить это в Расчетное время выполнения , нажав ctrl + L в MSSQL

2 голосов
/ 17 мая 2016

UNION объединяет содержимое двух структурно-совместимых таблиц в одну объединенную таблицу.

  • Разница:

Разница между UNION и UNION ALL заключается в том, что UNION will пропускает повторяющиеся записи, тогда как UNION ALL будет включать повторяющиеся записи.

Union Набор результатов сортируется в порядке возрастания, тогда как UNION ALL Набор результатов не сортируется

UNION выполняет DISTINCT в своем Результирующем наборе, поэтому он удалит все дублирующиеся строки. Принимая во внимание, что UNION ALL не удаляет дубликаты, и поэтому он быстрее, чем UNION. *

Примечание : Производительность UNION ALL обычно выше, чем UNION, поскольку UNION требует, чтобы сервер выполнил дополнительную работу по удалению любых дубликаты. Таким образом, в случаях, когда есть уверенность, что дубликатов не будет, или если наличие дубликатов не является проблемой, рекомендуется использовать UNION ALL по соображениям производительности.

1 голос
/ 11 декабря 2018

Внимание! Разница между Oracle и Mysql: допустим, что t1 t2 не имеют дублирующихся строк между ними, но имеют одинаковые строки отдельно. Пример: t1 имеет продажи с 2017 года и t2 с 2018

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

В ORACLE UNION ALL извлекает все строки из обеих таблиц. То же самое произойдет в MySQL.

Однако:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

В ORACLE UNION извлекает все строки из обеих таблиц, поскольку между t1 и t2 нет повторяющихся значений. С другой стороны, в MySQL в наборе результатов будет меньше строк, так как в таблице t1, а также в таблице t2 будут дублироваться строки!

1 голос
/ 15 июня 2018

Разница между Союзом и Союзом ВСЕ В Sql

Что такое объединение в SQL?

Оператор UNION используется для объединения результирующего набора из двух или более наборов данных.

Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order

Union Vs Union All с примером

1 голос
/ 25 марта 2018

Проще говоря, разница между UNION и UNION ALL заключается в том, что UNION будет пропускать дубликаты записей, тогда как UNION ALL будет включать дубликаты записей.

1 голос
/ 30 мая 2015

Еще одна вещь, которую я хотел бы добавить-

Объединение : - Набор результатов отсортирован в порядке возрастания.

Объединение всех : - Набор результатов не отсортирован. вывод двух запросов просто добавляется.

...