Один из ключевых принципов проектирования современных систем управления реляционными базами данных заключается в том, что вы, пользователь, не имеете никакого реального контроля и не говорите о том, как данные на самом деле хранятся на жестком диске СУБД.Это означает, что вы не можете предполагать, что данные (а) хранятся в алфавитном порядке на диске или (б) что при извлечении данных они будут извлечены в алфавитном порядке.Единственный способ быть абсолютно на 100% уверенным в том, что вы получаете данные, которые вам нужны, - это изложить их так, как вы этого хотите, а все остальное - предположение, что однажды может взорваться вам в лицо.
Почемуэто имеет значение?Поскольку ваш запрос предполагает, что данные, которые вы будете получать, будут в алфавитном порядке, начиная с буквы «А» и увеличиваясь.(И это предполагает непротиворечивый случай - как насчет «A» против «a»? Что-нибудь с начальными пробелами или числами? Разные системы по-разному обрабатывают разные данные ...) Исправив это достаточно просто, добавьте предложение ORDER BY
, такое как:
select * from dict where word like ("%e%") and id < 1000 order by word;
Конечно, если у вас есть более 1000 слов, начинающихся с «А» и содержащих «е», у вас проблемы ... и если у вас меньше 1000, вы в конечном итогес кучей "B" слов.Попробуйте что-то вроде:
select * from dict where left(word. 1) = "A" and word like ("%e%");
В зависимости от вашей РСУБД и индексации, имеющейся у вас в таблице, система может сначала идентифицировать все слова «А», а затем выполнить «содержит e »."Отметьте только их.