Шаг 15 - Оператор LIKE

Сейчас пожалуй настало время самого, на мой взгляд, употребляемого выражения в операциях поиска данных в таблицах - LIKE! На первый взгляд ничего особо примечательного в нем нет! Но это только на первый взгляд ... :) А вот если присмотреться по внимательнее, то можно заметить кое что интересное. Итак, синтаксис по стандарту SQL92:

--- ИМЯ СТОЛБЦА --------- LIKE (шаблон) -----------------------------------
		   NOT			   ESCAPE (имя пропуска)

Вот так казалось бы все просто, однако это не так! Давайте выполним простой запрос: Показать лимит кредита для компании "Апельсин":

SQL> 1  SELECT COMPANY, CREDIT_LIMIT
     2  FROM CUSTOMERS
     3  WHERE COMPANY  = 'Апельсин'
     4  /

COMPANY                        CREDIT_LIMIT
------------------------------ ------------
Апельсин                             50,834

Чего проще! А вот если оператор при вводе спутал третью букву в слове, "Апельсин" тогда при запуске запроса вы ничего не получите! Либо вы просто забыли как там называлась эта компания не то "Злыдень корпорейтед", не то "Студень лимитид", да это собственно и не важно, скажем вы просто помните, что там звучало слово скажем "Клоун"! Теперь следует применить оператор LIKE с шаблоном '%' и все встанет на свои места! Например вот так:

SQL> SELECT COMPANY, CREDIT_LIMIT
  2  FROM CUSTOMERS
  3  WHERE COMPANY LIKE '%н'
  4  /

COMPANY                        CREDIT_LIMIT
------------------------------ ------------
Смешной клоун                        35,645
Апельсин                             50,834

В данном случае говориться, а именно - LIKE '%н' покажи мне все записи, которые оканчиваются на букву 'н', то есть, если шаблон '%' стоит первый, а его заканчивает некое скажем - 'бесы', то при выполнении запроса увидим:

SQL> SELECT COMPANY, CREDIT_LIMIT
  2  FROM CUSTOMERS
  3  WHERE COMPANY LIKE '%бесы'
  4  /

COMPANY                        CREDIT_LIMIT
------------------------------ ------------
Безбашенные балбесы                  20,765
Просто Балбесы			     60,653

А это именно и означает что, начальные буквы выражения нам "по барабану", но оканчиваться оно должно так как мы и просим! Что собственно и требовалось доказать! Если написать 'С%', догадались? Естественно получим все записи начинающиеся на букву 'С', а если написать, 'Су%', то можно найти все, что касается "КБ Сухого", но это если проломитесь в БД самого КБ! Дерзайте!!! Ни кто не запретит и такое выражение '%шар%', которое гласит начало и окончание нам "по барабану", а вот словосочетание 'шар', нас особенно интересует!

Сразу хочу предупредить, что если ввести, что-то типа WHERE COMPANY LIKE '%', можно нарваться на неприятность, а именно: WHERE COMPANY LIKE '%' эквивалентно, если бы вы WHERE оператор вообще не писали, а так и нужно было бы поступить, если бы вы были в здравом уме и действительно хотели получить все содержимое таблицы! Да именно, такое выражение вернет вам все записи в таблице! Хорошо если она не большая, а если в ней миллион, другой строк, то придется пристрелить SQLPlus, все равно не дождетесь результата, да и зачем это нужно!

Еще иногда вместо шаблона '%' применяется знак '*', например в MS SQL, ну и кто может быть знаком с DOS и не раз применял что-то вроде c:\>dir *.exe! :)))

А что если действительно спутан только один символ? Как я говорил в самом начале, тогда применяем шаблон '_' - это означает, что вы не уверены, например в правильности ввода какого либо слова! Например:


SQL> SELECT COMPANY, CREDIT_LIMIT
  2  FROM CUSTOMERS
  3  WHERE COMPANY LIKE 'Ап_льсин'
  4  /

COMPANY                        CREDIT_LIMIT
------------------------------ ------------
Апельсин                             50,834

Какой бы не была пропущенная буква вы обязательно что-нибудь найдете!!! Пробуйте!!!

А вот еще одна ситуация, которая может встретиться, не так часто, но все же! Что, если имя компании начинается на '%%%'. Что тогда? А все очень просто - применяем "убегающие символы"! А именно последовательности пропуска, которые состоят из выражения ESCAPE и собственно строки или символа пропуска, в качестве которого вы можете применить например '$', тогда символ после '$' будет считаться литералом, а далее можно снова использовать подстановочный символ вот так:

WHERE PRODUCT LIKE 'A$%BS%' ESCAPE '$'

Еще раз, символ идущий за '$', считается литералом, а второй символ '%', считается подстановочным то есть "по барабану"! Понятно! Но вот в умных, книгах рекомендуется таких выражений и сложностей избегать! А, а вообще это все мне например напоминает, работу с регулярными выражениями, которые гораааааздооо сложнее! Но, интересно! Вот такие приключения! :)) На последок, поэкспериментируйте с оператором LIKE и сами сможете убедиться, на сколько он гибок и удобен!


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 10.08.03