Написать SQL запрос для удаления записей, где отчество равно Иванов
Что проверяют
Для тестировщика это не проверка синтаксиса DELETE, а проверка осторожности. Смотрят, зададите ли вы уточняющие вопросы до того, как напишете запрос, меняющий данные, и заметите ли странность в самой постановке: «Иванов» это фамилия, отчество выглядело бы как «Иванович». Формулировка дана так намеренно.
Как отвечать
Сначала уточните схему: как называется таблица, в какой колонке лежит отчество, есть ли внешние ключи на эту таблицу и не принято ли в проекте вместо удаления гасить флаг. Потом покажите безопасную последовательность:
BEGIN;
SELECT count(*) FROM persons WHERE middle_name = 'Иванов';
DELETE FROM persons WHERE middle_name = 'Иванов';
COMMIT;Смысл в порядке действий: сначала SELECT с тем же условием, чтобы увидеть число затрагиваемых строк, затем удаление внутри транзакции, и COMMIT только когда количество совпало с ожидаемым. Не совпало, значит ROLLBACK.
Дальше проговорите то, что отличает тестировщика от разработчика. Значения с пробелами по краям и в другом регистре под = не попадут, поэтому стоит спросить про нормализацию данных и коллацию. Строки с NULL в этой колонке условие тоже не поймает. Связанные записи либо удалятся каскадом, либо запрос упадёт на ограничении внешнего ключа, и оба варианта проверяются отдельно.
Где спотыкаются
Пишут запрос сразу, без предварительного SELECT и без транзакции. На собеседовании это читается не как ошибка синтаксиса, а как сигнал: человек готов выполнить разрушающую операцию на данных, которых ни разу не видел.
Принимают постановку как есть и не замечают, что в поле отчества ищут фамилию. Проверяющему интереснее всего, спросите ли вы, действительно ли имелось в виду отчество, или в колонке лежит мусор после миграции.
Считают, что = 'Иванов' найдёт все варианты написания. В зависимости от коллации сравнение может оказаться чувствительным к регистру, хвостовые пробелы в разных СУБД сравниваются по-разному, поэтому после удаления обязательно проверяют, что осталось.