Что такое оператор JOIN в SQL и какие основные типы существуют?

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

Ответ

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

Основные типы JOIN (на примере таблиц Orders и Customers):

  1. INNER JOIN Возвращает только те строки, где есть совпадение в обеих таблицах.

    SELECT Orders.OrderID, Customers.CustomerName
    FROM Orders
    INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
  2. LEFT (OUTER) JOIN Возвращает все строки из левой таблицы (Orders) и совпадающие строки из правой. Если совпадения нет, в колонках правой таблицы будут NULL.

    SELECT Orders.OrderID, Customers.CustomerName
    FROM Orders
    LEFT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
  3. RIGHT (OUTER) JOIN Обратный LEFT JOIN. Возвращает все строки из правой таблицы и совпадающие строки из левой.

  4. FULL (OUTER) JOIN Возвращает все строки, когда есть совпадение либо в левой, либо в правой таблице. Если для строки одной таблицы нет совпадения в другой, недостающие колонки заполняются NULL. (Не поддерживается в MySQL, но может быть эмулирован).

  5. CROSS JOIN Возвращает декартово произведение таблиц — каждая строка первой таблицы соединяется с каждой строкой второй. Используется редко, требует осторожности.

    SELECT * FROM Table1 CROSS JOIN Table2;

Практические советы:

  • Для производительности всегда используйте индексы на столбцах, участвующих в условии ON.
  • INNER JOIN — самый распространенный и часто самый эффективный.
  • Четко понимайте бизнес-логику, чтобы выбрать между INNER и LEFT JOIN (нужны ли вам строки без соответствия?).
  • Избегайте CROSS JOIN и сложных соединений многих таблиц в одном запросе, если это возможно — это может серьезно снизить производительность.

Видео-ответы