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

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

Комментарии к вопросу (2)
Решение

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

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

Пример #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)
Комментарии (13)

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

  • Союз выполняет отдельную на результирующий набор, устраняя любые повторяющиеся строки.

  • Союз все не удалить дубликаты, и поэтому он быстрее, чем союз.

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

Пример: если мы имеем две таблицы: 1) Работник и 2) заказчик

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

  1. Данные таблицы Customer:

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

  1. Все пример союза (это просто конкатенация записей, не исключает дубликаты, так что это быстрее, чем союз):

Комментарии (1)

Союз удаляет дубликаты, а Союз все не.

Для того, чтобы удалить дубликаты результирующий набор должен быть отсортирован, и это может повлиять на работу союза, в зависимости от объема данных, отсортированы, и настройки различных параметров СУБД ( для Oracle значение параметра pga_aggregate_target с WORKAREA_SIZE_POLICY=автоматический " или "SORT_AREA_SIZE" и " SOR_AREA_RETAINED_SIZE если WORKAREA_SIZE_POLICY=Manual в ).

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

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

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

Комментарии (2)

В Oracle: союз не поддерживает BLOB-объектов (или CLOB) типы столбцов, Союз все делает.

Комментарии (0)

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

из http://zengin.wordpress.com/2007/07/31/union-vs-union-all/

Комментарии (0)

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

Выбрать * из mytable, где а=Х объединить все выбрать * из mytable, где б=г и!=Х

Обратите внимание на "и"!=Х часть. Это гораздо быстрее, чем союз.

Комментарии (2)

Просто чтобы добавить свои пять копеек в обсуждение: можно было бы понять оператора Союз как чистый, набор ориентированных на союз - например, множество а={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}. И для этой цели Т-SQL предлагает союз оператора "все".

Комментарии (2)

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

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

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

Заявление союза эффективно работаетвыберите заметной на набор результатов. Если вы знаете, что все возвращенные записи имеют уникальный код Союз, используйте союз вместо этого, он дает более быстрые результаты.

Комментарии (0)

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

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

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

Комментарии (4)

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

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

Комментарии (1)

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

Комментарии (0)

Союз - результаты в уникальный записи <БР><БР> а <БР><БР> Весь Союз - результаты во всех записях, включая дубликаты.

Как блокируют операторов, и поэтому я лично предпочитаю использовать соединения блокирующих операторы(объединение, пересечение, объединение и т. д. Все. ) в любое время.

Чтобы проиллюстрировать, почему операции Union выполняет слабо в сравнении с Союзом все в следующем примере кассе.

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'

Ниже приведены результаты Союза и союзных операций.

*Заявление союза эффективно ли выбирать разные по результатам набора. Если вы знаете, что все возвращенные записи имеют уникальный код Союз, используйте Союза все вместе это дает более быстрые результаты.**

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

Комментарии (4)

(От Майкрософт SQL сервер книга онлайн)

СОЮЗ [ВСЕ]

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

Все

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

"Союз" займет слишком много времени, как повторяющиеся строки поиска как отдельными вводится по итогам.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

это эквивалентно:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

и GT; побочный эффект от применения четкая за результатов является сортировочные работы на результаты.

Результаты Союза все будет показано как заказ arbitrary на результаты, но результаты союз будет отображаться как порядок по 1, 2, 3, ..., N (где n = количество столбцов таблиц) применяется на результаты. Вы можете увидеть этот побочный эффект, когда вы Don'Т есть какие-либо повторяющиеся строки.

Комментарии (0)

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

Союз, это слияние с отчетливыми --> медленнее, потому что нужно сравнивать (в Oracle SQL разработчик, выбрать запрос, нажмите клавишу 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;
Комментарии (0)

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

Оба столбец 4 с другим именем такой

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

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

Когда вы примените операцию "Союз" на 2 стола, она пренебрегает все повторяющиеся записи(все значения столбцов строк в таблице-это же из другой таблицы). Такой

SELECT * FROM Student
UNION
SELECT * FROM Teacher

результат будет

Когда вы подаете заявление Союза все работы на 2 стола, он возвращает все записи с дубликатами(если есть какая-то разница между любым значением столбца в строке 2 таблицы). Такой

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

Выход

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

Очевидно, что союз производительность лучше, что союз как они это делают дополнительное задание, чтобы удалить повторяющиеся значения. Вы можете увидеть, что с Выполнение расчетного времени нажмите нажмите Ctrl+л в ошибка

Комментарии (1)

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

  • Разница:

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

Союза результирующий набор сортируется в порядке возрастания Союза, в то время как все результирующий набор не отсортирован

Союз выполняет четкая на результирующий набор, так он устранит любые повторяющиеся строки. В то время как союз всех выиграл'т удалить дубликаты и поэтому это быстрее, чем "союз".*

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

Комментарии (2)

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

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

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

Комментарии (3)

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

Комментарии (0)

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

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

Комментарии (0)

Важно! Разница между Oracle и MySQL: позвольте'ы сказать, что Т1 Т2 Дон'т иметь повторяющиеся строки между ними, но у них есть повторяющиеся строки человека. Пример: Т1 и Т2 продажи от 2017 с 2018 года

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

В Союзе Oracle все выбирает все строки из обеих таблиц. То же самое будет происходить в MySQL.

Правда:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

В оракул, Союз выбирает все строки из обеих таблиц, потому что нет повторяющихся значений между Т1 и Т2. С другой стороны в СУБД MySQL результирующий набор будет иметь меньше строк, потому что не будет повторяющихся строк в таблице T1 и таблица T2!

Комментарии (0)