Oracle PL/SQL •MySQL •SQL Server. Пример sql union


SQL Union

UNION - данный оператор используется для объединения запросов SELECT.

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

Синтаксис SQL UNION

- Замечание: оператор UNION выбирает только разные значения. Чтобы разрешить выборку повторяющихся значений, используйте UNION ALL.

Синтаксис SQL UNION ALL

- Замечание: Имена столбцов в первом запросе всегда совпадают с именами столбцов во втором запросе.

Пример SQL UNION

Взгляните на следующие таблицы:

"Employees_Norway":

E_ID E_Name
01 Hansen, Ola
02 Svendson, Tove
03 Svendson, Stephen
04 Pettersen, Kari

"Employees_USA":

E_ID E_Name
01 Turner, Sally
02 Kent, Clark
03 Svendson, Stephen
04 Scott, Stephen

Итак, мы хотим перечислить "всех" возможные сотрудников в Norway и USA.

Для этого используем такой запрос:

Результат запроса:

E_Name
Hansen, Ola
Svendson, Tove
Svendson, Stephen
Pettersen, Kari
Turner, Sally
Kent, Clark
Scott, Stephen

- Замечание: Данная команда не может быть использована для просмотра списка всех работающих в Норвегии и США. В приведенном выше примере у нас есть два сотрудника с одинаковыми именами, и только один из них будет перечислен. Оператор UNION выбирает только отдельные значения.

Пример SQL UNION ALL

Теперь мы хотим получить список всех работающих в Norway и USA:

Результат

E_Name
Hansen, Ola
Svendson, Tove
Svendson, Stephen
Pettersen, Kari
Turner, Sally
Kent, Clark
Svendson, Stephen
Scott, Stephen

dimonchik.com

SQL UNION - объединение результатов запросов

Пример 1. В базе данных фирмы есть таблица Staff, содержащая данные о сотрудниках фирмы. В ней есть столбцы Salary (размер заработной платы), Job (должность) и Years (длительность трудового стажа). Первый запрос нужен для получения данных о сотрудниках, заработная плата которых более 21000:

Результатом выполнения запроса будет следующая таблица:

Второй запрос возвращает имена сотрудников, должность которых "менеждер", а число лет трудового стажа - менее 8:

SELECT ID, Name FROM STAFF WHERE Job = 'Mgr' AND Years

Результатом выполнения запроса будет следующая таблица:

IDName
10Sanders
30Marenghi
100Plotz
140Fraye
160Molinare
240Daniels

Теперь требуются данные, в которых объединены критерии отбора, применённые в двух запросах. Объединяем запросы при помощи оператора UNION:

SELECT ID, Name FROM STAFF WHERE SALARY > 21000 UNION SELECT ID, Name FROM STAFF WHERE Job = 'Mgr' AND Years

Результатом выполнения запроса с оператором UNION будет следующая таблица:

IDName
10Sanders
30Marenghi
100Plotz
140Fraye
160Molinare
240Daniels
260Jones

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

Пример 2. Есть база данных портала объявлений, о которой более подробно - в уроке об использовании JOIN (пример 7).

Пусть сначала требуется получить данные о категориях и частях категорий объявлений, в которых подано более 100 объявлений в неделю. Пишем следующий запрос:

SELECT Category, Part, Units, Money FROM ADS WHERE Units > 100

Результатом выполнения запроса будет следующая таблица:

CategoryPartUnitsMoney
ТранспортАвтомашины11017600
ТранспортМотоциклы13120960
ЭлектротехникаТелевизоры1278255
ЭлектротехникаХолодильники1378905
СтройматериалыРегипс11211760
ДосугМузыка1177605

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

SELECT Category, Part, Units, Money FROM ADS WHERE Money > 10000

Результатом выполнения запроса будет следующая таблица:

CategoryPartUnitsMoney
ТранспортАвтомашины11017600
НедвижимостьКвартиры8918690
НедвижимостьДачи5711970
ТранспортМотоциклы13120960
СтройматериалыРегипс11211760

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

SELECT Category, Part, Units, Money FROM ADS WHERE Units > 100 UNION SELECT Category, Part, Units, Money FROM ADS WHERE Money > 10000

Результатом выполнения запроса будет следующая таблица:

ТранспортАвтомашины11017600
ТранспортМотоциклы13120960
НедвижимостьКвартиры8918690
НедвижимостьДачи5711970
ЭлектротехникаТелевизоры1278255
ЭлектротехникаХолодильники1378905
СтройматериалыРегипс11211760
ДосугМузыка1177605

До сих пор мы рассматривали запросы с оператором UNION, в которых объединялись результаты из одной таблицы. Теперь будем объединять результаты из двух таблиц.

Пример 3. Есть база данных склада строительных материалов. В ней есть таблицы, содержащая данные об обоях. Таблица Vinil содержит данные о виниловых обоях, таблица Paper - о бумажных обоях. Требуется узнать данные о ценах обоев из одной и другой таблицы.

Чтобы извлечь не повторяющиеся данные о ценах на виниловые обои, составим запрос со словом DISTINCT:

SELECT DISTINCT Price FROM VINIL

Результатом выполнения запроса будет следующая таблица:

Price
400
500
530
610
720
800
850

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

SELECT DISTINCT Price FROM PAPER

Результатом выполнения запроса будет следующая таблица:

Price
300
320
360
400
430
500
530

Теперь составим объединённый запрос с оператором UNION:

SELECT DISTINCT Price FROM VINIL UNION SELECT DISTINCT Price FROM PAPER

Так как мы не используем слово ALL, дубликаты значений 400, 500 и 530 выводиться не будут. Результатом выполнения запроса будет следующая таблица:

Price
300
320
360
400
430
500
530
610
720
800
850

Пример 4. База данных и таблицы - те же, что и в предыдущем примере.

Требуется получить все данные о ценах, в том числе повторяющиеся. Запрос на объединение результатов с использованием оператора UNION будет аналогичен запросу в предыдущем примере, но вместо просто UNION пишем UNION ALL:

SELECT DISTINCT Price FROM VINIL UNION ALL SELECT DISTINCT Price FROM PAPER

Результатом выполнения запроса будет следующая таблица:

Price
300
320
360
400
400
430
500
500
530
530
610
720
800
850

При помощи оператора SQL UNION можно объединить как простые запросы, так и запросы, содержащие подзапросы (вложенные запросы). Рассмотрим соответствующий пример.

Пример 5. Есть база данных "Театр". В её таблице Play содержатся данные о постановках (названия - в столбце Name), в таблице Director - даные о режиссёрах (в столбце Fname - имя, в столбце Lname - фамилия). Первичный ключ таблицы Director - dir_id - идентификационный номер режиссёра. Dir_id также - внешний ключ таблицы Play, он ссылается на первичный ключ таблицы Director. Требуется вывести спектакли режиссеров John Barton и Trevor Nunn.

Решение. Объединим результаты двух запросов - один возвращает спектакли режиссёра John Barton, другой - режиссёра Trevor Nunn. А каждый из этих объединяемых запросов к таблице Play делаем с подзапросом к таблице Director, который возвращает dir_id по имени и фамилии режиссёра. Каждый внешний запрос принимает из вложенного запроса значение ключа dir_id и возвращает названия постановок (Name):

SELECT NAME FROM PLAY WHERE dir_id = (SELECT dir_id FROM DIRECTOR WHERE fname = 'John' AND lname = 'Barton') UNION SELECT NAME FROM PLAY WHERE dir_id = (SELECT dir_id FROM DIRECTOR WHERE fname = 'Trevor' AND lname = 'Nunn')

Поделиться с друзьями

Другие темы в блоке "Реляционные базы данных"

function-x.ru

UNION оператор MySQL | Oracle PL/SQL •MySQL •SQL Server

В этом учебном пособии вы узнаете, как использовать MySQL оператор UNION с синтаксисом и примерами.

Описание

MySQL оператор UNION используется для объединения наборов результатов из 2 или более SELECT предложений. Он удаляет повторяющиеся строки между различными предложениями SELECT.

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

Синтаксис

Синтаксис для оператора UNION в MySQL:

SELECT expression1, expression2, … expression_nFROM tables[WHERE conditions]UNION [DISTINCT]SELECT expression1, expression2, … expression_nFROM tables[WHERE conditions];

Параметры или аргументы

expression1, expression2, … expression_n — столбцы или вычисления, которые вы хотите получить.tables — таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в операторе FROM.WHERE conditions — необязательный. Условия, которые должны быть выполнены для выбранных записей.DISTINCT — необязательный. Удаляет дубликаты из результирующего набора, но включение модификатора DISTINCT не влияет на результирующий набор оператора UNION, потому что по умолчанию оператор UNION уже удаляет дубликаты.

Примечание

  • В обоих предложениях SELECT должно быть одинаковое количество expression.
  • Поскольку оператор UNION по умолчанию удаляет все повторяющиеся строки из результирующего набора, предоставление модификатора UNION DISTINCT не влияет на результаты.
  • Имена столбцов из первого предложения SELECT в операторе UNION используются в качестве имен столбцов для результирующего набора.

Пример возвращающий одно поле

Ниже приведен пример MySQL оператора UNION, который возвращает одно поле из нескольких SELECT предложений (и оба поля имеют одинаковый тип данных):

SELECT supplier_id FROM suppliers UNION SELECT supplier_id FROM order_details;

SELECT supplier_id

FROM suppliers

UNION

SELECT supplier_id

FROM order_details;

В этом примере с MySQL оператором UNION, если supplier_id используется как в suppliers, так и в таблице order_details, он появится один раз в вашем результирующем наборе. MySQL оператор UNION удалит дубликаты. Если вы не хотите удалять дубликаты, попробуйте использовать MySQL оператор UNION ALL.

Пример — использование ORDER BY

MySQL оператор UNION может использовать предложение ORDER BY, для определения результатов запроса.Например:

SELECT supplier_id, supplier_name FROM suppliers WHERE supplier_id <= 500 UNION SELECT company_id, company_name FROM companies WHERE company_name = 'Apple' ORDER BY 2;

SELECT supplier_id, supplier_name

FROM suppliers

WHERE supplier_id <= 500

UNION

SELECT company_id, company_name

FROM companies

WHERE company_name = 'Apple'

ORDER BY 2;

Поскольку имена столбцов различаются между двумя предложениями SELECT, то в этом MySQL операторе UNION, более выгодно ссылаться на столбцы в предложении ORDER BY по их позиции в результирующем наборе. В этом примере мы отсортировали результаты по supplier_name / company_name в порядке возрастания, как обозначено ORDER BY 2.

Поля supplier_name / company_name находятся в позиции № 2 результирующего набора.

oracleplsql.ru

UNION ALL оператор MySQL | Oracle PL/SQL •MySQL •SQL Server

В этом учебном пособии вы узнаете, как использовать MySQL оператор UNION ALL с синтаксисом и примерами.

Описание

MySQL оператор UNION ALL используется для объединения наборов результатов из 2 или более предложений SELECT. Он возвращает все строки из запроса и не удаляет повторяющиеся строки между различными предложениями SELECT.

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

Синтаксис

Синтаксис для оператора UNION ALL в MySQL:

SELECT expression1, expression2, … expression_nFROM tables[WHERE conditions]UNION ALLSELECT expression1, expression2, … expression_nFROM tables[WHERE conditions];

Параметры или аргументы

expression1, expression2, … expression_n — столбцы или вычисления, которые вы хотите получить.tables — таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в операторе FROM.WHERE conditions — необязательный. Условия, которые должны быть выполнены для выбранных записей.

Примечание

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

Пример возвращающий одно поле

Ниже приведен пример MySQL оператора UNION ALL, который возвращает одно поле из нескольких предложений SELECT (и оба поля имеют одинаковый тип данных):

SELECT supplier_id FROM suppliers UNION ALL SELECT supplier_id FROM orders;

SELECT supplier_id

FROM suppliers

UNION ALL

SELECT supplier_id

FROM orders;

Этот MySQL оператор UNION ALL будет возвращать supplier_id несколько раз в вашем результирующем наборе, если supplier_id находится как в таблице suppliers, так и в таблице orders. Оператор MySQL UNION ALL не удаляет дубликаты. Если вы хотите удалить дубликаты, попробуйте использовать оператор MySQL UNION.

Пример с использованием ORDER BY

MySQL оператор UNION ALL может использовать ORDER BY, для сортировки результирующего набора.Например:

SELECT supplier_id, supplier_name FROM suppliers WHERE state = 'California' UNION ALL SELECT company_id, company_name FROM companies WHERE company_id > 3000 ORDER BY 2;

SELECT supplier_id, supplier_name

FROM suppliers

WHERE state = 'California'

UNION ALL

SELECT company_id, company_name

FROM companies

WHERE company_id > 3000

ORDER BY 2;

Поскольку имена столбцов различаются между двумя предложениями SELECT, то в MySQL операторе UNION ALL более выгодно ссылаться на столбцы в предложении ORDER BY по их позиции в результирующем наборе. В этом примере мы отсортировали результаты по supplier_name / company_name в порядке возрастания, как обозначено ORDER BY 2.

Поля supplier_name / company_name находятся позиции № 2 в результирующем наборе.

oracleplsql.ru

SQL - Оператор UNION

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

Синтаксис UNION

SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;

Синтаксис UNION ALL

Оператор UNION по умолчанию выбирает только разные значения. Чтобы разрешить повторяющиеся значения, используйте UNION ALL:

SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;

Пример UNION

Следующий оператор SQL выбирает все разные города (только отдельные значения) от «users» и «delivery»:

Пример:

SELECT city FROM users UNION SELECT city FROM delivery ORDER BY city;

Пример SQL UNION ALL

Следующий оператор SQL выбирает все города (дублирующиеся значения также) из «users» и «delivery»:

Пример:

SELECT city FROM users UNION ALL SELECT city FROM delivery ORDER BY city;

SQL UNION с WHERE

Следующий оператор SQL выбирает все разные испанские города (только отдельные значения) от «users» и «delivery»:

Пример:

SELECT city, country FROM users WHERE country='Spain' UNION SELECT city, country FROM delivery WHERE country='Spain' ORDER BY city;

SQL UNION ALL с WHERE

Следующий оператор SQL выбирает все испанские города (повторяющиеся значения) также из «users» и «delivery»:

Пример:

SELECT city, country FROM users WHERE country='Spain' UNION ALL SELECT city, country FROM delivery WHERE country = 'Spain' ORDER BY city;

 

Уважаемый пользователь! Реклама помогает поддерживать и развивать наш проект, делая его простым и удобным специально для Вас. Если проект интересный и важный для Вас, то отключите на нем блокировщик рекламы. Спасибо, что читаете сайт!

unetway.com

UNION SQL Server | Oracle PL/SQL •MySQL •SQL Server

В этом учебном пособии вы узнаете, как использовать оператор UNION в SQL Server (Transact-SQL) с синтаксисом и примерами.

Описание

Оператор SQL Server UNION используется для объединения наборов результатов из 2 или более операторов SELECT. Он удаляет повторяющиеся строки между различными операторами SELECT.Каждый оператор SELECT в операторе UNION должен иметь одинаковое количество столбцов в наборах результатов с похожими типами данных.

Синтаксис

Синтаксис оператора UNION в SQL Server (Transact-SQL):

SELECT expression1, expression2, … expression_nFROM tables[WHERE conditions]UNIONSELECT expression1, expression2, … expression_nFROM tables[WHERE conditions];

Параметры или аргументы

expression1, expression2, … expression_n — столбцы или вычисления, которые вы хотите получить.tables — таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в предложении FROM.WHERE conditions — необязательный. Условия, которые должны быть выполнены для выбранных записей.

Примечание

  • В обоих операторах SELECT должно быть одинаковое количество выражений.
  • Соответствующие столбцы в каждом из операторов SELECT должны иметь похожие типы данных.
  • Оператор UNION удаляет повторяющиеся строки.
  • См. также оператор UNION ALL.

Пример возвращающий одно поле

Рассмотрим пример оператора UNION SQL Server, который возвращает одно поле из нескольких операторов SELECT (и оба поля имеют одинаковый тип данных).Например:

SELECT product_id FROM products UNION SELECT product_id FROM;

SELECT product_id

FROM products

UNION

SELECT product_id

FROM;

В этом примере SQL Server UNION, если поле product_id находится как в products, так и в inventory таблицах, он появится один раз в вашем результирующем наборе. Оператор UNION удаляет дубликаты в SQL Server. Если вы не хотите удалять дубликаты, попробуйте использовать оператор UNION ALL.

Пример использования ORDER BY

Оператор UNION может использовать предложение ORDER BY для сортировки результатов запроса в SQL Server (Transact-SQL).Например:

SELECT contact_id, contact_name FROM contacts WHERE site_name = 'yandex.com' UNION SELECT company_id, company_name FROM companies WHERE site_name = 'google.com' ORDER BY 2;

SELECT contact_id, contact_name

FROM contacts

WHERE site_name = 'yandex.com'

UNION

SELECT company_id, company_name

FROM companies

WHERE site_name = 'google.com'

ORDER BY 2;

В этом примере UNION, поскольку имена столбцов различаются между двумя операторами SELECT, более выгодно ссылаться на столбцы в предложении ORDER BY по их позиции в наборе результатов. В этом примере мы отсортировали результаты по contact_name / company_name в порядке возрастания, как обозначено ORDER BY 2.

Поля result_name / company_name находятся позиции № 2 в результирующем наборе.

oracleplsql.ru

Команда UNION - слияние таблиц

Команда UNION объединяет данные из нескольких таблиц в одну при выборке.

При объединении количество столбцов во всех таблицах должно совпадать, иначе будет ошибка

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

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

Чтобы отменить такое поведение - нужно указать ключевое слово ALL, вот так: UNION ALL.

См. также команду JOIN, которая объединяет связанные таблицы.

Синтаксис

С удалением дублей:

SELECT * FROM имя_таблицы1 WHERE условие UNION SELECT * FROM имя_таблицы2 WHERE условие

Без удаления дублей:

SELECT * FROM имя_таблицы1 WHERE условие UNION ALL SELECT * FROM имя_таблицы2 WHERE условие

Можно объединять не две таблицы, а три или более:

SELECT * FROM имя_таблицы1 WHERE условие UNION SELECT * FROM имя_таблицы2 WHERE условие UNION SELECT * FROM имя_таблицы3 WHERE условие UNION SELECT * FROM имя_таблицы4 WHERE условие

Примеры

Все примеры будут по таблицам countries и cities, если не сказано иное.

Таблица countries:

id айди name название
1 Беларусь
2 Россия
3 Украина

Таблица cities:

id айди name название country_id айди страны
1 Минск 1
2 Минск 1
3 Москва 2
4 Киев 3

Пример

В данном примере объединяются записи из двух таблиц:

SELECT id, name FROM countries UNION ALL SELECT id, name FROM cities

SQL запрос выберет следующие строки:

id айди name название
1 Беларусь
2 Россия
3 Украина
1 Минск
2 Минск
3 Москва
4 Киев

Пример

В данном примере отсутствует ключевое слово ALL, однако дубли не будут удалены, так как дублями считается полное совпадение строк:

SELECT id, name FROM countries UNION SELECT id, name FROM cities

SQL запрос выберет следующие строки:

id айди name название
1 Беларусь
2 Россия
3 Украина
1 Минск
2 Минск
3 Москва
4 Киев

Пример

А вот теперь дубли будут удалены (из двух Минсков останется один), так как будет иметь место полное совпадение строк (потому что поле осталось одно, но это не обязательно):

SELECT name FROM countries UNION SELECT name FROM cities

SQL запрос выберет следующие строки:

name название
Беларусь
Россия
Украина
Минск
Москва
Киев

Пример

А теперь добавим слово ALL - и дубли не будут удалятся:

SELECT name FROM countries UNION ALL SELECT name FROM cities

SQL запрос выберет следующие строки:

name название
Беларусь
Россия
Украина
Минск
Минск
Москва
Киев

Пример

В данном примере демонстрируется работа условий WHERE в комбинации с UNION:

SELECT id, name FROM countries WHERE id>=2 UNION SELECT id, name FROM cities WHERE id

SQL запрос выберет следующие строки:

id айди name имя
2 Россия
3 Украина
1 Минск
2 Минск

Пример

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

SELECT id as country_id, name as country_name FROM countries UNION SELECT id, name FROM cities

SQL запрос выберет следующие строки:

country_id айди country_name имя
1 Беларусь
2 Россия
3 Украина
1 Минск 1
2 Минск 1
3 Москва 2
4 Киев 3

Пример

Такой запрос выдаст ошибку, так как в таблицах не совпадает количество колонок:

SELECT id, name FROM countries UNION SELECT id, name, country_id FROM cities

И такой запрос тоже выдаст ошибку в нашем случае - количество колонок в обеих таблицах не совпадает:

SELECT * FROM countries UNION SELECT * FROM cities

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

К примеру, мы хотим забрать 3 поля из второй таблицы, а в первой таблице полей только 2. Решим эту проблему создав поле с именем country_id и содержимым 0 для первой таблицы (вот так: 0 as country_id):

SELECT id, name, 0 as country_id FROM countries UNION SELECT id, name, country_id FROM cities

SQL запрос выберет следующие строки:

id айди name имя country_id айди страны
1 Беларусь 0
2 Россия 0
3 Украина 0
1 Минск 1
2 Минск 1
3 Москва 2
4 Киев 3

code.mu