Мы рассмотрели горизонтальное соединение таблиц, но их можно соединять и вертикально.
Тут нам не нужно никаких ключей, единственное - это соблюдение 2 условий:
Давайте сразу рассмотрим пример! У нас есть 3 таблицы, в которых хранятся данные об учениках.
Таблица students_1
:
id | name | grade |
1 | Александр | 11 |
5 | Ксения | 11 |
Таблица students_2
:
id | name | grade |
2 | Влад | 10 |
3 | Сергей | 10 |
Таблица students_3
:
student_id | name | grade |
4 | Полина | 9 |
6 | Алексей | 9 |
1 | Александр | 11 |
Объединить вертикально эти три таблицы можно с помощью запроса к каждой таблице и объединения их через оператор UNION ALL
:
select
id,
name,
grade
from
students_1
union all
select
id,
name,
grade
from
students_2
union all
select
student_id as id, -- меняем название колонки
name,
grade
from
students_3
Результатом запроса будет:
id | name | grade |
1 | Александр | 11 |
5 | Ксения | 11 |
2 | Влад | 10 |
3 | Сергей | 10 |
4 | Полина | 9 |
6 | Алексей | 9 |
1 | Александр | 11 |
Если, вместо UNION ALL
, написать просто UNION
, дубли удалятся. В так случае мы получим такой результат:
id | name | grade |
1 | Александр | 11 |
5 | Ксения | 11 |
2 | Влад | 10 |
3 | Сергей | 10 |
4 | Полина | 9 |
6 | Алексей | 9 |