Базовый курс SQL. Оператор LIKE. Использование метасимволов.

Forums:

[к оглавлению]

Помимо различных способов фильтрации данных, которые мы рассмотрели в предыдущих главах, синтаксис SQL предлагает возможность извлечь данные, частично совпадающие с неким шаблоном, который формируется при помощи метасимволов. Обратите внимание, что применить это можно только к полям со строковым значением.

Чтобы показать СУБД, что в условии WHERE есть шаблон, дополнительно используется оператор LIKE.

Неизвестное количество символов. Метасимвол %

Метасимвол % используется чаще всего и означает любое количество любых символов. Его можно вставлять в разных местах шаблона: в начале строки, в конце, в середине и даже сразу и там, и там.

Рассмотрим на примере. Предположим, нам нужно найти все экзамены, проходящие на втором этаже. Для этого составим шаблон, указывающий, что значение номера кабинета должно начинаться с 2**:

SELECT exam_id, room_number
FROM Exams
WHERE room_number LIKE '2%';

Получим:

emam_id   |   room_number
------------------------------------------
20005      |   201
20156      |   213

Метасимвол % также может означать и отсутствие символов, поэтому, строго говоря, в нашу выборку может попасть и кабинет с номером 2. А вот кабинеты с двойками в середине в выборку не попадут. Для этого шаблон должен выглядеть так:

 '%2%' -- найдёт все значения с 2 в любом месте строки, независимо от количества символов до или после шаблона

Некоторые СУБД заполняют пробелами всё свободное пространство поля, если значение меньше его предусмотренной длины. Иногда % используют в начале и конце строки для того, чтобы избежать несовпадений в таких случаях.

Реже используется поиск фрагментов текста с % в середине, но и это возможно:

SELECT student_surname, student_email
FROM Students
WHERE student_email LIKE '%k%@mail.ru%';
student_surname   |   student_email
------------------------------------------
Колобков    |   kolodm@mail.ru   

Регистр символов - важный момент. В некоторых СУБД он может игнорироваться, в других строго соблюдается. Например, в PostgreSQL шаблон с маленькой буквы не даст результата:

SELECT student_surname, student_email
FROM Students
WHERE student_surname LIKE 'коло%';</pre>

student_surname   |   student_email
------------------------------------------  

С большой - напротив:

SELECT student_surname, student_email
FROM Students
WHERE student_surname LIKE 'Коло%';

<pre class="brush: sql">student_surname   |   student_email
------------------------------------------
Колобков    |   kolodm@mail.ru   

Один символ. Метасимвол _

Метасимвол _ означает один любой символ. Рaссмотрим пример, в котором найдём все группы, относящиеся к факультету компьютерных технологий:

SELECT group_id, group_name
FROM Groups
WHERE group_name LIKE '___F%';

<pre class="brush: sql">group_id   |   group_name
------------------------------------------
31548    |   304F  
30913    |   117F        

Символ "_" использован 3 раза и затем "F".

В отличии от %, _ всегда означает именно 1 знак, не больше и не меньше.

Ещё некоторые советы

  • NULL. Поля, имеющие значения NULL, не попадут в выборку ни при каком шаблоне, даже '%'
  • Метасимволы - удобный и мощный инструмент, но они существенно увеличивают время поиска. Поэтому старайтесь использовать из только в случае необходимости
  • Медленнее всего обрабатываются запросы с метасимволами в начале шаблона
  • Внимательно проверяйте шаблон: ошибка в позиции метасимвола приведёт к неверной выборке
  • В различных СУБД существуют также некоторые другие метасимволы, например [], выполняющий поиск по набору символов. Но PostgreSQL и MySQL их не поддерживают, поэтому для более детального описания обратитесь к документации вашей СУБД

Следующая страница. Вычисляемые поля.
Оглавление.