Написать SQL запрос для вывода строк, где имя начинается на букву Я
Что проверяют
Умеете ли вы написать простой запрос и увидеть в нём подводные камни. Для тестировщика важнее не синтаксис, а вопрос, который идёт следом: какие данные сломают эту выборку и как вы проверите, что она полная.
Как отвечать
Базовое решение:
SELECT * FROM users WHERE first_name LIKE 'Я%';Символ процента означает любое количество любых символов, поэтому шаблон ловит всё, что начинается на нужную букву. Подчёркивание в шаблоне заменяет ровно один символ, это пригодится в соседних вопросах.
Дальше проговорите три вещи, которые отличают ответ джуна от ответа тестировщика.
Регистр. В PostgreSQL оператор LIKE чувствителен к регистру, и для нечувствительного поиска берут ILIKE или приведение к одному регистру. В MySQL поведение задаёт сортировка столбца, и с типовой сортировкой поиск выйдет нечувствительным. То есть один и тот же запрос на двух базах вернёт разное.
Кодировка и сортировка столбца. Для кириллицы сравнение идёт по правилам выбранной сортировки, и на базе с неподходящими настройками запрос молча вернёт пусто.
Производительность. Шаблон с процентом только справа позволяет задействовать индекс по столбцу, а шаблон вида '%Я%' заставляет читать всю таблицу.
Где спотыкаются
Проверяют запрос на одной аккуратной строке и считают задачу закрытой. Данные почти всегда грязные: пробел перед именем, неразрывный пробел, похожая буква из другого алфавита, пустая строка. Шаблон их не поймает, и дефект уедет на прод.
Не учитывают, что в PostgreSQL индекс для префиксного поиска работает не при любой сортировке: на локали, отличной от машинной, нужен индекс со специальным классом операторов. На маленькой таблице разницы не видно, на большой запрос внезапно становится медленным.
Забывают про пустые значения. Строки, где имя не заполнено, не попадут ни в выборку по шаблону, ни в выборку с отрицанием этого условия, потому что сравнение с неопределённостью не даёт истину. Полноту выдачи приходится проверять отдельно.