Объединение
Часть раздела Основы путешествия по SQL на Coddy. Урок 48 из 72.
Объединения отличаются от соединений. Соединения используют условия для объединения таблиц, а объединения просто добавляют две таблицы одну поверх другой. Чтобы использовать UNION, мы напишем:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2Оба оператора SELECT должны соблюдать следующие правила:
- Количество полей должно быть одинаковым
- Порядок имеет значение
- Столбцы, находящиеся на одном и том же месте, должны соответствовать типам данных
Например, предположим, что у нас есть следующие таблицы:
germany_people
| id | name |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | name |
| 1 | George |
| 2 | Lena |
Задача: мы хотим создать одну большую таблицу со всеми имеющимися у нас именами.
SELECT name from germany_people
UNION
SELECT name from england_peopleРезультат:
| name |
| Lena |
| Leonie |
| George |
UNION возвращает только уникальные значения, тогда как UNION ALL возвращает все записи без изменений:
SELECT name from germany_people
UNION ALL
SELECT name from england_peopleРезультат:
| name |
| Lena |
| Leonie |
| George |
| Lena |
Вы также можете сочетать UNION ALL с агрегатными функциями, GROUP BY и ORDER BY, чтобы обобщать данные из нескольких таблиц. Секрет в том, чтобы поместить UNION ALL во вложенный запрос, а затем применить к нему группировку и сортировку.
Например, предположим, что мы хотим подсчитать, сколько раз каждое имя встречается в обеих таблицах:
SELECT name, COUNT(*) AS total_count
FROM (
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people
) AS combined
GROUP BY name
ORDER BY total_count DESCРезультат:
| name | total_count |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
Здесь используется UNION ALL (а не UNION), чтобы сохранить дубликаты, такие как Lena. В противном случае они были бы удалены до подсчёта. Подзапрос объединяет все строки, а затем GROUP BY + COUNT обобщают их. ORDER BY сортирует итоговый результат.
Задание
ЛегкоДоступные таблицы и столбцы:
sales_2009:product_id,quantity_soldsales_2010:product_id,quantity_soldsales_2011:product_id,quantity_sold
Есть 3 таблицы продаж.
Найдите сумму продаж для каждого продукта по всем таблицам вместе.
Результат должен включать product_id и общую сумму продаж.
Назовите этот столбец total_sales.
Отсортируйте результаты по общей сумме продаж в порядке убывания.
Попробуйте сами
-- Объединить три таблицы в один результат, сохраняя каждую строку
SELECT product_id, ____ AS total_sales
FROM (
SELECT * FROM sales_2009
____
SELECT * FROM sales_2010
____
SELECT * FROM sales_2011
)
-- Одна строка на продукт, сначала наибольший итог
GROUP BY ____
ORDER BY ____ DESC;В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Больше ключевых слов
Ключевое слово INКлючевое слово BETWEENКлючевое слово LIKEКлючевое слово ASПовторение - Модели мобильных телефонов2Условия
Основы условийКлючевое слово ANDКлючевое слово ORКлючевое слово NOTКомбинирование нескольких условийСкобкиБулевы значения5Арифметические операции
Математические операторыМатематические столбцыОперация moduloФункция ROUND()3Специальный формат возврата
Значения NULLСортировка результатов, часть 1Сортировка результатов, часть 2Повторение - Фирма по кибербезопасностиОграничение количества записейПовторение - Автозавод6Вводные вызовы
Повторение - Парламентские выборыПовторение - Арест преступника полициейПовторение - Ёмкость для напитков в бареПовторение - Создание новых столбцовПотренируйтесь самостоятельно: Песочница SQL