Зарегистрируйтесь, чтобы продолжить обучение

Соединение трех и более таблиц SQL: Join

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

Соединяем три таблицы

Представим, что мы разрабатываем сервис для заказа такси. В базе данных хранится информация о водителях, пассажирах и поездках:

Таблица-справочник drivers хранит информацию о водителях:

drivers

driver_id driver_name phone
1 Иванов А.Б. +71112223344
2 Петрова В.Г. +71113334455

Таблица-справочник passengers хранит информацию о пассажирах:

passengers

passenger_id passenger_name phone
101 Орлов Д.Е. +72229998877
102 Соколова Ж.З. +72228889900
103 Ястребов И.К. +73339995566

Таблица-связка rides хранит информацию о поездках:

rides

ride_id driver_id passenger_id price
1001 1 101 567
1002 1 102 234
1003 2 103 1234
1004 2 103 765

View on DB Fiddle

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

SELECT
    drv.driver_name AS driver, -- имя водителя
    pas.passenger_name AS passenger, -- имя пассажира
    rd.price AS ride_price -- стоимость поездки
FROM rides AS rd
INNER JOIN drivers AS drv
    ON -- первое соединение
        rd.driver_id = drv.driver_id
INNER JOIN passengers AS pas ON -- второе соединение
    rd.passenger_id = pas.passenger_id

Чтобы выполнить соединение с третьей таблицей, мы добавили в запрос еще одну секцию INNER JOIN ... ON .... Добавляя секции, мы можем соединить произвольное число таблиц.

Результат выполнения запроса:

Соединение трех таблиц

driver passenger ride_price
Иванов А.Б. Орлов Д.Е. 567.00
Иванов А.Б. Соколова Ж.З. 234.00
Петрова В.Г. Ястребов И.К. 1234.00
Петрова В.Г. Ястребов И.К. 765.00

View on DB Fiddle

Здесь мы сначала соединили первые две таблицы: rides INNER JOIN drivers = rides_and_drivers. Затем результат соединили с третьей таблицей: rides_and_drivers INNER JOIN passengers.

На практике СУБД может поменять порядок соединения таблиц в целях оптимизации, но результат будет содержать те же строки.

Выводы

В этом уроке мы научились соединять несколько таблиц. Каждая новая таблица в соединении описывается отдельной секцией INNER JOIN ... ON ... в SQL-запросе. Логически можно представить, что каждая новая таблица соединяется с результатом предыдущего соединения.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff