UNIONудаляет дубликаты записей (где все столбцы в результатах одинаковы), UNION ALLнет.
При использовании UNIONвместо этого происходит снижение производительности UNION ALL, поскольку сервер базы данных должен выполнить дополнительную работу по удалению дублирующихся строк, но обычно вам не нужны дубликаты (особенно при разработке отчетов).
UNION Пример:
SELECT'foo'AS bar UNIONSELECT'foo'AS bar
Результат:
+-----+| bar |+-----+| foo |+-----+1rowinset(0.00 sec)
UNION ALL пример:
SELECT'foo'AS bar UNIONALLSELECT'foo'AS bar
Результат:
+-----+| bar |+-----+| foo || foo |+-----+2rowsinset(0.00 sec)
Следствием этого является то, что объединение гораздо менее производительно, поскольку оно должно сканировать результаты на наличие дубликатов
Мэтью Уотсон,
19
UNION ALL действительно будет более производительным, особенно из-за отсутствия четкой сортировки. Моя общая практика состоит в том, чтобы использовать UNION ALL, если я специально не хочу дубликатов.
Адам Кэвнесс
6
Просто заметил, что здесь много хороших комментариев / ответов, поэтому я включил флаг вики и добавил заметку о производительности ...
Джим Харт
250
UNION ALL может работать медленнее, чем UNION, в реальных случаях, когда сеть, такая как Интернет, является узким местом. Стоимость передачи множества повторяющихся строк может превысить выигрыш во времени выполнения запроса. Это должно быть проанализировано в каждом конкретном случае.
Чарльз Бернс
23
@AdamCaviness Ваш комментарий не совсем имеет смысла.
kojow7
285
И UNION, и UNION ALL объединяют результат двух разных SQL. Они отличаются тем, как они обрабатывают дубликаты.
UNION выполняет DISTINCT для набора результатов, устраняя любые дублирующиеся строки.
UNION ALL не удаляет дубликаты, поэтому он работает быстрее, чем UNION.
Примечание. При использовании этой команды все выбранные столбцы должны быть одного типа данных.
Пример: если у нас есть две таблицы: 1) сотрудник и 2) клиент
Данные таблицы сотрудников:
Данные таблицы клиента:
Пример UNION (удаляет все дубликаты записей):
Пример UNION ALL (он просто объединяет записи, а не удаляет дубликаты, поэтому он работает быстрее, чем UNION):
«все выбранные столбцы должны быть одного типа данных» - на самом деле, все не так уж строго (не очень хорошая вещь с точки зрения реляционной модели!). Стандарт SQL говорит, что их соответствующий дескриптор столбца должен быть таким же, за исключением имени.
понедельник,
47
UNIONудаляет дубликаты, а UNION ALLне удаляет .
Чтобы удалить дубликаты, результирующий набор должен быть отсортирован, и это может повлиять на производительность UNION в зависимости от объема сортируемых данных и настроек различных параметров СУБД (для Oracle PGA_AGGREGATE_TARGETс WORKAREA_SIZE_POLICY=AUTOили SORT_AREA_SIZEи SOR_AREA_RETAINED_SIZEесли WORKAREA_SIZE_POLICY=MANUAL).
По сути, сортировка выполняется быстрее, если она может быть выполнена в памяти, но применяется то же предостережение относительно объема данных.
Конечно, если вам нужны данные, возвращенные без дубликатов, вы должны использовать UNION, в зависимости от источника ваших данных.
Я бы прокомментировал первый пост, чтобы квалифицировать комментарий «гораздо менее эффективный», но у меня недостаточно репутации (баллов) для этого.
«Чтобы удалить дубликаты, набор результатов должен быть отсортирован» - возможно, вы имеете в виду конкретного поставщика, но в вопросе нет специфических для него тегов. Даже если бы было, могли бы вы доказать, что дубликаты не могут быть удалены без сортировки?
понедельник,
2
Different будет «неявно» сортировать результаты, потому что удаление сортировки происходит быстрее в отсортированном наборе. это не означает, что возвращенный набор результатов фактически сортируется таким образом, но в большинстве случаев различные (и, следовательно, UNION) будут внутренне сортировать набор результатов.
DevilSuichiro
30
В ORACLE: UNION не поддерживает типы столбцов BLOB (или CLOB), UNION ALL поддерживает.
Основное различие между UNION и 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.
Это пропустит строки и, следовательно, не даст ожидаемого результата, если a содержит значения NULL. Кроме того, он по-прежнему не возвращает тот же результат, что и UNION- UNIONтакже удаляет дубликаты, которые возвращаются подзапросами, в то время как ваш подход не будет.
Франк Шмитт
@FrankSchmitt - спасибо за этот ответ; этот бит о подзапросах - именно то, что я хотел знать!
Дорадус
11
Просто добавьте мои два цента к обсуждению здесь: можно понять UNIONоператор как чистый, SET-ориентированный 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.
Nitpick: UNION ALLне «предлагается» T-SQL. UNION ALLявляется частью стандарта ANSI SQL и не относится к MS SQL Server.
Фрэнк Шмитт
1
Комментарий Nitpick может означать, что вы не можете использовать «Union All» в TSQL, но можете это сделать. Конечно, комментарий не говорит об этом, но кто-то, читающий его, может сделать вывод.
JosephDoggie
10
UNION
Команда UNIONиспользуется для выбора связанной информации из двух таблиц, так же, как JOINкоманда. Однако при использовании UNIONкоманды все выбранные столбцы должны быть одного типа данных. При UNIONэтом выбираются только разные значения.
UNION ALL
Команда UNION ALLравна UNIONкоманде, за исключением того, что UNION ALLвыбирает все значения.
Разница между Unionи Union allзаключается в том, Union allчто не удаляет дублирующиеся строки, а просто извлекает все строки из всех таблиц в соответствии с особенностями вашего запроса и объединяет их в таблицу.
UNIONЗаявление эффективно делает SELECT DISTINCTна множестве результатов. Если вы знаете, что все возвращенные записи являются уникальными из вашего объединения, используйте UNION ALLвместо этого, это даст более быстрые результаты.
UNIONи UNION ALLдолжен работать на всех серверах SQL.
Вы должны избегать ненужных, UNIONпотому что это огромная утечка производительности. Как правило, используйте, UNION ALLесли вы не уверены, какой использовать.
В этом вопросе нет тега SQL Server. Я думаю, что вариант, который возвращает дубликаты только потому, что он обычно работает лучше всего, является неправильным советом.
onedaywhen
1
@onedaywhen Я полагаю, что OP использовал фразу «SQL-серверы» в качестве синонима для всех РСУБД (например, MySQL, PostGreSQL, Oracle, SQL Server). Формулировка неудачная, хотя (и, конечно, я могу ошибаться).
Фрэнк Шмитт
@FrankSchmitt: ни один из перечисленных вами продуктов не является настоящими СУБД :)
до
1
@oneday когда хотите уточнить? По крайней мере en.wikipedia.org/wiki/Relational_database_management_system, похоже, согласен со мной - в ней явно упоминаются Microsoft SQL Server, Oracle Database и MySQL. Или вы придирчивы к разнице между Oracle и Oracle Database, например?
Фрэнк Шмитт
8
UNION - приводит к разным записям,
а
UNION ALL - ко всем записям, включая дубликаты.
Оба являются операторами блокировки, и поэтому я лично предпочитаю использовать JOINS вместо операторов блокировки (UNION, INTERSECT, UNION ALL и т. Д.) В любое время.
Чтобы проиллюстрировать, почему операция Union работает плохо по сравнению с проверкой Union All, в следующем примере.
Ниже приведены результаты операций UNION ALL и UNION.
Оператор UNION эффективно выполняет SELECT DISTINCT для набора результатов. Если вы знаете, что все возвращаемые записи уникальны для вашего объединения, используйте UNION ALL, это даст более быстрые результаты.
Использование UNION приводит к различным операциям сортировки в плане выполнения. Доказательство, чтобы доказать это утверждение показано ниже:
Все, что в этом ответе уже было сказано, слишком запутанно, чтобы быть полезным (предлагая объединения по профсоюзам, когда они делают разные вещи, приводя в качестве причины «блокировку», не объясняя, что вы подразумеваете под тем или к каким серверам баз данных это относится), или вводит в заблуждение (ваши проценты на скриншоте не соответствуют реальному фактическому использованию UNION/ UNION ALL).
Операторы блокировки - это хорошо известные операторы в TSQL. Все, что делают операторы блокировки, может быть достигнуто объединениями, но не наоборот. Операция «Различная сортировка» обведена на рисунке, чтобы показать, почему объединение всех работает лучше, чем объединение, а также точно показать, где оно существует в плане выполнения. Не стесняйтесь добавлять больше данных в таблицы T1 и T2, чтобы поиграть с процентами!
DBA
Технически, вы МОЖЕТЕ получить результаты unionиспользования комбинации joins и некоторых действительно неприятных cases, но это делает чертовски почти невозможным чтение и обслуживание запроса, и, по моему опыту, это также ужасно для производительности. Сравните: select foo.bar from foo union select fizz.buzz from fizzпротивselect case when foo.bar is null then fizz.buzz else foo.bar end from foo join fizz where foo.bar is null or fizz.buzz is null
Девин Ламот
@DBA Ваш ответ актуален только для пользователей MS SQL Server. ОП никогда не упоминал СУБД, которые они используют - они могут использовать MySQL, PostgreSQL, Oracle, SQLite, ...
Фрэнк Шмитт
6
объединение используется для выбора различных значений из двух таблиц, где как объединение все используется для выбора всех значений, включая дубликаты из таблиц
Ваше второе изображение показывает, что они взаимоисключающие, когда это не так. Картинка должна показывать то же, что и первая, но с «эллипсом пересечения», ()показанным во второй раз. На самом деле, если подумать, поскольку union allрезультат не является набором, вы не должны пытаться нарисовать его с помощью диаграммы Венна!
1
5
(Из электронной книги по Microsoft SQL Server)
СОЮЗ [ВСЕ]
Указывает, что несколько наборов результатов должны быть объединены и возвращены как один набор результатов.
ВСЕ
Включает все строки в результаты. Это включает в себя дубликаты. Если не указано, повторяющиеся строки удаляются.
UNIONзаймет слишком много времени, так как на результаты DISTINCTбудет применен поиск одинаковых строк .
Побочным эффектом применения DISTINCTк результатам является операция сортировки результатов.
UNION ALLрезультаты будут отображаться в произвольном порядке по результатам. Но UNIONрезультаты будут отображаться ORDER BY 1, 2, 3, ..., n (n = column number of Tables)применительно к результатам. Вы можете увидеть этот побочный эффект, когда у вас нет повторяющихся строк.
UNION , он сливается с отличным -> медленнее, потому что его нужно сравнивать (в Oracle SQL developer, выберите запрос, нажмите F10, чтобы увидеть анализ затрат).
UNION ALL , это сливается без отчетливого -> быстрее.
UNION объединяет содержимое двух структурно-совместимых таблиц в одну объединенную таблицу.
Разница:
Разница между UNIONи UNION ALLзаключается в том, что UNION willпропускаются повторяющиеся записи, тогда как они UNION ALLбудут включать повторяющиеся записи.
UnionНабор результатов сортируется в порядке возрастания, тогда как UNION ALLнабор результатов не сортируется
UNIONвыполняет DISTINCTна своем Результирующем наборе, таким образом он удалит любые дублирующиеся строки. Принимая во внимание, UNION ALLчто не удаляет дубликаты, и поэтому это быстрее чем UNION. *
Примечание . Как UNION ALLправило, производительность будет выше, чем UNION, поскольку UNIONот сервера требуется дополнительная работа по удалению дубликатов. Таким образом, в случаях, когда есть уверенность в том, что дубликатов не будет, или наличие дубликатов не является проблемой, UNION ALLрекомендуется использовать их по соображениям производительности.
«Набор результатов объединения отсортирован в порядке возрастания» - если нет ORDER BY, отсортированные результаты не гарантируются. Возможно, вы имеете в виду конкретного поставщика SQL (даже тогда, что именно в порядке возрастания ...?), Но в этом вопросе нет тегов vendor = specific.
onedaywhen
«объединяет содержимое двух структурно-совместимых таблиц» - я думаю, что вы действительно хорошо изложили эту часть :)
понедельник,
2
Предположим, что у вас есть два стола Учитель и ученик
Вы можете применить UNION или UNION ALL для тех двух таблиц, которые имеют одинаковое количество столбцов. Но у них другое имя или тип данных.
Когда вы применяете UNIONоперацию к двум таблицам, она игнорирует все повторяющиеся записи (все значения столбцов строки в таблице совпадают со значениями в другой таблице). Нравится
SELECT*FROM Student
UNIONSELECT*FROM Teacher
результат будет
Когда вы применяете UNION ALLоперацию к 2 таблицам, она возвращает все записи с дубликатом (если есть какая-либо разница между значениями столбцов строки в 2 таблицах). Нравится
SELECT*FROM Student
UNIONALLSELECT*FROM Teacher
Вывод
Представление:
Очевидно, что производительность UNION ALL лучше, чем у UNION, поскольку они выполняют дополнительную задачу по удалению дублирующихся значений. Вы можете проверить это в Расчетное время выполнения, нажав Ctrl + L на MSSQL.
В самом деле? Для четырехрядного результата ?! Я думаю, что это сценарий, в котором вы хотели бы использовать UNIONдля передачи намерения (т.е. без дубликатов), потому что UNION ALLвряд ли получится какой-либо реальный прирост производительности в абсолютном выражении.
понедельник,
2
Проще говоря, разница между UNION и UNION ALL заключается в том, что UNION будет пропускать дубликаты записей, тогда как UNION ALL будет включать дубликаты записей.
Правда ! UNION может изменить порядок двух промежуточных результатов.
gracchus 28.09.15
6
Это не верно. UNIONБудет НЕ сортировать результат в порядке возрастания. Любой порядок, который вы видите в результате без использования, order byявляется чистым совпадением. СУБД может свободно использовать любую стратегию, которую она считает эффективной для удаления дубликатов. Это может быть сортировка, но это также может быть алгоритм хеширования или что-то совершенно другое - и стратегия будет меняться в зависимости от количества строк. A, unionкоторый выглядит отсортированным по 100 строкам, может не совпадать со 100 000 по строкам
a_horse_with_no_name
2
Без предложения ORDER BY в запросе СУБД может возвращать строки в любой последовательности. Замечание о том, что набор результатов операции UNION возвращается «в порядке возрастания», является только побочным продуктом операции «уникальная сортировка», выполняемой базой данных. Наблюдаемое поведение не гарантируется. Так что не надейся на это. Если спецификация должна возвращать строки в определенном порядке, то добавьте соответствующее ORDER BYпредложение.
spencer7593
1
Разница между Союзом против Союза ВСЕМ в Sql
Что такое объединение в SQL?
Оператор UNION используется для объединения результирующего набора из двух или более наборов данных.
Each SELECT statement withinUNION 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
Важный! Разница между Oracle и Mysql: допустим, что t1 t2 не имеют дублирующихся строк между ними, но имеют одинаковые строки отдельно. Пример: t1 имеет продажи с 2017 года и t2 с 2018 года
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNIONALLSELECT T2.YEAR, T2.PRODUCT FROM T2
В ORACLE UNION ALL извлекает все строки из обеих таблиц. То же самое будет происходить в MySQL.
Однако:
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNIONSELECT T2.YEAR, T2.PRODUCT FROM T2
В ORACLE UNION извлекает все строки из обеих таблиц, поскольку между t1 и t2 нет повторяющихся значений. С другой стороны, в MySQL у результирующего набора будет меньше строк, потому что в таблице t1, а также в таблице t2 будут повторяться строки!
UNION удаляет дубликаты записей в другой руке UNION ALL не делает. Но нужно проверить объем данных, которые будут обрабатываться, и столбец и тип данных должны быть одинаковыми.
поскольку внутреннее объединение использует «различное» поведение для выбора строк, следовательно, оно более затратно с точки зрения времени и производительности. подобно
select project_id from t_project
unionselect project_id from t_project_contact
это дает мне записи 2020 года
с другой стороны
select project_id from t_project
unionallselect project_id from t_project_contact
дает мне более 17402 строк
с точки зрения приоритета оба имеют одинаковый приоритет.
Если нет ORDER BY, a UNION ALLможет вернуть строки обратно, тогда как a UNIONзаставит вас подождать до самого конца запроса, прежде чем вы получите сразу весь набор результатов. Это может иметь значение в ситуации тайм-аута - она UNION ALLподдерживает соединение как бы живым.
Так что, если у вас есть проблема с тайм-аутом, и нет сортировки, а дубликаты не являются проблемой, это UNION ALLможет быть весьма полезно.
Как всегда , всегда используйте UNION ALL . Используйте только UNION в особых случаях, когда вам нужно устранить дубликаты, которые могут быть очень запутанными, и вы можете прочитать все об этом в других комментариях здесь.
Как это добавляет ценность по сравнению с принятым ответом?
Ник
@ Ник Это более короткий ответ.
Мостафа Ватанпур
Короче может быть преимуществом, если вам пришлось прочитать значительную часть принятого ответа, чтобы получить эти данные. Но в этом случае принятый ответ содержит всю эту информацию в самом первом предложении, после чего он подробно обсуждает последствия различий.
Ответы:
UNION
удаляет дубликаты записей (где все столбцы в результатах одинаковы),UNION ALL
нет.При использовании
UNION
вместо этого происходит снижение производительностиUNION ALL
, поскольку сервер базы данных должен выполнить дополнительную работу по удалению дублирующихся строк, но обычно вам не нужны дубликаты (особенно при разработке отчетов).UNION Пример:
Результат:
UNION ALL пример:
Результат:
источник
И UNION, и UNION ALL объединяют результат двух разных SQL. Они отличаются тем, как они обрабатывают дубликаты.
UNION выполняет DISTINCT для набора результатов, устраняя любые дублирующиеся строки.
UNION ALL не удаляет дубликаты, поэтому он работает быстрее, чем UNION.
Пример: если у нас есть две таблицы: 1) сотрудник и 2) клиент
источник
UNION
удаляет дубликаты, аUNION ALL
не удаляет .Чтобы удалить дубликаты, результирующий набор должен быть отсортирован, и это может повлиять на производительность UNION в зависимости от объема сортируемых данных и настроек различных параметров СУБД (для 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 поддерживает.
источник
от 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.источник
UNION
-UNION
также удаляет дубликаты, которые возвращаются подзапросами, в то время как ваш подход не будет.Просто добавьте мои два цента к обсуждению здесь: можно понять
UNION
оператор как чистый, SET-ориентированный 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 ALL
не «предлагается» T-SQL.UNION ALL
является частью стандарта ANSI SQL и не относится к MS SQL Server.UNION
Команда
UNION
используется для выбора связанной информации из двух таблиц, так же, какJOIN
команда. Однако при использованииUNION
команды все выбранные столбцы должны быть одного типа данных. ПриUNION
этом выбираются только разные значения.UNION ALL
Команда
UNION ALL
равнаUNION
команде, за исключением того, чтоUNION ALL
выбирает все значения.Разница между
Union
иUnion all
заключается в том,Union all
что не удаляет дублирующиеся строки, а просто извлекает все строки из всех таблиц в соответствии с особенностями вашего запроса и объединяет их в таблицу.UNION
Заявление эффективно делаетSELECT DISTINCT
на множестве результатов. Если вы знаете, что все возвращенные записи являются уникальными из вашего объединения, используйтеUNION ALL
вместо этого, это даст более быстрые результаты.источник
UNION
иUNION ALL
должен работать на всех серверах SQL.Вы должны избегать ненужных,
UNION
потому что это огромная утечка производительности. Как правило, используйте,UNION ALL
если вы не уверены, какой использовать.источник
UNION - приводит к разным записям,
а
UNION ALL - ко всем записям, включая дубликаты.
Оба являются операторами блокировки, и поэтому я лично предпочитаю использовать JOINS вместо операторов блокировки (UNION, INTERSECT, UNION ALL и т. Д.) В любое время.
Чтобы проиллюстрировать, почему операция Union работает плохо по сравнению с проверкой Union All, в следующем примере.
Ниже приведены результаты операций UNION ALL и UNION.
Оператор UNION эффективно выполняет SELECT DISTINCT для набора результатов. Если вы знаете, что все возвращаемые записи уникальны для вашего объединения, используйте UNION ALL, это даст более быстрые результаты.
Использование UNION приводит к различным операциям сортировки в плане выполнения. Доказательство, чтобы доказать это утверждение показано ниже:
источник
UNION
/UNION ALL
).union
использования комбинацииjoin
s и некоторых действительно неприятныхcase
s, но это делает чертовски почти невозможным чтение и обслуживание запроса, и, по моему опыту, это также ужасно для производительности. Сравните:select foo.bar from foo union select fizz.buzz from fizz
противselect case when foo.bar is null then fizz.buzz else foo.bar end from foo join fizz where foo.bar is null or fizz.buzz is null
объединение используется для выбора различных значений из двух таблиц, где как объединение все используется для выбора всех значений, включая дубликаты из таблиц
источник
Это хорошо понять с помощью диаграммы Венна.
вот ссылка на источник. Есть хорошее описание.
источник
()
показанным во второй раз. На самом деле, если подумать, посколькуunion all
результат не является набором, вы не должны пытаться нарисовать его с помощью диаграммы Венна!(Из электронной книги по Microsoft SQL Server)
СОЮЗ [ВСЕ]
ВСЕ
UNION
займет слишком много времени, так как на результатыDISTINCT
будет применен поиск одинаковых строк .эквивалентно:
UNION ALL
результаты будут отображаться в произвольном порядке по результатам. НоUNION
результаты будут отображатьсяORDER BY 1, 2, 3, ..., n (n = column number of Tables)
применительно к результатам. Вы можете увидеть этот побочный эффект, когда у вас нет повторяющихся строк.источник
Я добавляю пример,
UNION , он сливается с отличным -> медленнее, потому что его нужно сравнивать (в Oracle SQL developer, выберите запрос, нажмите F10, чтобы увидеть анализ затрат).
UNION ALL , это сливается без отчетливого -> быстрее.
а также
источник
UNION
объединяет содержимое двух структурно-совместимых таблиц в одну объединенную таблицу.Разница между
UNION
иUNION ALL
заключается в том, чтоUNION will
пропускаются повторяющиеся записи, тогда как ониUNION ALL
будут включать повторяющиеся записи.Union
Набор результатов сортируется в порядке возрастания, тогда какUNION ALL
набор результатов не сортируетсяUNION
выполняетDISTINCT
на своем Результирующем наборе, таким образом он удалит любые дублирующиеся строки. Принимая во внимание,UNION ALL
что не удаляет дубликаты, и поэтому это быстрее чемUNION
. *Примечание . Как
UNION ALL
правило, производительность будет выше, чемUNION
, посколькуUNION
от сервера требуется дополнительная работа по удалению дубликатов. Таким образом, в случаях, когда есть уверенность в том, что дубликатов не будет, или наличие дубликатов не является проблемой,UNION ALL
рекомендуется использовать их по соображениям производительности.источник
ORDER BY
, отсортированные результаты не гарантируются. Возможно, вы имеете в виду конкретного поставщика SQL (даже тогда, что именно в порядке возрастания ...?), Но в этом вопросе нет тегов vendor = specific.Предположим, что у вас есть два стола Учитель и ученик
Оба имеют 4 столбца с разными именами, как это
Вы можете применить UNION или UNION ALL для тех двух таблиц, которые имеют одинаковое количество столбцов. Но у них другое имя или тип данных.
Когда вы применяете
UNION
операцию к двум таблицам, она игнорирует все повторяющиеся записи (все значения столбцов строки в таблице совпадают со значениями в другой таблице). Нравитсярезультат будет
Когда вы применяете
UNION ALL
операцию к 2 таблицам, она возвращает все записи с дубликатом (если есть какая-либо разница между значениями столбцов строки в 2 таблицах). НравитсяВывод
Представление:
Очевидно, что производительность UNION ALL лучше, чем у UNION, поскольку они выполняют дополнительную задачу по удалению дублирующихся значений. Вы можете проверить это в Расчетное время выполнения, нажав Ctrl + L на MSSQL.
источник
UNION
для передачи намерения (т.е. без дубликатов), потому чтоUNION ALL
вряд ли получится какой-либо реальный прирост производительности в абсолютном выражении.Проще говоря, разница между UNION и UNION ALL заключается в том, что UNION будет пропускать дубликаты записей, тогда как UNION ALL будет включать дубликаты записей.
источник
Еще одна вещь, которую я хотел бы добавить:
Объединение : - Набор результатов сортируется в порядке возрастания.
Объединение всех : - Набор результатов не отсортирован. вывод двух запросов просто добавляется.
источник
UNION
Будет НЕ сортировать результат в порядке возрастания. Любой порядок, который вы видите в результате без использования,order by
является чистым совпадением. СУБД может свободно использовать любую стратегию, которую она считает эффективной для удаления дубликатов. Это может быть сортировка, но это также может быть алгоритм хеширования или что-то совершенно другое - и стратегия будет меняться в зависимости от количества строк. A,union
который выглядит отсортированным по 100 строкам, может не совпадать со 100 000 по строкамORDER BY
предложение.Разница между Союзом против Союза ВСЕМ в Sql
Что такое объединение в SQL?
Оператор UNION используется для объединения результирующего набора из двух или более наборов данных.
Союз против Союза все с примером
источник
Важный! Разница между Oracle и Mysql: допустим, что t1 t2 не имеют дублирующихся строк между ними, но имеют одинаковые строки отдельно. Пример: t1 имеет продажи с 2017 года и t2 с 2018 года
В ORACLE UNION ALL извлекает все строки из обеих таблиц. То же самое будет происходить в MySQL.
Однако:
В ORACLE UNION извлекает все строки из обеих таблиц, поскольку между t1 и t2 нет повторяющихся значений. С другой стороны, в MySQL у результирующего набора будет меньше строк, потому что в таблице t1, а также в таблице t2 будут повторяться строки!
источник
UNION удаляет дубликаты записей в другой руке UNION ALL не делает. Но нужно проверить объем данных, которые будут обрабатываться, и столбец и тип данных должны быть одинаковыми.
поскольку внутреннее объединение использует «различное» поведение для выбора строк, следовательно, оно более затратно с точки зрения времени и производительности. подобно
это дает мне записи 2020 года
с другой стороны
дает мне более 17402 строк
с точки зрения приоритета оба имеют одинаковый приоритет.
источник
Если нет
ORDER BY
, aUNION ALL
может вернуть строки обратно, тогда как aUNION
заставит вас подождать до самого конца запроса, прежде чем вы получите сразу весь набор результатов. Это может иметь значение в ситуации тайм-аута - онаUNION ALL
поддерживает соединение как бы живым.Так что, если у вас есть проблема с тайм-аутом, и нет сортировки, а дубликаты не являются проблемой, это
UNION ALL
может быть весьма полезно.источник
UNION и UNION ALL используются для объединения двух или более результатов запроса.
Команда UNION выбирает различную и связанную информацию из двух таблиц, что исключает дублирование строк.
С другой стороны, команда UNION ALL выбирает все значения из обеих таблиц, в которых отображаются все строки.
источник
Как всегда , всегда используйте UNION ALL . Используйте только UNION в особых случаях, когда вам нужно устранить дубликаты, которые могут быть очень запутанными, и вы можете прочитать все об этом в других комментариях здесь.
источник
UNION ALL
также работает с большим количеством типов данных. Например, при попытке объединения пространственных типов данных. Например:будет бросать
The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.
Однако
union all
не будет.источник
Единственная разница заключается в следующем:
«UNION» удаляет повторяющиеся строки.
«UNION ALL» не удаляет повторяющиеся строки.
источник