Какие основные типы JOIN существуют в SQL и чем они отличаются?

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

Ответ

Оператор JOIN используется для объединения строк из двух или более таблиц на основе связанного столбца. Основные типы:

  • INNER JOIN: Возвращает только строки, где есть совпадение в обеих таблицах.
    SELECT * FROM orders INNER JOIN customers ON orders.customer_id = customers.id;
  • LEFT (OUTER) JOIN: Возвращает все строки из левой таблицы и совпадающие строки из правой. При отсутствии совпадения для правой таблицы возвращаются NULL.
    SELECT * FROM customers LEFT JOIN orders ON customers.id = orders.customer_id;
  • RIGHT (OUTER) JOIN: Возвращает все строки из правой таблицы и совпадающие строки из левой. Аналог LEFT JOIN, но с приоритетом правой таблицы.
  • FULL (OUTER) JOIN: Возвращает все строки, когда есть совпадение в левой или правой таблице. Результат объединяет LEFT и RIGHT JOIN, заполняя недостающие стороны NULL.
  • CROSS JOIN: Возвращает декартово произведение — все возможные комбинации строк из обеих таблиц. Используется редко, так как может генерировать огромный результат.
  • SELF JOIN: Обычный JOIN, но таблица соединяется сама с собой. Требует использования алиасов.
    SELECT e1.name AS employee, e2.name AS manager
    FROM employees e1
    LEFT JOIN employees e2 ON e1.manager_id = e2.id;