В чем разница между UNION
и UNION ALL
?
В чем разница между UNION и UNION ALL?
Ответ 1
UNION
удаляет дубликаты записей (где все столбцы в результатах одинаковы), UNION ALL
- нет.
При использовании UNION
вместо UNION ALL
наблюдается UNION
производительности, поскольку сервер базы данных должен выполнить дополнительную работу по удалению дублирующихся строк, но обычно вам не нужны дубликаты (особенно при разработке отчетов).
UNION Пример:
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Результат:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
UNION ALL пример:
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Результат:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
Ответ 2
Оба UNION и UNION ALL объединяют результат двух разных SQL. Они отличаются тем, как они обрабатывают дубликаты.
-
UNION выполняет DISTINCT в результирующем наборе, исключая любые повторяющиеся строки.
-
UNION ALL не удаляет дубликаты, и поэтому он быстрее, чем UNION.
Примечание. При использовании этих команд все выбранные столбцы должны быть одного типа данных.
Пример. Если у нас есть две таблицы: 1) Сотрудник и 2) Клиент
- Данные таблицы сотрудников:
- Данные таблицы клиентов:
- Пример UNION (удаляет все повторяющиеся записи):
- UNION ALL Пример (он просто объединяет записи, а не удаляет дубликаты, поэтому он быстрее, чем UNION):
Ответ 3
UNION
удаляет дубликаты, а UNION ALL
- нет.
Чтобы удалить дубликаты, набор результатов должен быть отсортирован, и это может повлиять на производительность UNION, в зависимости от объема сортируемых данных и настроек различных параметров РСУБД (для Oracle PGA_AGGREGATE_TARGET
с WORKAREA_SIZE_POLICY=AUTO
или SORT_AREA_SIZE
и SOR_AREA_RETAINED_SIZE
, если WORKAREA_SIZE_POLICY=MANUAL
).
В принципе, сортировка выполняется быстрее, если она может выполняться в памяти, но применяется одинаковую оговорку относительно объема данных.
Конечно, если вам нужны данные, возвращенные без дубликатов, вы должны использовать UNION, в зависимости от источника ваших данных.
Я бы прокомментировал первое сообщение, чтобы квалифицировать комментарий "гораздо менее результативный", но для этого недостаточно репутации (точек).
Ответ 4
В ORACLE: UNION не поддерживает типы столбцов BLOB (или CLOB), UNION ALL делает.
Ответ 5
Основное различие между UNION и UNION ALL состоит в том, что операция объединения удаляет дублированные строки из результирующего набора, но объединение всех возвращает все строки после объединения.
от http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
Ответ 6
Вы можете избежать дубликатов и работать намного быстрее, чем UNION DISTINCT (который на самом деле такой же, как UNION), выполнив такой запрос:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
Обратите внимание на часть AND a!=X
. Это намного быстрее, чем UNION.
Ответ 7
Просто чтобы добавить мои два цента к обсуждению здесь: можно понять оператор UNION
как чистый, ориентированный на SET UNION - например. множество A = {2,4,6,8}, множество B = {1,2,3,4}, A UNION B = {1,2,3,4,6,8}
При работе с наборами вы не хотите, чтобы числа 2 и 4 отображались дважды, поскольку элемент либо находится, либо не находится в наборе.
В мире SQL, однако, вы можете увидеть все элементы из двух наборов вместе в одном "мешке" {2,4,6,8,1,2,3,4}. И для этого T-SQL предлагает оператор UNION ALL
.
Ответ 8
UNION
Команда UNION
используется для выбора связанной информации из двух таблиц, подобно команде JOIN
. Однако при использовании команды UNION
все выбранные столбцы должны быть одного типа данных. С помощью UNION
выбираются только разные значения.
СОЮЗ ВСЕ
Команда UNION ALL
равна команде UNION
, за исключением того, что UNION ALL
выбирает все значения.
Разница между UNION
и UNION ALL
заключается в том, что UNION ALL
не будет удалять повторяющиеся строки, а просто вытаскивает все строки из всех таблиц, соответствующих вашим спецификациям запросов, и объединяет их в таблицу.
A UNION
эффективно выполняет SELECT DISTINCT
в наборе результатов. Если вы знаете, что все возвращенные записи уникальны из вашего объединения, вместо этого используйте UNION ALL
, это дает более быстрые результаты.
Ответ 9
Не уверен, что это важно, какая база данных
UNION
и UNION ALL
должны работать на всех серверах SQL.
Вам следует избегать ненужных UNION
, они представляют собой огромную утечку производительности. Как правило, используйте UNION ALL
, если вы не уверены, что использовать.
Ответ 10
union используется для выбора отдельных значений из двух таблиц где в качестве объединения все используются для выбора всех значений, включая дубликаты из таблиц
Ответ 11
Это хорошо понять с помощью диаграммы Венна.
вот ссылка на источник. Есть хорошее описание.
Ответ 12
СОЮЗ - результаты в разных записях
в то время как
UNION ALL - приводит ко всем записям, включая дубликаты.
Оба являются операторами блокировки, и поэтому я лично предпочитаю использовать JOINS вместо операторов блокировки (UNION, INTERSECT, UNION ALL и т.д.) В любое время.
Чтобы проиллюстрировать, почему операция Union работает плохо по сравнению с проверкой Union All, в следующем примере.
CREATE TABLE #T1 (data VARCHAR(10))
INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'
CREATE TABLE #T2 (data VARCHAR(10))
INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'
Ниже приведены результаты деятельности UNION ALL и UNION.
Оператор UNION эффективно выполняет SELECT DISTINCT для набора результатов. Если вы знаете, что все возвращенные записи уникальны для вашего объединения, используйте UNION ALL вместо этого, это даст более быстрые результаты.
Использование UNION приводит к различным операциям сортировки в плане выполнения. Доказательство, чтобы доказать это утверждение показано ниже:
Ответ 13
(из Microsoft SQL Server Book Online)
СОЮЗ [ВСЕ]
Указывает, что несколько наборов результатов должны быть объединены и возвращены как единый результирующий набор.
ВСЕ
Включает все строки в результаты. Это включает в себя дубликаты. Если не указано, удаляются повторяющиеся строки.
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)
, примененные к результатам. Вы можете увидеть этот побочный эффект, если у вас нет дублирующейся строки.
Ответ 14
Я добавляю пример,
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;
Ответ 15
UNION
объединяет содержимое двух структурно-совместимых таблиц в одну объединенную таблицу.
- Разница:
Разница между UNION
и UNION ALL
заключается в том, что UNION will
опустить дубликаты записей, тогда как UNION ALL
будет включать в себя дубликаты записей.
UNION
Набор результатов сортируется в порядке возрастания, тогда как UNION ALL
Набор результатов не сортируется
UNION
выполняет DISTINCT
в своем наборе результатов, чтобы исключить любые повторяющиеся строки. В то время как UNION ALL
не удаляет дубликаты и, следовательно, быстрее, чем UNION
. *
Примечание. Производительность UNION ALL
обычно будет лучше, чем UNION
, так как UNION
требует, чтобы сервер выполнял дополнительную работу по удалению любых дубликатов. Таким образом, в тех случаях, когда есть уверенность, что дубликатов не будет, или где дублирование не является проблемой, использование UNION ALL
рекомендуется по соображениям производительности.
Ответ 16
Предположим, что у вас есть две таблицы Учитель и Студент
Оба имеют 4 столбца с другим именем, как этот
Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))
Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)
Вы можете использовать UNION или UNION ALL для этих двух таблиц, которые имеют одинаковое количество столбцов. Но они имеют другое имя или тип данных.
Когда вы применяете операцию UNION
в двух таблицах, она игнорирует все повторяющиеся записи (все значения столбца строки в таблице одинаковы для другой таблицы). Как этот
SELECT * FROM Student
UNION
SELECT * FROM Teacher
результат будет
Когда вы применяете операцию UNION ALL
на 2 таблицы, она возвращает все записи с дубликатом (если есть какая-либо разница между любым значением столбца строки в 2 таблицах). Как этот
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
Производительность:
Очевидно, что производительность UNION ALL лучше UNION, поскольку они выполняют дополнительную задачу для удаления повторяющихся значений. Вы можете проверить, что из Предполагаемое время выполнения нажмите ctrl + L в MSSQL
Ответ 17
Еще одна вещь, которую я хотел бы добавить -
Союз: - Набор результатов сортируется в порядке возрастания.
Союз Все: - Набор результатов не отсортирован. два вывода запроса просто добавляются.
Ответ 18
Проще говоря, разница между UNION и UNION ALL заключается в том, что UNION будет пропускать дубликаты записей, тогда как UNION ALL будет включать дубликаты записей.
Ответ 19
Разница между Союзом против Союза ВСЕМИ в 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
Ответ 20
Важный! Разница между 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 будут повторяться строки!
Ответ 21
UNION и UNION ALL используются для объединения двух или более результатов запроса.
Команда UNION выбирает отдельную и связанную информацию из двух таблиц, которая устраняет повторяющиеся строки.
С другой стороны, команда UNION ALL выбирает все значения из обеих таблиц, в которых отображаются все строки.
Ответ 22
UNION удаляет повторяющиеся записи в другой руке UNION ALL. Но нужно проверить большую часть данных, которые будут обрабатываться, и тип столбца и данных должен быть таким же.
так как объединение внутренне использует "отличное" поведение для выбора строк, следовательно, это более дорогостоящее с точки зрения времени и производительности. как
select project_id from t_project
union
select project_id from t_project_contact
это дает мне записи за 2020 год
с другой стороны
select project_id from t_project
union all
select project_id from t_project_contact
дает мне более 17402 строк
в приоритетной перспективе оба имеют одинаковый приоритет.
Ответ 23
Если нет ORDER BY
, a UNION ALL
может возвращать строки по мере их появления, тогда как UNION
заставит вас подождать до самого конца запроса, прежде чем дать вам весь набор результатов сразу. Это может повлиять на ситуацию тайм-аута - a UNION ALL
поддерживает соединение как бы.
Итак, если у вас есть проблема с тайм-аутом, и нет сортировки, а дубликаты не являются проблемой, UNION ALL
может быть весьма полезной.
Ответ 24
As a habit, Всегда используйте UNION ALL. Используйте только UNION в особых случаях, когда вам нужно устранить дубликаты, которые могут быть очень запутанными, и вы можете прочитать все об этом в других комментариях здесь.
Ответ 25
UNION ALL
также работает с другими типами данных. Например, при попытке объединения пространственных типов данных. Например:
select a.SHAPE from tableA a
union
select b.SHAPE from tableB b
бросит
The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.
Однако union all
не будет.
Ответ 26
Единственное отличие:
"UNION" удаляет повторяющиеся строки.
"UNION ALL" не удаляет повторяющиеся строки.