Пошук та регулярні висловлювання в MySQL

СУБД MySQL має різні інструменти для пошуку, серед яких операторLIKE, що здійснює найпростіші операції пошуку, операторRLIKE, що надає можливості пошуку за регулярними виразами.

Оператор LIKEОператорLIKEпризначений для порівняння рядків з використанням найпростіших регулярних виразів. Оператор часто використовується у конструкціїWHEREі повертає 1 або 0.

Порівняння рядків не залежить від регістру, якщо не використовується ключове словоBINARY, що означає, що рядок слід розглядати як двійкову послідовність.

Разом з операторомLIKEможливе використання спеціальних символів: "%" — відповідає будь-якій кількості символів та їх відсутності теж. "_" — Відповідає одному символу. Пошук символів "%" та "_" здійснюється за допомогою конструкцій "\%" та "\_".

Оператор можна використовувати з запереченням:NOT LIKE. У цьому випадку у вибірку потраплять записи, що не задовольняють заданим умовам.

Оператор RLIKEОператорRLIKE(а також синонімREGEXP) здійснює пошук відповідно до регулярних виразів, що дозволяє задати більш гнучкі умови пошуку, проте при цьому цей оператор працює повільніше ніж операторLIKE.

Існує кілька діалектів регулярних виразів. У СУБД MySQL реалізація орієнтована відповідність стандарту POSIX.

Регулярний вираз це шаблон, що застосовується до заданого тексту зліва направо. Наприклад регулярне вираз містить звичайний текст, наприклад 'монітор', відповідає рядку містить таку підрядок наприклад: 'моніторинг', 'монітори', 'великі монітори', і т.п.

Зтаблиці market_cards будуть вибрані всі записи де поле NAME містить слово 'кекс' у своїй будь-де рядки це слово (чи точніше сказати поєднання символів) розташовано.

Щоб прив'язати шуканий вираз до початку рядка або до кінця використовуються символи:'^'- прив'язує до початку рядка.'$'- прив'язує до кінця рядка.

Другий і третій запити нічого не повернуть, оскільки не знайдуть записів, що закінчуються на слово 'кекс'

Набагато частіше необхідно прив'язуватися ні до кінця чи початку рядка, а до кінця чи початку слова. Таке завдання реалізують послідовності:[[: :]]- Кінець слова.

Ще один спеціальний символ:''- Аналогічний за змістом (або), наприклад 'мамамати' - будуть вибрані всі рядки, що включають і 'мама' і 'мати'.

У регулярному виразі можливе використання інших спецсимволів та класів символів:[abc]- будуть вибрані записи з будь-яким із символів a, b, c.[0-9]- будь-яка із цифр. (Аналогічний за змістом [0123456789]).[а-я]- будь-яка з літер від а до я.[а-я0-9]— будь-яка буква українського алфавіту чи цифра.[^0-9]означає будь-яке значення крім цифри. (У таких випадках '^' - свого роду заперечення).

Для визначення спеціальних послідовностей усередині рядків:'\t'- символ табуляції.'\f'— кінець файлу.'\n'— символ перекладу рядка.'\r'- символ повернення каретки.'\\'— символ зворотного слеша.

Крім цього діють класи символів POSIX регулярних виразів:[:alnum:]- алфавітно-цифрові символи.[:alpha:]- символи алфавіту.[:blank:]— символи пробілу та табуляції.[:cntrl:]— символи керування.[:digit:]— десяткові цифри(0-9).[:graph:]- графічні (видимі) символи.[:lower:]- символи алфавіту в нижньому регістрі.[:print:]— графічні чи невидимі символи.[:punct:]— розділові знаки.[:space:]— символи пробілу, табуляції, нового рядка або повернення каретки.[:upper:]— символи алфавіту у верхньому регістрі.[:xdigit:]— шістнадцяткові цифри.

(Алфавітні символи можуть бути як українськими так і англійськими.)

Вирази у квадратних дужках відповідають лише одному символу і часто вживаються з квантифікаторами, які йдуть відразу за символом і змінюють кількість його входжень у рядок.?— символ або входить у рядок один раз, або взагалі до нього не входить.*— будь-яка кількість входжень символу в рядок, у тому числі нуль.+— одне або більше символів входу в рядок.

ОператорRLIKEможна використовувати з запереченнямNOT RLIKE— у цьому випадку результатом його роботи буде вибірка рядків, що не відповідають заданим параметрам.