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

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

+1170
08 сент. '08 в 15:19
источник поделиться
23 ответа

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)
+1449
08 сент. '08 в 15:21
источник

Оба UNION и UNION ALL объединяют результат двух разных SQL. Они отличаются тем, как они обрабатывают дубликаты.

  • UNION выполняет DISTINCT в результирующем наборе, исключая любые повторяющиеся строки.

  • UNION ALL не удаляет дубликаты, и поэтому он быстрее, чем UNION.

Примечание. При использовании этих команд все выбранные столбцы должны быть одного типа данных.

Пример. Если у нас есть две таблицы: 1) Сотрудник и 2) Клиент

  • Данные таблицы сотрудников:

enter image description here

  1. Данные таблицы клиентов:

enter image description here

  1. Пример UNION (удаляет все повторяющиеся записи):

enter image description here

  1. UNION ALL Пример (он просто объединяет записи, а не удаляет дубликаты, поэтому он быстрее, чем UNION):

enter image description here

+245
14 окт. '12 в 16:09
источник

UNION удаляет дубликаты, а UNION ALL - нет.

Чтобы удалить дубликаты, набор результатов должен быть отсортирован, и это может повлиять на производительность UNION, в зависимости от объема сортируемых данных и настроек различных параметров РСУБД (для Oracle PGA_AGGREGATE_TARGET с WORKAREA_SIZE_POLICY=AUTO или SORT_AREA_SIZE и SOR_AREA_RETAINED_SIZE, если WORKAREA_SIZE_POLICY=MANUAL).

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

Конечно, если вам нужны данные, возвращенные без дубликатов, вы должны использовать UNION, в зависимости от источника ваших данных.

Я бы прокомментировал первое сообщение, чтобы квалифицировать комментарий "гораздо менее результативный", но для этого недостаточно репутации (точек).

+42
18 сент. '08 в 12:34
источник

В ORACLE: UNION не поддерживает типы столбцов BLOB (или CLOB), UNION ALL делает.

+27
08 сент. '08 в 17:10
источник

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

от http://zengin.wordpress.com/2007/07/31/union-vs-union-all/

+18
08 сент. '08 в 15:20
источник

Вы можете избежать дубликатов и работать намного быстрее, чем UNION DISTINCT (который на самом деле такой же, как UNION), выполнив такой запрос:

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

Обратите внимание на часть AND a!=X. Это намного быстрее, чем UNION.

+12
13 авг. '12 в 0:03
источник

Просто чтобы добавить мои два цента к обсуждению здесь: можно понять оператор 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.

+11
06 июн. '13 в 9:55
источник

UNION
Команда UNION используется для выбора связанной информации из двух таблиц, подобно команде JOIN. Однако при использовании команды UNION все выбранные столбцы должны быть одного типа данных. С помощью UNION выбираются только разные значения.

СОЮЗ ВСЕ
Команда UNION ALL равна команде UNION, за исключением того, что UNION ALL выбирает все значения.

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

Оператор

A UNION эффективно выполняет SELECT DISTINCT в наборе результатов. Если вы знаете, что все возвращенные записи уникальны из вашего объединения, вместо этого используйте UNION ALL, это дает более быстрые результаты.

+9
16 авг. '12 в 16:50
источник

СОЮЗ - результаты в разных записях

в то время как

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'

enter image description here

Ниже приведены результаты деятельности UNION ALL и UNION.

enter image description here

Оператор UNION эффективно выполняет SELECT DISTINCT для набора результатов. Если вы знаете, что все возвращенные записи уникальны для вашего объединения, используйте UNION ALL вместо этого, это даст более быстрые результаты.

Использование UNION приводит к различным операциям сортировки в плане выполнения. Доказательство, чтобы доказать это утверждение показано ниже:

enter image description here

+6
21 июн. '16 в 17:24
источник

Не уверен, что это важно, какая база данных

UNION и UNION ALL должны работать на всех серверах SQL.

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

+6
08 сент. '08 в 15:43
источник

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

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

enter image description here

+5
17 мая '16 в 5:59
источник

(из 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), примененные к результатам. Вы можете увидеть этот побочный эффект, если у вас нет дублирующейся строки.

+5
12 апр. '15 в 8:34
источник

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

+5
15 июн. '09 в 10:42
источник

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

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;
+3
27 апр. '17 в 4:35
источник

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

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

Союз Все: - Набор результатов не отсортирован. два вывода запроса просто добавляются.

+2
30 мая '15 в 8:55
источник

Предположим, что у вас есть две таблицы Учитель и Студент

Оба имеют 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

+2
07 июн. '16 в 7:03
источник

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

  • Разница:

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

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

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

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

+2
17 мая '16 в 5:39
источник

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

+1
25 мар. '18 в 16:01
источник

Разница между Союзом против Союза ВСЕМИ в 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

Союз против Союза Все с примером

+1
15 июн. '18 в 12:18
источник

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 строк

в приоритетной перспективе оба имеют одинаковый приоритет.

0
22 янв. '14 в 6:02
источник

Важный! Разница между 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 будут повторяться строки!

0
11 дек. '18 в 9:39
источник

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

Команда UNION выбирает отдельную и связанную информацию из двух таблиц, которая устраняет повторяющиеся строки.

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

0
16 нояб. '12 в 6:29
источник

Если нет ORDER BY, a UNION ALL может возвращать строки по мере их появления, тогда как UNION заставит вас подождать до самого конца запроса, прежде чем дать вам весь набор результатов сразу. Это может повлиять на ситуацию тайм-аута - a UNION ALL поддерживает соединение как бы.

Итак, если у вас есть проблема с тайм-аутом, и нет сортировки, а дубликаты не являются проблемой, UNION ALL может быть весьма полезной.

0
03 мар. '16 в 12:38
источник

Посмотрите другие вопросы по меткам или Задайте вопрос