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":
01 | Hansen, Ola |
02 | Svendson, Tove |
03 | Svendson, Stephen |
04 | Pettersen, Kari |
"Employees_USA":
01 | Turner, Sally |
02 | Kent, Clark |
03 | Svendson, Stephen |
04 | Scott, Stephen |
Итак, мы хотим перечислить "всех" возможные сотрудников в Norway и USA.
Для этого используем такой запрос:
Результат запроса:
Hansen, Ola |
Svendson, Tove |
Svendson, Stephen |
Pettersen, Kari |
Turner, Sally |
Kent, Clark |
Scott, Stephen |
- Замечание: Данная команда не может быть использована для просмотра списка всех работающих в Норвегии и США. В приведенном выше примере у нас есть два сотрудника с одинаковыми именами, и только один из них будет перечислен. Оператор UNION выбирает только отдельные значения.
Пример SQL UNION ALL
Теперь мы хотим получить список всех работающих в Norway и USA:
Результат
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Результатом выполнения запроса будет следующая таблица:
ID | Name |
10 | Sanders |
30 | Marenghi |
100 | Plotz |
140 | Fraye |
160 | Molinare |
240 | Daniels |
Теперь требуются данные, в которых объединены критерии отбора, применённые в двух запросах. Объединяем запросы при помощи оператора UNION:
SELECT ID, Name FROM STAFF WHERE SALARY > 21000 UNION SELECT ID, Name FROM STAFF WHERE Job = 'Mgr' AND YearsРезультатом выполнения запроса с оператором UNION будет следующая таблица:
ID | Name |
10 | Sanders |
30 | Marenghi |
100 | Plotz |
140 | Fraye |
160 | Molinare |
240 | Daniels |
260 | Jones |
Запрос с оператором UNION может возвращать и большее количество столбцов, важно, чтобы в объединяемых запросах число столбцов, порядок их следования и типы данных совпадали.
Пример 2. Есть база данных портала объявлений, о которой более подробно - в уроке об использовании JOIN (пример 7).
Пусть сначала требуется получить данные о категориях и частях категорий объявлений, в которых подано более 100 объявлений в неделю. Пишем следующий запрос:
SELECT Category, Part, Units, Money FROM ADS WHERE Units > 100
Результатом выполнения запроса будет следующая таблица:
Category | Part | Units | Money |
Транспорт | Автомашины | 110 | 17600 |
Транспорт | Мотоциклы | 131 | 20960 |
Электротехника | Телевизоры | 127 | 8255 |
Электротехника | Холодильники | 137 | 8905 |
Стройматериалы | Регипс | 112 | 11760 |
Досуг | Музыка | 117 | 7605 |
Теперь требуется извлечь данные о категориях и частях категорий объявлений, за которые выручено более 10000 денежных единиц в неделю. Пишем следующий запрос:
SELECT Category, Part, Units, Money FROM ADS WHERE Money > 10000
Результатом выполнения запроса будет следующая таблица:
Category | Part | Units | Money |
Транспорт | Автомашины | 110 | 17600 |
Недвижимость | Квартиры | 89 | 18690 |
Недвижимость | Дачи | 57 | 11970 |
Транспорт | Мотоциклы | 131 | 20960 |
Стройматериалы | Регипс | 112 | 11760 |
Теперь требуется извлечь данные, которые соответствуют критериям и первого, и второго запросов. Объединяем запросы при помощи оператора UNION:
SELECT Category, Part, Units, Money FROM ADS WHERE Units > 100 UNION SELECT Category, Part, Units, Money FROM ADS WHERE Money > 10000
Результатом выполнения запроса будет следующая таблица:
Транспорт | Автомашины | 110 | 17600 |
Транспорт | Мотоциклы | 131 | 20960 |
Недвижимость | Квартиры | 89 | 18690 |
Недвижимость | Дачи | 57 | 11970 |
Электротехника | Телевизоры | 127 | 8255 |
Электротехника | Холодильники | 137 | 8905 |
Стройматериалы | Регипс | 112 | 11760 |
Досуг | Музыка | 117 | 7605 |
До сих пор мы рассматривали запросы с оператором 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:
1 | Беларусь |
2 | Россия |
3 | Украина |
Таблица cities:
1 | Минск | 1 |
2 | Минск | 1 |
3 | Москва | 2 |
4 | Киев | 3 |
Пример
В данном примере объединяются записи из двух таблиц:
SELECT id, name FROM countries UNION ALL SELECT id, name FROM citiesSQL запрос выберет следующие строки:
1 | Беларусь |
2 | Россия |
3 | Украина |
1 | Минск |
2 | Минск |
3 | Москва |
4 | Киев |
Пример
В данном примере отсутствует ключевое слово ALL, однако дубли не будут удалены, так как дублями считается полное совпадение строк:
SELECT id, name FROM countries UNION SELECT id, name FROM citiesSQL запрос выберет следующие строки:
1 | Беларусь |
2 | Россия |
3 | Украина |
1 | Минск |
2 | Минск |
3 | Москва |
4 | Киев |
Пример
А вот теперь дубли будут удалены (из двух Минсков останется один), так как будет иметь место полное совпадение строк (потому что поле осталось одно, но это не обязательно):
SELECT name FROM countries UNION SELECT name FROM citiesSQL запрос выберет следующие строки:
Беларусь |
Россия |
Украина |
Минск |
Москва |
Киев |
Пример
А теперь добавим слово ALL - и дубли не будут удалятся:
SELECT name FROM countries UNION ALL SELECT name FROM citiesSQL запрос выберет следующие строки:
Беларусь |
Россия |
Украина |
Минск |
Минск |
Москва |
Киев |
Пример
В данном примере демонстрируется работа условий WHERE в комбинации с UNION:
SELECT id, name FROM countries WHERE id>=2 UNION SELECT id, name FROM cities WHERE idSQL запрос выберет следующие строки:
2 | Россия |
3 | Украина |
1 | Минск |
2 | Минск |
Пример
Имена колонок берутся из первой таблицы (то есть имена колонок таблиц, подключенных через UNION нигде себя не проявят):
SELECT id as country_id, name as country_name FROM countries UNION SELECT id, name FROM citiesSQL запрос выберет следующие строки:
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 citiesSQL запрос выберет следующие строки:
1 | Беларусь | 0 |
2 | Россия | 0 |
3 | Украина | 0 |
1 | Минск | 1 |
2 | Минск | 1 |
3 | Москва | 2 |
4 | Киев | 3 |
code.mu