Сколько столбцов будет выведено при LEFT JOIN двух таблиц с 2 и 3 столбцами
Что проверяют
Различаете ли вы строки и столбцы в результате соединения. Задача выглядит как арифметика, а проверяет, не перепуталось ли у вас главное: тип соединения влияет на набор строк, а ширину результата задаёт список в SELECT.
Как отвечать
Прямой ответ: при SELECT * получится пять столбцов. Тип соединения на это не влияет, INNER, LEFT, RIGHT, FULL и даже CROSS дадут те же пять, различаться будут строки и наличие NULL.
Дальше добавьте то, что отличает тестировщика от заучившего правило:
LEFT JOINоставляет все строки левой таблицы, а там, где справа совпадения нет, столбцы правой заполняютсяNULL;- строк может стать больше, чем было слева: если одному ключу соответствует несколько строк справа, левая строка размножится;
- столбцов будет четыре, а не пять, при
USING (id)илиNATURAL JOIN, потому что общий столбец в выводе схлопывается в один.
Полезно упомянуть практику: два столбца с именем id в выводе неразличимы, поэтому в проверках их разводят алиасами вроде a.id AS a_id, иначе автотест читает не ту колонку и зеленеет впустую.
Где спотыкаются
Отвечают «шесть», посчитав столбец соединения дважды, или уходят в число строк. Вопрос про столбцы решается сложением, и любая другая арифметика показывает, что модель результата соединения в голове не сложилась.
Второе: считают, что LEFT JOIN не меняет количество строк. Меняет, когда справа дубли по ключу, и это классический источник задвоенных сумм в отчётах. Проверка простая: сравнить count(*) до соединения и после.
Третье: путают условие соединения с фильтром. Строка WHERE b.status = 'active' отбрасывает записи, у которых правая часть оказалась пустой, и превращает LEFT JOIN в INNER JOIN. Условие по правой таблице должно стоять в ON.