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

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

вопрос задан 8.09.2008
Brian G
19924 репутация

22 ответов


  • 0 рейтинг

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

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

    ответ дан AjV Jsy, с репутацией 3587, 3.03.2016
  • 0 рейтинг

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

    от http: // zengin. WordPress. com / 2007/07/31 / union-vs-union-all /

    ответ дан George Mauer, с репутацией 47265, 8.09.2008
  • 0 рейтинг

    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)
    
    ответ дан Jim Harte, с репутацией 2270, 8.09.2008
  • 0 рейтинг

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

    ответ дан Michiel Overeem, с репутацией 2614, 8.09.2008
  • 0 рейтинг

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

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

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

    ответ дан Ihor Vorotnov, с репутацией 1035, 13.08.2012
  • 0 рейтинг

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

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

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

    ответ дан Jakub Šturc, с репутацией 20835, 8.09.2008
  • 0 рейтинг

    Просто добавьте мои два цента к обсуждению здесь: можно было бы понять оператор UNION как чистый, SET-ориентированный UNION - e. г. набор A = {2,4,6,8}, набор 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.

    ответ дан Peter Perháč, с репутацией 13910, 6.06.2013
  • 0 рейтинг

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

    ответ дан shA.t, с репутацией 12536, 12.04.2015
  • 0 рейтинг

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

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

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

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

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

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

    enter image description here

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

    enter image description here

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

    enter image description here

    1. Пример UNION ALL (он просто объединяет записи, а не удаляет дубликаты, поэтому он быстрее, чем UNION):

    enter image description here

    ответ дан Bhaumik Patel, с репутацией 9769, 14.10.2012
  • 0 рейтинг

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

    Union : - Набор результатов отсортирован в порядке возрастания.

    Union All : - Набор результатов не отсортирован. вывод двух запросов просто добавляется.

    ответ дан Rahul Sawant, с репутацией 371, 30.05.2015
  • 0 рейтинг

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

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

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

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

    ответ дан DotNetGuy, с репутацией 136, 16.08.2012
  • 0 рейтинг

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

    ответ дан mathewbutler, с репутацией 829, 15.06.2009
  • 0 рейтинг

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

    Чтобы удалить дубликаты, набор результатов должен быть отсортирован, и этот может повлиять на производительность UNION, в зависимости от объема сортируемых данных и настроек различных параметров RDBMS (для Oracle PGA_AGGREGATE_TARGET с WORKAREA_SIZE_POLICY=AUTO или SORT_AREA_SIZE и SOR_AREA_RETAINED_SIZE, если WORKAREA_SIZE_POLICY=MANUAL).

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

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

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

    ответ дан mathewbutler, с репутацией 829, 18.09.2008
  • 0 рейтинг

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

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

    ответ дан Pawan Kumar, с репутацией 81, 22.01.2014
  • 0 рейтинг

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

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

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

    ответ дан Sona, с репутацией 563, 16.11.2012