Под капотом практически любой IT-системы, приложения или сайта есть базы данных. Их используют для хранения, чтения, а также анализа данных. В рамках этого курса речь пойдет о работе с табличными (реляционными) базами данных. Все примеры, как обычно, будут относиться к СУБД PostgreSQL.
Зачем нужно объединять несколько таблиц
Правильно организованные табличные базы хранят данные по правилам нормализации данных. В нормализованном виде информация о разных сущностях хранится в разных таблицах.
Для примера представим, что мы работаем с книжным каталогом. Будет правильно, если мы разделим информацию об авторах и о произведениях.
Первую таблицу мы назовем authors
и будем хранить в ней идентификатор, имя и страну автора:
author_id | author_name | country |
---|---|---|
100 | Александр Пушкин | Россия |
101 | Лев Толстой | Россия |
102 | Марк Твен | США |
Для второй таблицы мы выберем имя books
и запишем туда идентификатор, название, ссылку на автора и дату публикации книги:
book_id | title | author_id | published |
---|---|---|---|
1001 | Евгений Онегин | 100 | 1833 |
1002 | Руслан и Людмила | 100 | 1820 |
1003 | Война и мир | 101 | 1867 |
1004 | Приключения Тома Сойера | 102 | 1876 |
1005 | Приключения Гекльберри Финна | 102 | 1884 |
При этом эти таблицы связаны — для каждой книги хранится ссылка на ее автора в поле books.author_id
.
Некоторые задачи можно решить с помощью запроса к одной таблице, но чаще требуется собирать информацию из нескольких таблиц. Например, если мы захотим отобразить список всех книг вместе с информацией об авторах, то потребуются данные из обеих таблиц.
Так выглядит ожидаемый результат:
author_name | country | title | published |
Александр Пушкин | Россия | Евгений Онегин | 1833 |
Александр Пушкин | Россия | Руслан и Людмила | 1820 |
Лев Толстой | Россия | Война и мир | 1867 |
Марк Твен | США | Приключения Тома Сойера | 1876 |
Марк Твен | США | Приключения Гекльберри Финна | 1884 |
Мы дополнили информацию о книге данными о ее авторе, соединив данные из двух таблиц. Подобные объединения данных — это типичная задача на практике.
В этом курсе мы расскажем о том, как эффективно решать такие задачи с помощью оператора JOIN
, который также называют соединением. Мы изучим подробно различные виды соединений, каждый из них рассмотрим на примере и приведем примеры SQL запросов. Мы научимся выполнять соединения более двух таблиц, научимся использовать псевдонимы и разберем несколько приемов, основанных на соединениях.
В конце курса мы научимся использовать альтернативные инструменты:
- Подзапросы
- Обобщенные табличные выражения (Common Table Expressions — CTE)
- Представления (
VIEW
)
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.