В чем разница между Союзом и Союзом все?


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

22 1146

22 ответа:

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)

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

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

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

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

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

  1. данные таблицы employee:

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 оператор как чистое, ориентированное на множество объединение-например, set A={2,4,6,8}, set 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.

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

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

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

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

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

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

объединение-приводит к distinct записи

пока

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

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

чтобы проиллюстрировать, почему операция объединения выполняется плохо по сравнению с Union All checkout, выполните следующие действия образец.

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 вместо этого, это дает более быстрые результаты.

использование результатов объединения в Distinct Sort операции в плане выполнения. Доказательство для доказательства этого утверждения показано ниже:

enter image description here

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

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

Это хорошо, чтобы понять с диаграммой Венна.

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

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 или 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

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

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

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

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, a UNION ALL может вернуть строки, как это происходит, в то время как A UNION заставит вас ждать до самого конца запроса, прежде чем дать вам весь результирующий набор сразу. Это может изменить ситуацию с тайм-аутом-a UNION ALL сохраняет связь живой,как это было.

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

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

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

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

разница между Union Vs Union ALL в Sql

что такое Union в 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

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