В чем разница между Союзом и Союзом все?
в чем разница между UNION
и UNION ALL
?
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) Клиент
- данные таблицы employee:
- табличные данные клиента:
- пример объединения (он удаляет все повторяющиеся записи):
- пример объединения всех (он просто объединяет записи, а не устраняет дубликаты, поэтому он быстрее, чем Союз):
UNION
удаляет дубликаты, тогда какUNION ALL
нет.для удаления дубликатов результирующий набор должен быть отсортирован, и это мая оказывают влияние на производительность объединения, в зависимости от объема сортируемых данных, а также настроек различных параметров РСУБД ( для Oracle
PGA_AGGREGATE_TARGET
СWORKAREA_SIZE_POLICY=AUTO
илиSORT_AREA_SIZE
иSOR_AREA_RETAINED_SIZE
еслиWORKAREA_SIZE_POLICY=MANUAL
).в принципе, сортировка быстрее, если она может быть выполнена в памяти, но та же оговорка о применяется объем данных.
конечно, если вам нужны данные, возвращенные без дубликатов, то вы должны используйте UNION, в зависимости от источника ваших данных.
Я бы прокомментировал первый пост, чтобы квалифицировать" гораздо менее эффективный " комментарий, но у него недостаточно репутации (очков) для этого.
основное различие между 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'
Ниже приведены результаты работы UNION ALL и UNION.
оператор UNION эффективно выполняет Select DISTINCT в наборе результатов. Если вы знаете, что все возвращенные записи уникальны из вашего объединения, используйте UNION ALL вместо этого, это дает более быстрые результаты.
использование результатов объединения в Distinct Sort операции в плане выполнения. Доказательство для доказательства этого утверждения показано ниже:
объединение используется для выбора различных значений из двух таблиц где в качестве объединения Все используется для выбора всех значений, включая дубликаты из таблиц
(из 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)
применяется на результаты. Вы можете увидеть этот побочный эффект, когда у вас нет дубликатов строк.
Это хорошо, чтобы понять с диаграммой Венна.
здесь ссылке на источник. Есть хорошее описание.
добавлю пример
Союз, он сливается с 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))
Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)
вы можете применить UNION или UNION ALL для тех двух таблиц, которые имеют одинаковое количество столбцов. Но они имеют другое имя или тип данных.
когда применять
UNION
операция над 2 таблицами, она пренебрегает всеми повторяющимися записями (все столбцы значение строки в таблице такое же, как и в другой таблице). Вот такSELECT * FROM Student UNION SELECT * FROM Teacher
результат будет
когда применять
UNION ALL
операция над 2 таблицами, она возвращает все записи с дубликатом (если есть какая-либо разница между любым значением столбца строки в 2 таблицах). Как этоSELECT * FROM Student UNION ALL SELECT * FROM Teacher
производительность:
очевидно ОБЪЕДИНЕНИЕ ВСЕХ производительность лучше, что Союз как они делают дополнительную задачу, чтобы удалить повторяющиеся значения. Вы можете проверить это от Расчетное Время Выполнения пресс 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
, aUNION ALL
может вернуть строки, как это происходит, в то время как AUNION
заставит вас ждать до самого конца запроса, прежде чем дать вам весь результирующий набор сразу. Это может изменить ситуацию с тайм-аутом-aUNION 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