Sobes.tech
Назад к вопросам
Junior — Middle
58

Можешь ли ты перечислить основные виды соединений таблиц в SQL и объяснить их использование?

Компании, где спрашивали
Почтатех

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

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

Определение:

Соединение таблиц — это способ объединить строки из двух или более таблиц по условию связи, обычно по ключам.
Разные виды join отличаются тем, какие строки попадут в результат: только совпавшие, все из одной таблицы, все из обеих таблиц или декартово произведение.

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

Пример использования:

SELECT o.OrderId, c.Name
FROM Orders o
INNER JOIN Customers c ON o.CustomerId = c.Id;

Здесь выбираются заказы и имена клиентов только для тех заказов, у которых найден соответствующий клиент.

Еще один пример для LEFT JOIN:

SELECT c.Name, o.OrderId
FROM Customers c
LEFT JOIN Orders o ON c.Id = o.CustomerId;

Этот запрос покажет всех клиентов, даже если у них нет заказов.

Пояснение кода:

В первом запросе:

  1. Берется таблица Orders как основная.
  2. Через INNER JOIN она связывается с таблицей Customers.
  3. Условие o.CustomerId = c.Id говорит, какие строки считать связанными.
  4. В результат попадут только те заказы, для которых найден клиент.

Во втором запросе:

  1. Основная таблица — Customers.
  2. LEFT JOIN сохраняет всех клиентов.
  3. Если у клиента есть заказы, они будут показаны.
  4. Если заказов нет, поле OrderId будет NULL.

Код не требуется для RIGHT JOIN, FULL OUTER JOIN и CROSS JOIN в этом примере, но логика у них такая же: они отличаются тем, какие строки сохраняются в результате и как обрабатываются отсутствующие совпадения.

Ключевые моменты:

  • INNER JOIN — только совпавшие строки.
  • LEFT JOIN — все строки слева и совпадения справа.
  • RIGHT JOIN — все строки справа и совпадения слева.
  • FULL OUTER JOIN — все строки из обеих таблиц.
  • CROSS JOIN — все комбинации строк.
  • При отсутствии совпадений в OUTER JOIN значения из “пустой” стороны становятся NULL.