TOP

SQL-Урок 5. Символы подстановки и регулярные выражения (LIKE)

Часто, для фильтрации данных нам нужно будет осуществить выборку не по точному совпадению условия, а по приближенному значению. То есть, когда, например, мы ищем товар, название которого соответствует определенному шаблону (регулярному выражению) или содержит определенные символы или слова. Для таких целей в SQL существует оператор LIKE, ищущий приближенные значения. Для конструирования такого шаблона используются метасимволы (специальные символы, для поиска части значения), а именно: знак процента (%) или звездочка (*), символ подчеркивания (_) или знак вопроса (?), квадратные скобки" ([ ]).


1. Метасимвол знак процента (%) или звездочка (*)

Давайте из нашей таблицы, например, отберем записи, относящиеся только к товарам, содержащим в своем названии слово Skis (лыжи). Для этого составим соответствующий шаблон:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE '*Skis*'

Как видим, СУБД отобрала только те записи, где в колонке Product были товары, содержащие слово Skis.

В данном примере используется метасимвол "звездочка" (*), поскольку MS Access не поддерживает "символ процента" (%) для оператора LIKE.

2. Метасимвол знак подчеркивания (_) или вопросительный знак (?)

Знак подчеркивания или вопросительный знак применяется для того, чтобы заменить один символ в слове. Давайте в слове Bikes заменим все громкие буквы на "знак вопроса" (?) и посмотрим на результат:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE 'B?k?s'
Мы использовали метасимвол "знак вопроса" (?), поскольку MS Access не поддерживает "знак подчеркивания" (_) для оператора LIKE.

3. Метасимвол квадратные скобки ([ ])

Метасимвол "квадратные скобки" ([ ]) используется для одновременного указания набора символов, по которым нужно произвести поиск.

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[TN]*'

В примере выше мы отобрали записи, где в поле City названия городов начинаются с буквы T или N.

Mетасимвол "квадратные скобки" ([ ]) не поддерживается в диалекте MySQL.

Также, в данном случае, мы можем использовать еще один метасимвол, выполняющий обратное действие. Добавим в наше регулярное выражение восклицательный знак (!), что означает "не равно" (для MS Access) или знак степени (^) (для других СУБД).

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[!TN]*'

То есть, последний созданный нами запрос будет читаться как: выбрать все колонки из таблицы Sumproduct, и только те записи, где в поле City названия городов не начинаются на буквы T или N. Дополнительно отметим, что набор букв в метасимволе "квадратные скобки" отвечает только за одну позицию в тексте.

Мы можем получить аналогичный результат, если воспользоваться уже известным нам оператором NOT, однако со восклицательным знаком (!) запись будет короче.