Есть ли смысл задавать вопросы по JOIN в SQL
Что проверяют
Интервьюер хочет понять, считаете ли вы SQL рабочим инструментом тестировщика или «задачей разработчиков». Правильный ответ: смысл есть, и дальше вас почти наверняка попросят написать запрос, например найти клиентов без заказов.
Как отвечать
Объясните, зачем JOIN нужен именно в тестировании:
- проверка результата: после оформления заказа через UI или API сверить, что в
ordersиorder_itemsпоявились нужные строки с правильнымcustomer_id; - поиск битых данных: записи без родителя ищутся через
LEFT JOIN ... WHERE parent.id IS NULL. Так находят заказы удалённых клиентов или позиции без заказа; - сверка отчётов: суммы на экране аналитики сравнивают с агрегатом по связанным таблицам;
- подготовка данных: пользователя в нужном состоянии, например с активной подпиской и неоплаченным счётом, быстрее найти запросом, чем кликами.
Типы назовите коротко: INNER JOIN оставляет только совпавшие строки, LEFT JOIN все строки левой таблицы с NULL там, где пары нет, RIGHT JOIN зеркально, FULL OUTER JOIN все строки обеих (в MySQL его нет, собирают через UNION левого и правого), CROSS JOIN даёт декартово произведение, self join нужен для иерархий вроде «сотрудник и руководитель».
Сильнее всего звучат ловушки, которые вы сами ловили в данных: размножение строк при связи «один ко многим», из-за которого COUNT и SUM завышены, и потерянные строки при INNER JOIN там, где связь необязательна.
Где спотыкаются
Ставят условие на правую таблицу в WHERE после LEFT JOIN. Строки с NULL отсекаются, и запрос тихо превращается во внутреннее соединение. Условие нужно переносить в ON.
Забывают, что NULL не равен NULL: строка с пустым ключом ни с чем не соединится.
Объясняют JOIN только кругами Эйлера. Они не показывают дублирование строк, и на задаче с подсчётом кандидат ошибается.