ENIGMA AI
ENIGMA AI

Какие существуют виды JOIN в SQL?

встречается 15× SQL junior database

Как ответить

JOIN в SQL — это оператор для объединения строк из двух или более таблиц на основе связанного столбца. Понимание разных типов JOIN критически важно для написания корректных запросов. Основные виды: INNER JOIN, LEFT JOIN (или LEFT OUTER JOIN), RIGHT JOIN, FULL OUTER JOIN, CROSS JOIN. Каждый из них по-разному обрабатывает строки, у которых нет совпадений.

Рассмотрим на примере двух таблиц:

CREATE TABLE users (id INT, name VARCHAR(50));
CREATE TABLE orders (id INT, user_id INT, amount DECIMAL(10,2));
  • INNER JOIN — возвращает только те строки, где есть совпадение в обеих таблицах. Если у пользователя нет заказов, он не попадёт в результат.
    SELECT u.name, o.amount
    FROM users u
    INNER JOIN orders o ON u.id = o.user_id;
  • LEFT JOIN — возвращает все строки из левой таблицы (users), а для правой (orders) подставляет NULL, если совпадений нет. Используется, когда нужно сохранить все записи из основной таблицы.
    SELECT u.name, o.amount
    FROM users u
    LEFT JOIN orders o ON u.id = o.user_id;
  • RIGHT JOIN — зеркально противоположный: все строки из правой таблицы, для левой — NULL. В реальных проектах RIGHT JOIN встречается редко, потому что его можно переписать через LEFT JOIN, поменяв таблицы местами.
    SELECT u.name, o.amount
    FROM users u
    RIGHT JOIN orders o ON u.id = o.user_id;
  • FULL OUTER JOIN — возвращает все строки из обеих таблиц. Если совпадения нет, то в недостающих столбцах будет NULL. Полезен, когда нужно видеть полную картину, включая записи без связей.
    SELECT u.name, o.amount
    FROM users u
    FULL OUTER JOIN orders o ON u.id = o.user_id;
  • CROSS JOIN — декартово произведение: каждая строка одной таблицы соединяется с каждой строкой другой. Результат может быть огромным, поэтому используется редко (например, для генерации комбинаций).
    SELECT u.name, o.amount
    FROM users u
    CROSS JOIN orders o;

Также стоит упомянуть SELF JOIN — это JOIN таблицы с самой собой через разные псевдонимы. Например, для поиска сотрудников с одинаковым начальником. NATURAL JOIN автоматически соединяет по столбцам с одинаковыми именами, но на практике его избегают — он скрывает логику и может привести к ошибкам при изменении схемы.

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

Ключевые тезисы

  • INNER JOIN возвращает только совпадающие строки из обеих таблиц.
  • LEFT JOIN сохраняет все строки из левой таблицы, добавляя NULL для правой при отсутствии совпадений.
  • RIGHT JOIN — то же, но сохраняет строки правой таблицы; часто заменяется перестановкой таблиц в LEFT JOIN.
  • FULL OUTER JOIN возвращает все строки из обеих таблиц, заполняя NULL, где нет совпадений.
  • CROSS JOIN даёт декартово произведение; SELF JOIN — соединение таблицы с самой собой.

Что спросят дальше

  • — Чем отличается LEFT JOIN от INNER JOIN на примере таблиц пользователей и заказов?
  • — Какой JOIN выберете, чтобы вывести всех клиентов, даже если у них нет ни одного заказа?
  • — Что произойдёт, если в запросе с JOIN указать условие WHERE, которое отфильтровывает NULL из внешней таблицы?

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение