Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Операция объединения в SQL

Синтаксис команды UNION

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

SELECT ...

UNION [ALL]

SELECT ...

Замечание 1

Для корректной работы команды UNION, структура наборов, которые возвращают запросы SELECT , должна быть одинаковой, чтобы их можно было совместить в один набор. То есть все запросы должны содержать одинаковое количество полей в одинаковом порядке. Поля с одним и тем же порядковым номером в разных запросах должны совпадать по типу, размеру, допустимости значения NULL.

Инструкция ALL подразумевает, что при наличии совершенно одинаковых записей в результирующий набор будут включены обе записи. Если инструкция ALL отсутствует, то по умолчанию подразумевается инструкция DISTINCT, которая исключает дубли.

Команда Union может использоваться в следующих случаях:

  • Выборка данных из одной таблицы;
  • Выборка данных из двух таблиц;
  • Реализация оператора FULL JOIN (полного внешнего объединения).

Выборка данных из одной таблицы

Пример 1

Имеется таблица с фамилиями клиентов некоторого предприятия и датами обращения.

Операция объединения в SQL. Автор24 — интернет-биржа заказчиков и авторов

Необходимо вывести данные об обращениях клиентов с фамилиями Иванов и Петров. Эту задачу можно решить с помощью следующего запроса:

SELECT * from booking where fio LIKE "Иванов%"

UNION

SELECT * from booking where fio LIKE "Петров%";

Стоит заметить, что полностью эквивалентный результат можно получить без использования UNION, применяя логический оператор OR:

SELECT * from booking where fio LIKE "Иванов%" OR "Петров%";

Выборка данных из двух таблиц

Пример 2

Пуст имеется две таблицы с названиями городов и численностью населения.

Операция объединения в SQL. Автор24 — интернет-биржа заказчиков и авторов

Необходимо построить таблицу, куда войдут города из обеих таблиц с численностью между 3 млн. и 13млн.

SELECT city_name,population FROM city1 WHERE population>3000000 AND population

UNION

SELECT city_name,population FROM city2 WHERE population>3000000 AND population

Результат:

Операция объединения в SQL. Автор24 — интернет-биржа заказчиков и авторов

«Операция объединения в SQL» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

При наличии инструкции ORDER BY внутри запросов SELECT, следует использовать круглые скобки:

(SELECT a,b,c FROM table1 WHERE a=10 AND b=20 ORDER BY c)

UNION

(SELECT a,b,c FROM table2 WHERE c=20 OR b=30 ORDER BY b);

Реализация FULL JOIN с помощью UNION

Чаще всего команда UNION используется для реализации оператора FULL JOIN, который в MySQL отсутствует. Рассмотрим реализацию FULL JOIN на примере следующей задачи:

Пример 3

В базе данных хранятся две таблицы. В таблице «orders» указаны количества заказанной продукции. В таблице «prod» указано количество произведенной продукции.

Операция объединения в SQL. Автор24 — интернет-биржа заказчиков и авторов

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

Если построить запрос на основе prod left join orders, то в результате будут видны все произведенные товары, но не будут видны те товары, которые были заказаны, но не были произведены.

SELECT prod.product, ifnull(prod.amount,0)-ifnull(orders.amount,0) from prod left join orders on orders.product=prod.product;

Результат:

Операция объединения в SQL. Автор24 — интернет-биржа заказчиков и авторов

В результирующей таблице отсутствует товар «Торт Прага».

Если построить запрос на основе orders left join prod, то в результате будут видны все заказанные товары, но не будут видны те товары, которые были произведены без предварительного заказа.

SELECT orders.product, ifnull(prod.amount,0)-ifnull(orders.amount,0) from orders left join prod on prod.product=orders.product;

Результат:

Операция объединения в SQL. Автор24 — интернет-биржа заказчиков и авторов

В результирующей таблице отсутствует товар «Зефир фруктовый».

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

SELECT orders.product, ifnull(prod.amount,0)-ifnull(orders.amount,0) from orders left join prod on prod.product=orders.product

UNION

SELECT prod.product, ifnull(prod.amount,0)-ifnull(orders.amount,0) from prod left join orders on orders.product=prod.product;

Результат:

Операция объединения в SQL. Автор24 — интернет-биржа заказчиков и авторов

Дата написания статьи: 02.09.2016
Получи помощь с рефератом от ИИ-шки
ИИ ответит за 2 минуты
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot