Файлы к уроку:
В SQL есть 2 способа объединения по вертикали:
- UNION
- UNION ALL
UNION объединяет таблицы по вертикали, возвращая только уникальные строки из исходных селектов.

UNION ALL объединяет таблицы по вертикали, возвращая все строки из исходных селектов.

INTERSECT возвращает строки из первого селекта, которые встречаются во втором селекте.

EXCEPT возвращает только те строки из первого селекта, которых нет во втором селекте.

Скрипт с простейшими примерами.
-- Создать первую таблицу
create table aria_1 (
release_year integer,
album_name text
)
-- Добавить данные
INSERT INTO aria_1 (release_year, album_name) VALUES
(1985, 'Мания величия'),
(1986, 'С кем ты?'),
(1987, 'Герой асфальта'),
(1989, 'Игра с огнём'),
(1991, 'Кровь за кровь'),
(1995, 'Ночь короче дня'),
(1998, 'Генератор зла'),
(2001, 'Химера'),
(2003, 'Крещение огнём'),
(2006, 'Армагеддон');
-- Создать вторую таблицу
create table aria_2 (
release_year integer,
album_name text
)
-- Добавить данные
INSERT INTO aria_2 (release_year, album_name) VALUES
(1985, 'Мания величия'),
(1986, 'С кем ты?'),
(1987, 'Герой асфальта'),
(1989, 'Игра с огнём'),
(1991, 'Кровь за кровь'),
(1995, 'Ночь короче дня'),
(1998, 'Генератор зла'),
(2001, 'Химера'),
(2003, 'Крещение огнём'),
(2006, 'Армагеддон'),
(2011, 'Феникс'),
(2014, 'Через все времена'),
(2018, 'Проклятье морей');
select *
from metrika.aria_1
-- UNION
select *
from aria_1
union
select *
from aria_2
order by release_year
-- UNION ALL
select *
from aria_1
union all
select *
from aria_2
order by release_year
-- INTERSECT
select *
from metrika.aria_1
intersect
select *
from metrika.aria_2
order by release_year
-- EXCEPT
select *
from metrika.aria_1
except
select *
from metrika.aria_2
order by release_year
-- EXCEPT
-- Другой порядок таблиц
select *
from aria_2
except
select *
from aria_1
order by release_year
Скрипт более реалистичного примера из видео.
-- Объединить по вертикали таблицы daily и monthly
select
'день' as "детализация"
,"Интервал дат визита" as "дата"
,"визиты"
,"посетители"
,"просмотры"
from metrika.daily
union all
select
'месяц' as "детализация"
,right("Интервал дат визита", 10)::date as "дата"
,"визиты"
,"посетители"
,"просмотры"
from metrika.monthly
order by "детализация", "дата"
