SQL код скопирован в буфер обмена
EN PT FR

Урок 5.1 · Время чтения: ~8 мин

SQL JOIN объединяет строки из двух и более таблиц по связанному столбцу. В этом уроке вы узнаете основную концепцию JOIN, научитесь писать условие ON, поймёте, зачем использовать псевдонимы таблиц, и на практических примерах базы данных Sakila научитесь извлекать связанные данные шаг за шагом.

SQL JOIN: как соединять таблицы в реляционных базах данных

В реляционных базах данных информация хранится в виде набора связанных таблиц. Чтобы извлекать из них осмысленные данные, необходимо уметь их соединять. Для этого в SQL используется операция JOIN. Она позволяет объединять строки из двух или более таблиц на основе связанных столбцов.

Этот урок закладывает фундамент для понимания JOIN как ключевой концепции для работы с реляционными данными.

Что такое SQL JOIN и как он работает?

JOIN — это механизм, который позволяет комбинировать строки из разных таблиц в один результирующий набор. Соединение происходит по условию, которое чаще всего сравнивает значения в столбцах-ключах.

Представьте две таблицы: customer (клиенты) и payment (платежи). В таблице payment есть столбец customer_id, который указывает, какой клиент совершил платеж. JOIN позволяет "склеить" строки из этих двух таблиц, чтобы для каждого платежа видеть не просто ID клиента, а его имя и фамилию.

Как это работает:

  1. Вы указываете две таблицы, которые хотите соединить.
  2. Вы задаете условие соединения в блоке ON, например, customer.customer_id = payment.customer_id.
  3. База данных проходит по строкам, находит совпадающие пары и формирует из них новые, объединенные строки.

Визуализация:

  Таблица A (customer)      Таблица B (payment)
  +----+-------+            +----+----------+
  | id | name  |            | id | amount   |
  +----+-------+            +----+----------+
  | 1  | Ivan  | <-----\    | 1  | 100.00   |
  | 2  | Maria |       \--->| 1  | 50.00    |
  | 3  | Petr  |            | 3  | 200.00   |
  +----+-------+            +----+----------+

Стрелки показывают, как строки из таблицы payment находят "своего" клиента в таблице customer по совпадающему id.

Как использовать JOIN на практике: примеры из Sakila

Давайте рассмотрим, как это выглядит в реальном SQL-запросе на примере базы данных Sakila.

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

    SELECT
        c.first_name,
        c.last_name,
        p.amount,
        p.payment_date
    FROM
        customer AS c
    JOIN
        payment AS p ON c.customer_id = p.customer_id;
    
    • JOIN payment AS p указывает, что мы присоединяем таблицу payment.
    • ON c.customer_id = p.customer_id — это условие, по которому строки считаются связанными.
    • c и p — это алиасы (псевдонимы), которые делают запрос короче и читабельнее.
  2. Получение списка фильмов и их языка: Соединим таблицы film и language, чтобы показать название каждого фильма и язык, на котором он представлен.

    SELECT
        f.title,
        l.name AS language
    FROM
        film AS f
    JOIN
        language AS l ON f.language_id = l.language_id;
    

    Здесь связь установлена по ключу language_id.


Ключевые выводы урока:

  • SQL JOIN объединяет строки из двух и более таблиц в единый результирующий набор.
  • Условие ON определяет, как строки двух таблиц связаны между собой — обычно через совпадающие ключи.
  • Псевдонимы (customer AS c) укорачивают запросы и делают их понятнее.
  • JOIN не изменяет исходные данные; он создаёт временный результирующий набор.
  • В следующих уроках мы подробно разберём INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL JOIN.

Урок 5.2: INNER JOIN — Соединение совпадающих строк


Часто задаваемые вопросы

Чем отличается JOIN от INNER JOIN?

В SQL просто JOIN — это сокращение для INNER JOIN. Оба варианта дают одинаковый результат. Явное INNER JOIN чаще предпочтительнее, особенно когда в одном запросе используются разные типы соединений.

Что произойдёт, если условие ON не нашло совпадений?

Если ни одна строка не удовлетворяет условию ON, INNER JOIN вернёт пустой результат. Ошибки не возникнет — запрос просто вернёт ноль строк. Другие типы соединений (LEFT JOIN и др.) обрабатывают несовпадающие строки иначе.

Можно ли соединить больше двух таблиц в одном запросе?

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


Вопросы для собеседования

Как объяснить JOIN нетехническому человеку?

JOIN — это как поиск связанной информации по общему ID в двух электронных таблицах. Если в одной таблице список клиентов с ID, а в другой — список платежей с ID клиента, JOIN позволяет видеть рядом с каждым платежом имя клиента, а не просто его ID — без дублирования данных.

Зачем нужно условие ON и можно ли обойтись без него?

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

Почему псевдонимы таблиц являются хорошей практикой?

Псевдонимы устраняют неоднозначность, когда две таблицы содержат одинаковые названия столбцов (например, id). С псевдонимами можно писать c.id и p.id, что сразу понятно и читателю, и базе данных.