Для чего нужен оператор union
Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
Базы данных
SQL оператор UNION ALL
В этом учебном материале вы узнаете, как использовать SQL оператор UNION ALL с синтаксисом и примерами.
Описание
SQL оператор UNION ALL используется для объединения результирующих наборов из 2 или более операторов SELECT. Он не удаляет повторяющиеся строки между различными операторами SELECT (возвращаются все строки).
Каждый оператор SELECT в UNION ALL должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.
В чем разница между UNION и UNION ALL?
Синтаксис
Синтаксис для оператора UNION ALL в SQL.
Параметры или аргумент
Примечание
Давайте посмотрим, как использовать SQL оператор UNION ALL, который возвращает одно поле. В этом простом примере поле в обоих операторах SELECT будет иметь одинаковое имя и тип данных.
Например.
supplier_id | supplier_name |
---|---|
1000 | Microsoft |
2000 | Oracle |
3000 | Apple |
4000 | Samsung |
И таблица orders заполнена следующими записями.
order_id | order_date | supplier_id |
---|---|---|
2019-07-01 | 2000 | |
2019-07-01 | 6000 | |
2019-07-02 | 7000 | |
2019-07-03 | 8000 |
И вы выполнили следующий оператор UNION ALL.
Вы получите следующие результаты.
supplier_id |
---|
1000 |
2000 |
2000 |
3000 |
4000 |
6000 |
7000 |
8000 |
Нет необходимости, чтобы соответствующие столбцы в каждом операторе SELECT имели одинаковые имена, но они должны быть с одинаковыми соответствующими типами данных.
Если у вас нет одинаковых имен столбцов в операторах SELECT, это становится немного сложнее, особенно если вы хотите упорядочить результаты запроса, используя оператор ORDER BY.
Давайте посмотрим, как использовать оператор UNION ALL с разными именами столбцов, и упорядочить результаты запроса.
Например.
Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
Базы данных
UNION ОПЕРАТОР
В этом учебном материале вы узнаете, как использовать Oracle оператор UNION с синтаксисом и примерами.
Описание
Oracle оператор UNION используется для объединения наборов результатов из 2-х или более Oracle запросов SELECT. Он удаляет повторяющиеся строки между различными запросами SELECT.
Каждый запрос SELECT внутри оператора UNION должен иметь одинаковое количество полей в результирующих наборах с одинаковыми типами данных.
Синтаксис
Синтаксис оператора UNION в Oracle/PLSQL:
Параметры или аргументы
Примечание
Пример с одним полем
Следующий пример Oracle оператора UNION, возвращает одно поле из двух запросов SELECT (и оба поля имеют один и тот же тип данных):
Пример использования ORDER BY
Oracle оператор UNION может использовать оператор ORDER BY, чтобы упорядочить результаты запроса.
Поля supplier_name / company_name находятся в позиции # 2 в результирующем наборе.
Часто задаваемые вопросы
Вопрос: Мне нужно сравнить две даты и вернуть количество строк поля, основанного на значении дат. Например, у меня есть в таблице поле даты, которое называется дата последнего обновления. Я должен проверить, если TRUNC (last_updated_date)> = TRUNC (Sysdate-13).
Ответ: Поскольку вы используете функцию COUNT, которая является агрегатной функцией, то мы рекомендуем использовать Oracle оператор UNION. Например, вы можете попробовать следующее:
Объединение UNION и UNION ALL в SQL – описание и примеры
Пришло время поговорить об объединении данных по средствам конструкции union и union all, так как это иногда бывает очень полезно, и без использования такой конструкции бывает порой не обойтись. Примеры будем писать в СУБД MSSQL 2008, используя язык SQL.
И начать хотелось бы с того, что мы с Вами уже рассматривали много примеров написания запросов на SQL, например, оператор select языка SQL, или использование строковых функций SQL, также рассматривали программирование как на plpgsql так и на transact-sql, например, Как написать функцию на PL/pgSQL и Transact-sql – Табличные функции и временные таблицы соответственно.
Я не просто так указал вышеперечисленные статьи, а указал я их, потому, что для более лучшего понимания и усвоения сегодняшнего урока, необходимо начальные знания (это сайт для начинающих программистов), которые как раз Вы можете получить из вышеупомянутого материала.
И так приступим. И для начала давайте рассмотрим, что же это за операторы union и union all.
Что такое UNION и UNION ALL в SQL?
Необходимые условия для операторов union и union all
Теперь давайте поговорим о том, в каких случаях нам может понадобиться использование этих операторов. Ну, например, у Вас есть несколько баз со схожей структурой, каждая из которых создана, например, для какого-нибудь филиала, а Вам необходимо объединить эти данные для предоставления отчетности по всем филиалам руководству и самое простое как это можно сделать, это написать запросы на SQL, каждый из которых будет обращаться к разным базам, и через конструкцию union или union all объединить их. Также иногда бывает необходимо объединить данные в одной базе таким образом, что обычными объединениями это не реализовать и приходится использовать union. Почему я говорю «приходится» да потому что данная конструкция значительно увеличивает время выполнения запроса, если например данных очень много, и злоупотреблять ею не нужно.
Хватит теории, переходим к практике.
Примечание! Как уже говорилось, запросы будем писать в Management Studio для SQL Server 2008
Примеры использования union и union all
Для начала создадим две простых таблицы test_table и test_table_2
Они одинаковые для примера, только разные названия. Я заполнил их вот такими данными:
Теперь давайте напишем запрос, который объединит результирующие данные в одни, например через union. Синтаксис очень прост:
Как Вы видите, вывелось всего 5 строк, так как у нас первая строка в первом запросе и первая строка во втором запросе одинаковые, поэтому они объединились.
Теперь давайте объединим через union all
Здесь уже вывелись все строки, так как мы указали union all.
А теперь давайте рассмотрим, какие могут быть ошибки даже в этом простом запросе. Например, мы перепутали последовательность полей:
Или мы в первом запросе указали дополнительное поле, а во втором этого не сделали.
Также, например, при использовании order by:
Здесь мы указали сортировку в каждом запросе, а нужно было только в последнем, например:
И напоследок, хотел рассказать об одной хитрости, которую можно использовать тогда когда, например, все-таки необходимо вывести в одном запросе какое-то поле, а в других его нет или просто оно не нужно, для этого можете написать вот такой запрос:
т.е. как Вы видите просто там, где должно быть поле ставить пусто и запрос отлично отработает, например:
И еще один небольшой совет, так как запросы при объединении через union довольно обширные, то лучше на их основе создать представление (Views), в случае если данный запрос Вам требуется постоянно, и уже к этому представлению обращаться каждый раз, когда требуется, а зачем нужны представления мы с Вами уже рассматривали вот здесь – Что такое представления и зачем они нужны.
Наверное, все, что я хотел рассказать о конструкции union и union all языка SQL я рассказал, если есть вопросы по использованию этих операторов, задавайте их в комментариях. Удачи!
Заметка! Для комплексного изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL, в которых используется последовательная методика обучения и рассматриваются все конструкции языка SQL и T-SQL.
Команда UNION
Основные запросы
Условия выборки
Группировка
Сложение строк
Несколько таблиц
Длина строк
Изменение строк
Поиск по строкам
Работа с пробелами
Работа с регистром
Информация
Условия
Полезное
Разное
Математические функции
Списки
Извлечение части даты
Получение даты и времени
Преобразование даты
Сложение дат
Тригонометрия
Отдельные символы
Системы счисления
Команда UNION объединяет данные из нескольких таблиц в одну при выборке.
При объединении количество столбцов во всех таблицах должно совпадать, иначе будет ошибка
Имена столбцов будут такие же, как в основной таблице, в которую добавляются данные из других таблиц.
Внимание: если не используется ключевое слово ALL для UNION, все возвращенные строки будут уникальными, так как по умолчанию подразумевается DISTINCT, который удаляет неуникальные значения.
См. также команду JOIN, которая объединяет связанные таблицы.
Синтаксис
С удалением дублей:
Без удаления дублей:
Можно объединять не две таблицы, а три или более:
Примеры
Все примеры будут по таблицам countries и cities, если не сказано иное.
id айди | name название |
---|---|
1 | Беларусь |
2 | Россия |
3 | Украина |
id айди | name название | country_id айди страны |
---|---|---|
1 | Минск | 1 |
2 | Минск | 1 |
3 | Москва | 2 |
4 | Киев | 3 |
Пример
В данном примере объединяются записи из двух таблиц:
SQL запрос выберет следующие строки:
id айди | name название |
---|---|
1 | Беларусь |
2 | Россия |
3 | Украина |
1 | Минск |
2 | Минск |
3 | Москва |
4 | Киев |
Пример
В данном примере отсутствует ключевое слово ALL, однако дубли не будут удалены, так как дублями считается полное совпадение строк:
SQL запрос выберет следующие строки:
id айди | name название |
---|---|
1 | Беларусь |
2 | Россия |
3 | Украина |
1 | Минск |
2 | Минск |
3 | Москва |
4 | Киев |
Пример
А вот теперь дубли будут удалены (из двух Минсков останется один), так как будет иметь место полное совпадение строк (потому что поле осталось одно, но это не обязательно):
SQL запрос выберет следующие строки:
name название |
---|
Беларусь |
Россия |
Украина |
Минск |
Москва |
Киев |
Пример
SQL запрос выберет следующие строки:
name название |
---|
Беларусь |
Россия |
Украина |
Минск |
Минск |
Москва |
Киев |
Пример
В данном примере демонстрируется работа условий WHERE в комбинации с UNION:
SQL запрос выберет следующие строки:
id айди | name имя |
---|---|
2 | Россия |
3 | Украина |
1 | Минск |
2 | Минск |
Пример
Имена колонок берутся из первой таблицы (то есть имена колонок таблиц, подключенных через UNION нигде себя не проявят):
SQL запрос выберет следующие строки:
country_id айди | country_name имя | |
---|---|---|
1 | Беларусь | |
2 | Россия | |
3 | Украина | |
1 | Минск | 1 |
2 | Минск | 1 |
3 | Москва | 2 |
4 | Киев | 3 |
Пример
Такой запрос выдаст ошибку, так как в таблицах не совпадает количество колонок:
Если нам очень надо забрать из какой-либо таблицы столько полей, что в другой таблице столько и нет, можно создавать дополнительные поля вручную.
К примеру, мы хотим забрать 3 поля из второй таблицы, а в первой таблице полей только 2. Решим эту проблему создав поле с именем country_id и содержимым 0 для первой таблицы (вот так: 0 as country_id):
SQL Оператор UNION
SQL UNION
Оператор UNION используется для объединения результирующего набора из двух или более заявлений SELECT.
Синтаксис UNION
Синтаксис UNION ALL
Оператор UNION по умолчанию выбирает только отдельные значения. Чтобы разрешить повторяющиеся значения, использовать UNION ALL:
Примечание: Имена столбцов в результирующем наборе обычно равны именам столбцов в первом заявлении SELECT в UNION.
Демо база данных
В этом уроке мы будем использовать хорошо известный пример базы данных Northwind.
Ниже приведен выбор из таблицы «Customers»:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 |
И выбор из таблицы «Suppliers»:
SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | London | EC1 4SD | UK |
2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
3 | Grandma Kelly’s Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
Пример SQL UNION
Следующая инструкция SQL возвращает города (только отдельные значения) как из таблицы «Customers», так и из таблицы «Suppliers»:
Пример
Примечание: Если некоторые клиенты или поставщики имеют один и тот же город, то каждый город будет указан только один раз, поскольку UNION выбирает только различные значения. Используйте UNION ALL, чтобы также выбрать повторяющиеся значения!
Пример SQL UNION ALL
Следующая инструкция SQL возвращает города (также повторяющиеся значения) как из таблицы «Customers», так и из таблицы «Suppliers»:
Пример
Пример SQL UNION с WHERE
Следующая инструкция SQL возвращает немецкие города (только отдельные значения) как из таблицы «Customers», так и из таблицы «Suppliers»:
Пример
Пример SQL UNION ALL с WHERE
Следующая инструкция SQL возвращает немецкие города (также повторяющиеся значения) как из таблицы «Customers», так и из таблицы «Suppliers»:
Пример
Пример UNION другой
Следующая инструкция SQL содержит список всех клиентов и поставщиков: