Использовали ли вы SQL запросы с join, group by, order by?
Что проверяют
Пишете ли вы запросы сами и знаете ли порядок выполнения частей запроса.
Как отвечать
Отвечайте не «да», а через задачи, которые решали, и сразу покажите понимание механики.
Соединения: INNER оставляет только совпавшие строки, LEFT сохраняет все строки левой таблицы, подставляя NULL для несовпавших. Типичная задача тестировщика: найти осиротевшие записи.
select o.id from orders o
left join users u on u.id = o.user_id
where u.id is null;Тут же назовите ловушку: условие на правую таблицу, вынесенное в WHERE, превращает LEFT JOIN в INNER, потому что NULL не проходит фильтр. Такие условия ставят в ON.
Группировка: GROUP BY собирает строки, агрегатные функции считают по группам, а фильтр по агрегату идёт в HAVING, а не в WHERE. Классика для поиска дублей:
select email, count(*) from users
group by email having count(*) > 1;Сортировка: ORDER BY с несколькими ключами и направлением, плюс управление положением NULL.
Главное, что показывает понимание, это порядок выполнения: FROM и соединения, затем WHERE, затем GROUP BY, затем HAVING, затем SELECT, затем ORDER BY и LIMIT. Из него следуют два практических вывода: алиас, объявленный в SELECT, недоступен в WHERE, но доступен в ORDER BY; и фильтровать по агрегату в WHERE нельзя.
Про свои задачи: сверка данных интерфейса с базой, подготовка тестовых данных, поиск дублей и осиротевших строк, проверка миграции по контрольным суммам.
Где спотыкаются
Ставят условие на правую таблицу в WHERE при внешнем соединении.
Пытаются фильтровать по COUNT в WHERE.
Не знают порядка выполнения и не понимают, почему алиас не виден.
Считают, что LEFT JOIN и RIGHT JOIN дают разный результат при перестановке таблиц.