В чем разница между Союзом и Союзом все?
в чем разница между 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.вы должны избегать ненужных
UNIONs они огромная утечка производительности. Как правило, используйте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











