Търсене и регулярни изрази в MySQL
MySQL DBMS има различни инструменти за търсене, включително оператораLIKE, който извършва най-простите операции за търсене, оператораRLIKE, който предоставя възможности за търсене на регулярен израз.
Операторът LIKEОператорътLIKEе проектиран да сравнява низове с помощта на прости регулярни изрази. Операторът често се използва в конструкциятаWHEREи връща 1 или 0.
Сравнението на низове е нечувствително към малки и главни букви, освен ако не се използва ключовата думаBINARY, което означава, че низът трябва да се третира като двоична последователност.
Заедно с оператораLIKEе възможно да се използват специални знаци: "%" - Съвпада с произволен брой знаци и тяхната липса. "_" - Съвпада с един знак. Търсенето на знаците "%" и "_" се извършва с помощта на конструкциите "\%" и "\_".
Операторът може да се използва с отрицание:НЕ КАТО. В този случай селекцията ще включва записи, които не отговарят на посочените условия.
ОператорRLIKEОператорътRLIKE(и неговият синонимREGEXP) търси според регулярни изрази, което ви позволява да зададете по-гъвкави условия за търсене, но този оператор е по-бавен от оператораLIKE.
Има няколко диалекта на регулярните изрази. В MySQL изпълнението е POSIX ориентирано.
Регулярният израз е модел, приложен към даден текст отляво надясно. Например регулярен израз, съдържащ обикновен текст, като „монитор“, съвпада с низ, съдържащ такъв подниз, като: „мониторинг“, „монитори“, „големи монитори“ и т.н.
отв таблицата market_cards ще бъдат избрани всички записи, в които полето NAME съдържа думата "торта", независимо къде в реда се намира тази дума (или по-точно комбинация от знаци).
За свързване на израза за търсене към началото или края на реда се използват следните знаци:'^'- свързва се към началото на реда.'$'- Закотвя се към края на реда.
Втората и третата заявка няма да върнат нищо, защото няма да намерят записи, завършващи с думата "cupcake"
Много по-често трябва да закотвите не към края или началото на ред, а към края или началото на дума. Тази задача се изпълнява от поредици:[[: :]]— Край на думата.
Друг специален знак:''— Подобен по значение (или), например „майка“ — ще бъдат избрани всички низове, включително „майка“ и „майка“.
Възможно е да използвате други специални знаци и класове знаци в регулярния израз:[abc]— ще бъдат избрани записи с всеки от знаците a,b,c.[0-9]— която и да е от цифрите. (подобно по значение на [0123456789]).[a-z]— която и да е от буквите от a до z.[a-z0-9]— всяка буква от българската азбука или цифра.[^0-9]- означава всяка стойност, различна от число. (в такива случаи '^' е вид отрицание).
За да дефинирате специални последователности в низове:'\t'е знак за разделяне.'\f'е краят на файла.'\n'— знак за нов ред.'\r'е знак за връщане на каретка.'\\'е обратната наклонена черта \.
В допълнение, класовете знаци за регулярен израз на POSIX работят:[:alnum:]са буквено-цифрови знаци.[:alpha:]са азбучни знаци.[:blank:]— знаци за интервал и табулация.[:cntrl:]са контролни знаци.[:digit:]— десетични цифри(0-9).[:graph:]— графични (видими) знаци.[:lower:]— букви с малки букви.[:print:]са графични или невидими знаци.[:punct:]— препинателни знаци.[:интервал:]са знаци за интервал, табулация, нов ред или знак за връщане на карета.[:upper:]са главни букви.[:xdigit:]са шестнадесетични цифри.
(Азбука - може да бъде българска или английска.)
Изразите в квадратни скоби съвпадат само с един знак и често се използват с квантори, които следват непосредствено знака и променят броя на срещанията на знака в низа.?- знакът или влиза в низа веднъж, или изобщо не го въвежда.*— произволен брой срещания на знак в низ, включително нула.+е едно или повече срещания на знак в низ.
ОператорътRLIKEможе да се използва с отрицаниетоNOT RLIKE- в този случай резултатът от работата му ще бъде селекция от редове, които не отговарят на дадените параметри.