Что такое подзапросы в SQL
Что проверяют
Умеет ли тестировщик проверять данные напрямую в базе, а не только глазами через интерфейс. Подзапрос это инструмент сверки: найти строки без пары, посчитать ожидаемое значение и сравнить с тем, что вернул сервис.
Ещё смотрят на аккуратность. QA ходит в общий стенд или предпродакшен, поэтому читаемый и лёгкий SELECT ценится выше знания экзотического синтаксиса.
Как отвечать
Подзапрос это вложенный SELECT, результат которого использует внешний запрос. Практически полезны три формы: условие через IN или EXISTS, скалярный подзапрос для сравнения со средним или максимумом, производная таблица в FROM, когда надо сначала сгруппировать, а потом отфильтровать.
Поиск потерянных связей после теста импорта:
SELECT o.id FROM orders o
WHERE NOT EXISTS (SELECT 1 FROM customers c WHERE c.id = o.customer_id);Проверка на дубли перед тестом уникальности:
SELECT email FROM users GROUP BY email HAVING count(*) > 1;Стоит различать некоррелированный подзапрос, который считается один раз, и коррелированный, ссылающийся на колонки внешнего запроса и вычисляемый на каждую строку: второй на большой таблице заметно дороже.
Хорошо добавить, зачем вам это в работе: подтвердить дефект данными, отличить ошибку отображения от ошибки записи, собрать подходящий тестовый набор.
Где спотыкаются
Ставят агрегат рядом с обычной колонкой без GROUP BY. Строгий режим вернёт ошибку, нестрогий молча выдаст произвольное значение колонки, и проверка окажется ложноположительной.
Берут NOT IN по колонке, где возможен NULL, получают пустую выдачу и делают вывод, что сирот нет. На деле их просто не нашли. Безопасная форма это NOT EXISTS либо явное исключение NULL в подзапросе.
Запускают выборку по всей боевой таблице без ограничения и ждут ответа минутами, заодно нагружая общий стенд. В сверке всегда берите нужные колонки и ставьте предел на число строк.