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

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

Ответ

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

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

    SELECT users.name, orders.total
    FROM users
    INNER JOIN orders ON users.id = orders.user_id;
  2. LEFT (OUTER) JOIN Возвращает все строки из левой таблицы и совпадающие строки из правой. Если совпадения нет, для полей правой таблицы возвращается NULL. Полезен, например, для получения списка всех пользователей и их заказов, включая тех, у кого заказов нет.

    SELECT users.name, orders.total
    FROM users
    LEFT JOIN orders ON users.id = orders.user_id;
  3. RIGHT (OUTER) JOIN Обратный LEFT JOIN: возвращает все строки из правой таблицы и совпадающие из левой. Используется реже.

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

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

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

    SELECT e.name AS employee, m.name AS manager
    FROM employees e
    LEFT JOIN employees m ON e.manager_id = m.id;