Какие виды JOIN в SQL вы знаете?

«Какие виды JOIN в SQL вы знаете?» — вопрос из категории SQL, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В SQL существует несколько типов JOIN для объединения данных из двух и более таблиц.

Основные виды JOIN:

  1. INNER JOIN — возвращает только строки, для которых есть совпадение в обеих таблицах по условию.

    SELECT *
    FROM orders
    INNER JOIN customers ON orders.customer_id = customers.id;
  2. LEFT (OUTER) JOIN — возвращает все строки из левой таблицы и соответствующие строки из правой. При отсутствии совпадения в правой таблице возвращаются NULL.

    SELECT customers.name, orders.order_date
    FROM customers
    LEFT JOIN orders ON customers.id = orders.customer_id;
  3. RIGHT (OUTER) JOIN — противоположность LEFT JOIN: возвращает все строки из правой таблицы и соответствующие строки из левой.

  4. FULL (OUTER) JOIN — возвращает все строки из обеих таблиц, объединяя результаты LEFT и RIGHT JOIN. Отсутствующие совпадения заполняются NULL.

  5. CROSS JOIN — возвращает декартово произведение строк обеих таблиц (все возможные комбинации).

    SELECT *
    FROM sizes
    CROSS JOIN colors;
  6. SELF JOIN — соединение таблицы с самой собой, часто используется для иерархических данных (например, сотрудник -> менеджер).

    SELECT e1.name AS employee, e2.name AS manager
    FROM employees e1
    LEFT JOIN employees e2 ON e1.manager_id = e2.id;
  7. NATURAL JOIN — автоматически соединяет таблицы по столбцам с одинаковыми именами. На практике используется редко из-за неявного поведения, которое может привести к ошибкам.