Как задаются связи между таблицами в операторе JOIN в SQL?

«Как задаются связи между таблицами в операторе JOIN в SQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Связи между таблицами в JOIN задаются в условии ON (или USING), где указывается, какие столбцы из разных таблиц должны быть равны. Обычно это сравнение внешнего ключа (foreign key) одной таблицы с первичным ключом (primary key) другой.

Синтаксис и пример:

SELECT o.order_id, c.customer_name, o.order_date
FROM orders o
INNER JOIN customers c ON o.customer_id = c.customer_id;

Ключевые моменты:

  1. Условие ON — определяет логику связи. Можно использовать любые операторы сравнения (=, <, >, BETWEEN), но чаще всего это равенство по ключам.
  2. Типы JOIN:
    • INNER JOIN — только совпадающие строки.
    • LEFT JOIN — все строки из левой таблицы + совпадения справа.
    • RIGHT JOIN / FULL JOIN — аналогично, но для правой или обеих таблиц.
  3. Производительность: Для ускорения JOIN столбцы, участвующие в условии, должны быть проиндексированы.

Краткая форма с USING: Если имена связующих столбцов совпадают, можно использовать USING:

SELECT * FROM orders JOIN customers USING (customer_id);