Собесов

Какие соединения таблиц A(1) и B(10) могут вернуть < 10 строк?

SQLJOIN-ыЛёгкаяJunior

Условие

В таблице A всего 1 строка, в таблице B10 строк. Какие соединения могут вернуть меньше 10 строк?

  • A) A LEFT JOIN B
  • B) A RIGHT JOIN B
  • C) A INNER JOIN B
  • D) A CROSS JOIN B

Задание засчитывается, если все варианты выбраны правильно.

Решение

Менее 10 строк могут вернуть: A и C.

Соединение Минимум строк Максимум строк
A LEFT JOIN B 1 (если совпадений нет, остаётся 1 строка A с NULL справа) 10 (если все строки B матчатся с A)
A RIGHT JOIN B 10 (все строки B всегда в результате) 10
A INNER JOIN B 0 (если нет совпадений) 10 (если все B матчатся с A)
A CROSS JOIN B 10 (всегда 1 × 10 = 10) 10

Почему так

  • LEFT JOIN A → B. Все строки A остаются. Если ни одна строка B не сматчилась → результат = 1 строка (с NULL в правой части). При совпадениях — до 10 строк.
  • RIGHT JOIN A → B. Все строки B остаются. Минимум = 10 (несовпавшие пойдут с NULL слева).
  • INNER JOIN. Только пересечение. Если нет общих ключей — 0 строк. Иначе ≤ 10.
  • CROSS JOIN. Декартово произведение 1 × 10 = 10. Никаких условий, всегда ровно 10.

Граничные примеры

-- A INNER JOIN B без совпадений: 0 строк
SELECT * FROM A JOIN B ON A.id = B.id WHERE A.id NOT IN (SELECT id FROM B);
 
-- A LEFT JOIN B без совпадений: 1 строка
SELECT * FROM A LEFT JOIN B ON FALSE;

Подводные камни

  1. Считать, что LEFT JOIN всегда = размер левой таблицы. Это верно только при join-е 1:1 (или 1:0). При совпадении одной строки A с несколькими B результат раздувается.
  2. Путать INNER с CROSS. INNER JOIN ... ON TRUECROSS JOIN. Без ON INNER JOIN синтаксически некорректен.
  3. RIGHT JOIN против LEFT JOIN. Симметричны: A RIGHT JOIN B = B LEFT JOIN A (по строкам — те же).

Эталонный ответ

A, C. LEFT JOIN (минимум 1 строка) и INNER JOIN (минимум 0) могут дать меньше 10. RIGHT JOIN всегда ≥ 10, CROSS JOIN всегда ровно 10.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти