Расскажи про JOIN в SQL.

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

Ответ

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

  • INNER JOIN: Возвращает только те строки, где есть совпадение в обеих таблицах. Это самый распространенный тип.
    SELECT users.name, orders.total
    FROM users
    INNER JOIN orders ON users.id = orders.user_id;
  • LEFT (OUTER) JOIN: Возвращает все строки из левой таблицы и соответствующие строки из правой. Если совпадения нет, в полях правой таблицы будет NULL.
    SELECT users.name, orders.total
    FROM users
    LEFT JOIN orders ON users.id = orders.user_id;
    -- Покажет всех пользователей, даже тех, у кого нет заказов
  • RIGHT JOIN: Аналогичен LEFT JOIN, но возвращает все строки из правой таблицы. Используется реже.
  • FULL OUTER JOIN: Возвращает все строки, когда есть совпадение в левой ИЛИ правой таблице. (В MySQL не поддерживается, эмулируется через UNION).

Ключевые моменты из практики:

  1. Для производительности критически важно, чтобы поля в условии ON были проиндексированы.
  2. При соединении нескольких таблиц важно понимать порядок и логику, чтобы не получить неожиданный декартов продукт.
  3. Я часто использую алиасы для улучшения читаемости сложных запросов:
    SELECT u.email, o.id, p.title
    FROM users u
    JOIN orders o ON u.id = o.user_id
    JOIN order_items oi ON o.id = oi.order_id
    JOIN products p ON oi.product_id = p.id
    WHERE o.status = 'completed';