SQL: Join

Теория: Введение

Под капотом практически любой IT-системы, приложения или сайта есть базы данных. Их используют для хранения, чтения, а также анализа данных. В рамках этого курса речь пойдет о работе с табличными (реляционными) базами данных. Все примеры, как обычно, будут относиться к СУБД PostgreSQL.

Зачем нужно объединять несколько таблиц

Правильно организованные табличные базы хранят данные по правилам нормализации данных. В нормализованном виде информация о разных сущностях хранится в разных таблицах.

Для примера представим, что мы работаем с книжным каталогом. Будет правильно, если мы разделим информацию об авторах и о произведениях.

Первую таблицу мы назовем authors и будем хранить в ней идентификатор, имя и страну автора:

author_idauthor_namecountry
100Александр ПушкинРоссия
101Лев ТолстойРоссия
102Марк ТвенСША

Для второй таблицы мы выберем имя books и запишем туда идентификатор, название, ссылку на автора и дату публикации книги:

book_idtitleauthor_idpublished
1001Евгений Онегин1001833
1002Руслан и Людмила1001820
1003Война и мир1011867
1004Приключения Тома Сойера1021876
1005Приключения Гекльберри Финна1021884

При этом эти таблицы связаны — для каждой книги хранится ссылка на ее автора в поле books.author_id.

Некоторые задачи можно решить с помощью запроса к одной таблице, но чаще требуется собирать информацию из нескольких таблиц. Например, если мы захотим отобразить список всех книг вместе с информацией об авторах, то потребуются данные из обеих таблиц.

Так выглядит ожидаемый результат:

author_namecountrytitlepublished
Александр ПушкинРоссияЕвгений Онегин1833
Александр ПушкинРоссияРуслан и Людмила1820
Лев ТолстойРоссияВойна и мир1867
Марк ТвенСШАПриключения Тома Сойера1876
Марк ТвенСШАПриключения Гекльберри Финна1884

Мы дополнили информацию о книге данными о ее авторе, соединив данные из двух таблиц. Подобные объединения данных — это типичная задача на практике.

В этом курсе мы расскажем о том, как эффективно решать такие задачи с помощью оператора JOIN, который также называют соединением. Мы изучим подробно различные виды соединений, каждый из них рассмотрим на примере и приведем примеры SQL запросов. Мы научимся выполнять соединения более двух таблиц, научимся использовать псевдонимы и разберем несколько приемов, основанных на соединениях.

В конце курса мы научимся использовать альтернативные инструменты:

  • Подзапросы
  • Обобщенные табличные выражения (Common Table Expressions — CTE)
  • Представления (VIEW)

Рекомендуемые программы