Какие способы соединения таблиц в SQL ты знаешь?

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

Ответ

В SQL стандартом определены следующие основные типы JOIN для соединения таблиц:

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

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

    SELECT * FROM employees e
    LEFT JOIN departments d ON e.department_id = d.id;
  3. RIGHT (OUTER) JOIN — противоположность LEFT JOIN. Возвращает все строки из правой таблицы.

  4. FULL (OUTER) JOIN — возвращает все строки, когда есть совпадение в левой ИЛИ правой таблице. Результат объединяет LEFT и RIGHT JOIN.

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

  6. SELF JOIN — соединение таблицы с самой собой, часто используется для иерархических данных.

    SELECT e1.name, e2.name AS manager_name
    FROM employees e1
    LEFT JOIN employees e2 ON e1.manager_id = e2.id;

Ключевое отличие между INNER и OUTER JOIN — в том, включаются ли в результат строки без совпадений. Выбор типа JOIN зависит от бизнес-логики запроса: нужны ли вам только связанные данные (INNER) или все записи из одной из таблиц, даже без связей (OUTER).