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

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

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

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

SELECT * FROM Sumproduct WHERE Product LIKE '*Skis*'

Как видим, СУБД отобрала только те записи, где в колонке Product были товары, содержащие слово Skis. Также отметим, что в данном примере используется метасимвол "звездочка" (*), поскольку СУБД Access не поддерживает "знак процента" (% ) для оператора LIKE.

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

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

SELECT * FROM Sumproduct WHERE Product LIKE 'B?k?s'

Мы использовали метасимвол "вопросительный знак" (?), поскольку СУБД Access не поддерживает "знак подчеркивания" (_) для оператора LIKE.

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

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

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

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

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

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

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

Статьи по теме:

  • SQL-Урок 4. Фильтрация данных (WHERE)
  • SQL-Урок 6. Вычисляемые поля