Какие запросы используются в базах данных
Что проверяют
Умеете ли вы сами достать данные из базы для проверки, а не только смотреть на интерфейс. Следом почти всегда дают практику: написать запрос с JOIN и GROUP BY или найти дубли в таблице.
Как отвечать
Начните с классификации SQL-команд, а потом покажите, чем из этого пользуется тестировщик:
- DML:
SELECT,INSERT,UPDATE,DELETE, работа с данными. Основной инструмент QA; - DDL:
CREATE,ALTER,DROP,TRUNCATE, изменение структуры. Нужны для проверки миграций и подготовки тестовых схем; - DCL:
GRANT,REVOKE, права доступа. Пригождаются при проверке ролевой модели; - TCL:
BEGIN,COMMIT,ROLLBACK, управление транзакциями.
Дальше конкретные сценарии. После действия в интерфейсе вы через SELECT проверяете, что запись появилась с правильными полями и статусом. JOIN связывает заказ с пользователем и позициями, а LEFT JOIN с условием IS NULL находит осиротевшие записи без родителя. GROUP BY с HAVING COUNT(*) > 1 ищет дубли, агрегаты COUNT и SUM сверяют итоги отчёта с сырыми данными. Тестовые данные удобно готовить внутри транзакции и откатывать через ROLLBACK, чтобы не засорять стенд.
Хорошо, если упомянете разницу WHERE и HAVING: первое фильтрует строки до группировки, второе группы после. И логический порядок выполнения: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY. Из него понятно, почему псевдоним из SELECT нельзя использовать в WHERE.
Где спотыкаются
Называют WHERE и JOIN видами запросов. Это части запроса, а сами команды делятся на DML, DDL, DCL и TCL.
Путают DELETE и TRUNCATE. Первое удаляет строки по условию и откатывается в транзакции, второе очищает таблицу целиком, и его поведение зависит от СУБД: в PostgreSQL TRUNCATE откатывается, в MySQL и Oracle фиксируется сразу.
Запускают UPDATE или DELETE без WHERE на общем стенде. Привычка сначала выполнить то же условие в SELECT и посмотреть, какие строки попадут под изменение, спасает чужие тестовые данные.