Альтернативные варианты присоединения: UNION и UNION ALL
В прошлых уроках вы учились соединять таблицы «по горизонтали»: объединяли поля из разных таблиц по ключам или общим полям. Это не единственный способ, иногда требуется дополнить одну таблицу другой, то есть соединить их «по вертикали». Для такой задачи используют операторы
UNION и UNION ALL.Оператор
UNION используют, чтобы объединить выдачу SQL-запросов. Можно представить, что к одной таблице «приклеивается» другая. Два правила регламентируют использование операторов
UNION и UNION ALL:- Извлекать поля из одной таблицы нужно в том же порядке, что и из другой. Число извлекаемых полей тоже должно совпадать.
- Типы данных в полях должны соответствовать друг другу. Объединить поле типа
integerс полем типаvarcharне получится, а поля с типамиintegerиreal— можно.
Рассмотрим пример. Такой запрос выгрузит количество заказов за 2009 год в США, Германии и Бразилии.
SQL
Похожим запросом можно выгрузить число заказов в тех же странах, но за 2013 год.
SQL
Две выгруженные таблицы похожи: число полей одинаково и типы данных в полях соответствуют друг другу. Значит, такие таблицы можно объединить с помощью оператора
UNION. После первого запроса указывают оператор
UNION и добавляют второй запрос.SQL
Обратите внимание, что в итоговую таблицу вошли две записи, в которых указаны страны Германия и США. Но запись для Бразилии всего одна. Дело в том, что в 2009 и 2013 годах количество заказов в Бразилии совпадает — их 7. Запись из первой таблицы полностью дублирует запись из второй. Оператор
UNION устроен так, что абсолютные дубликаты в итоговую таблицу не входят: останется только одна запись. Оператор
UNION ALL устроен по-другому.SQL
Все записи вошли в таблицу, даже полные дубликаты.
С помощью
UNION и UNION ALL тоже можно присоединить несколько таблиц. К запросу добавляют оператор UNION или UNION ALL и указывают новый запрос. SQL