Как вывести из таблицы записи, где псевдоним начинается со слова 'черный' в SQL
Что проверяют
Умеете ли вы сами достать нужные строки из базы, чтобы проверить результат теста, а не ждать разработчика. Задача простая, поэтому следом почти всегда спрашивают про регистр, про «ё» и про то, чем «начинается со слова» отличается от «начинается с букв».
Как отвечать
Базовый запрос строится на LIKE с шаблоном:
SELECT * FROM users WHERE nickname LIKE 'черный%';Дальше покажите, что видите подводные камни:
%и_: первый заменяет любое число символов, включая ноль, второй ровно один символ. Если они встречаются в самом значении, их экранируют черезESCAPE;- регистр: в PostgreSQL
LIKEчувствителен к регистру, для «Черный» и «ЧЕРНЫЙ» нуженILIKEилиlower(nickname) LIKE 'черный%'. В MySQL результат зависит от collation колонки, у распространённых_ciсравнение регистронезависимое; - слово, а не префикс: шаблон
'черный%'найдёт и «черныйкот». Если нужно именно слово, пишутnickname = 'черный' OR nickname LIKE 'черный %'; - «ё»: «чёрный» и «черный» для базы разные строки, их ищут отдельным условием или договариваются о нормализации данных;
- пробелы и NULL: ведущий пробел ломает шаблон, помогает
TRIM, а строки сNULLв выборку не попадут никогда.
Уточните, что «псевдоним» здесь это колонка с ником, а не алиас из AS. Такое уточнение показывает, что вы читаете задачу внимательно.
Где спотыкаются
Пишут WHERE nickname = 'черный%'. Знак равенства сравнивает строку буквально, и % там обычный символ.
Забывают про регистр и получают пустую выборку там, где данные есть. Для тестировщика это худший исход: вы заводите баг на то, чего нет.
Ставят % с обеих сторон, '%черный%'. Так находится и «иссиня-черный», то есть проверяется уже не «начинается», а «содержит», и обычный индекс по колонке такой запрос не использует.