JonH дуже добре висвітлив частину того, як написати запит. Однак є ще одне важливе питання, яке також слід зазначити, а саме характеристики продуктивності такого запиту. Повторимо це тут (адаптовано до Oracle):
SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;
Цей запит обмежує результат функції, застосованої до значення стовпця (результат застосування LENGTH
функції до EmployeeName
стовпця). В Oracle і, ймовірно, у всіх інших RDBMS, це означає, що регулярний індекс на EmployeeName буде марним відповідати на цей запит; база даних здійснить повне сканування таблиці, що може бути дуже дорогим.
Однак різні бази даних пропонують функцію індексів функцій, яка призначена для прискорення таких запитів. Наприклад, в Oracle ви можете створити такий індекс:
CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));
Однак це може не допомогти у вашому випадку, оскільки індекс може бути не дуже вибірковим для вашого стану. Під цим я маю на увазі наступне: ви запитуєте рядки, де довжина імені перевищує 4. Припустимо, що 80% імен співробітників у цій таблиці довші за 4. Ну, тоді база даних, ймовірно, завершиться ( правильно), що не варто використовувати індекс, тому що, ймовірно, доведеться все-таки прочитати більшість блоків у таблиці.
Однак якщо ви змінили запит, щоб сказати LENGTH(EmployeeName) <= 4
, або LENGTH(EmployeeName) > 35
, якщо припустити, що дуже мало співробітників мають імена з меншою ніж 5 символів або більше 35, то індекс буде вибрано і покращить продуктивність.
У будь-якому разі, коротше: остерігайтеся характеристик продуктивності запитів, таких як той, який ви намагаєтеся написати.
AND
заяву, наприкладSELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;