В современных БД информация для работы может находится в нескольких таблицах. Это делается для повышения надежности и ускорения работы.
И часто бывают ситуации, когда информацию нужно собирать из нескольких таблиц и объединять в одной таблице.
Для сведения вместе данных из таблиц в SQL применяют несколько методов:
- UNION: ALL или Distinct — типа сложения таблиц. Прост в использовании, но на практике мало полезен.
- Подзапросы: с корреляцией и без нее.
- JOIN: CROSS, INNER, OUTER (LEFT, RIGHT, FULL).
- Экзотические способы — EXCEPT (разница множеств), INTERSECT (пересечение множеств). Они поддерживаются в Microsoft SQL, но могут не работать в других БД.
UNION — сложение таблиц
Допустим, есть 2 таблицы одинаковые по структуре (равное количество столбцов). И мы просто все строки из этих 2-х таблиц перемещаем в одну большую. Пример:
SELECT title, price FROM titles UNION SELECT title, price FROM product
В примере выше: сначала приводим обе таблицы к одинаковому количеству столбцов + чтобы содержимое столбцов совпадало по типу данных в них. Потом объединяем. Далее мы можем работать со всеми данными как с одной таблицей.
Замечание: UNION — это исключающий оператор, т.е. при объединении таблиц он исключает дубликаты записей. Если нам нужно полное объединение без удаления дубликатов, то используем UNION ALL.
При использовании UNION мы получаем некую таблицу, с которой можно делать все, как с обычной table, например применить сортировку.
Складывать UNION можно сколько угодно раз. При этом сложение будет последовательным.
Но в современных базах данных этот метод объединения редко, где сработает.