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. Розрахункові (обчислювальні) поля