Базовый курс SQL. Оператор LIKE. Использование метасимволов.
Primary tabs
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 их не поддерживают, поэтому для более детального описания обратитесь к документации вашей СУБД
- Log in to post comments
- 1214 reads