Что такое оператор JOIN в SQL?

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

Ответ

JOIN — это оператор SQL, предназначенный для объединения строк из двух или более таблиц на основе логической связи (условия соединения) между ними.

Основные типы JOIN:

Тип JOIN Описание
INNER JOIN Возвращает только те строки, для которых есть совпадение в обеих таблицах.
LEFT [OUTER] JOIN Возвращает все строки из левой таблицы и совпадающие строки из правой. Если совпадений нет, поля правой таблицы заполняются NULL.
RIGHT [OUTER] JOIN Возвращает все строки из правой таблицы и совпадающие строки из левой. Аналог LEFT JOIN с изменённым порядком таблиц.
FULL [OUTER] JOIN Возвращает все строки из обеих таблиц. При отсутствии совпадения поля недостающей таблицы заполняются NULL.
CROSS JOIN Возвращает декартово произведение строк обеих таблиц (все возможные комбинации).

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

-- INNER JOIN: Заказы с информацией о клиентах
SELECT orders.id, customers.name, orders.total
FROM orders
INNER JOIN customers ON orders.customer_id = customers.id;

-- LEFT JOIN: Все клиенты и их заказы (если есть)
SELECT customers.name, orders.id
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id
WHERE orders.id IS NULL; -- Найти клиентов без заказов

-- Множественный JOIN
SELECT u.name, o.amount, p.product_name
FROM users u
INNER JOIN orders o ON u.id = o.user_id
INNER JOIN products p ON o.product_id = p.id;

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

  • Условие соединения (ON) определяет, как связаны таблицы (часто по первичному и внешнему ключам).
  • JOIN можно комбинировать с WHERE, GROUP BY, агрегатными функциями и подзапросами.
  • Для соединения таблицы с самой собой используется SELF JOIN.