Вопрос

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

Это было полезно?

Решение

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

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

Пример ОБЪЕДИНЕНИЯ:

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

Результат:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

Пример ОБЪЕДИНЕНИЯ ВСЕХ:

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

Результат:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

Другие советы

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

  • ОБЪЕДИНЕНИЕ выполняет РАЗЛИЧИЕ в результирующем наборе, устраняя все повторяющиеся строки.

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

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

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

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

enter image description here

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

enter image description here

  1. Пример ОБЪЕДИНЕНИЯ (удаляет все дублирующиеся записи):

enter image description here

  1. Пример ОБЪЕДИНЕНИЯ ВСЕХ (он просто объединяет записи, а не устраняет дубликаты, поэтому это быстрее, чем ОБЪЕДИНЕНИЕ):

enter image description here

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

Чтобы удалить дубликаты, результирующий набор должен быть отсортирован, и это мочь оказывают влияние на производительность ОБЪЕДИНЕНИЯ в зависимости от объема сортируемых данных и настроек различных параметров СУБД (для Oracle PGA_AGGREGATE_TARGET с WORKAREA_SIZE_POLICY=AUTO или SORT_AREA_SIZE и SOR_AREA_RETAINED_SIZE если WORKAREA_SIZE_POLICY=MANUAL ).

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

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

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

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

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

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

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

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

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

Просто добавлю свои два цента к обсуждению здесь:можно было бы понять, что UNION оператор как чистое ОБЪЕДИНЕНИЕ, ориентированное на МНОЖЕСТВО - напримермножество A={2,4,6,8}, множество B={1,2,3,4}, ОБЪЕДИНЕНИЕ B = {1,2,3,4,6,8}

При работе с наборами вы бы не хотели, чтобы числа 2 и 4 появлялись дважды, также как элемент является или это не так в наборе.

Однако в мире SQL вы можете захотеть видеть все элементы из двух наборов вместе в одном "пакете" {2,4,6,8,1,2,3,4}.И для этой цели T-SQL предлагает оператор UNION ALL.

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

ОБЪЕДИНЕНИЕ ВСЕХ
Тот Самый UNION ALL команда равна UNION команда, за исключением того, что UNION ALL выбирает все значения.

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

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

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

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

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

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

ОБЪЕДИНЕНИЕ - приводит к отчетливый записи

в то время как

ОБЪЕДИНИТЬ ВСЕ - приводит ко всем записям, включая дубликаты.

Оба являются блокирующими операторами, и поэтому я лично предпочитаю использовать ОБЪЕДИНЕНИЯ, а не блокирующие операторы (UNION, INTERSECT, UNION ALL и т.д.) в любое время.

Чтобы проиллюстрировать, почему операция объединения работает плохо по сравнению с проверкой 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 operations.

enter image description here

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

Использование ОБЪЕДИНЕНИЯ приводит к Отличный Сорт операции в Плане выполнения.Доказательство этого утверждения приведено ниже:

enter image description here

(Из онлайн-книги по Microsoft SQL Server)

СОЮЗ [ВСЕХ]

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

ВСЕ

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

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

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

вот этот Ссылка к источнику.Там есть хорошее описание.

enter image description here

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

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

ОБЪЕДИНЕНИЕ ВСЕХ, это слияние без distinct --> быстрее.

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;

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

  • Разница:

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

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

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

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

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

У обоих есть 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 операция над 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

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

Очевидно ОБЪЕДИНЕНИЕ ВСЕХ производительность лучше, чем СОЮЗ поскольку они выполняют дополнительную задачу по удалению повторяющихся значений.Вы можете проверить это на сайте Расчетное время выполнения с помощью прессы ctrl+L в MSSQL

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

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

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

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

Разница между Union и Union ALL В Sql

Что такое Union В SQL?

Оператор ОБЪЕДИНЕНИЯ используется для объединения результирующего набора из двух или более наборов данных.

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

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

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

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

поскольку union внутренне использует "отличное" поведение для выбора строк, следовательно, это более затратно с точки зрения времени и производительности.Нравится

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

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

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

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

ОБЪЕДИНЕНИЕ и UNION - ВСЕ они используются для объединения двух или более результатов запроса.

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

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

Единственное отличие заключается в том, что :

"ОБЪЕДИНЕНИЕ" удаляет дублирующиеся строки.

"ОБЪЕДИНИТЬ ВСЕ" не удаляет повторяющиеся строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top