Какво представляват заместващите символи на MySQL?
MySQL заместващите символи са знаци, които помагат за търсене на данни, отговарящи на сложни критерии. Заместващите символи се използват заедно с оператора за сравнение LIKE или с оператора за сравнение NOT LIKE.
Защо да използвате WildCards?
Ако сте запознати с използването на SQL, може да си помислите, че можете да търсите всякакви сложни данни, като използвате клаузата SELECT и WHERE. Тогава защо да използваме заместващи символи?
Преди да отговорим на този въпрос, нека разгледаме един пример. Да предположим, че маркетинговият отдел на видеотеката Myflix е извършил маркетингови промоции в град Тексас и би искал да получи обратна връзка за броя на членовете
регистриран от Тексас, можете да използвате следния оператор SELECT заедно с клаузата WHERE, за да получите желаната информация.
SELECT * FROM members WHERE postal_address = 'Austin , TX' OR postal_address = Dallas , TX OR postal_address = Iola,TX OR postal_adress = Houston ,TX';
Както можете да видите от горната заявка, клаузата "WHERE" става сложна. Използването на заместващи символи обаче опростява заявката, тъй като можем да използваме нещо просто като скрипта, показан по-долу.
SELECT * FROM members WHERE postal_address like '% TX';
Накратко, заместващите символи ни позволяват да развием мощни търсачки в нашите приложения, управлявани от данни.
Видове заместващи символи
% процента
% процентният знак се използва за задаване на образец от нула (0) или повече знака . Той има следния основен синтаксис.
SELECT statements… WHERE fieldname LIKE 'xxx%';
ТУК
- „SELECT statement ...“ е стандартната команда за SQL SELECT.
- „WHERE“ е ключовата дума, използвана за прилагане на филтъра.
- "LIKE" е операторът за сравнение, който се използва заедно с заместващи символи
- „xxx“ е всеки посочен стартов модел, като единичен знак или повече и „%“ съответства на произволен брой символи, започващи от нула (0).
За да оценим напълно горното твърдение, нека разгледаме практически пример
Да предположим, че искаме да получим всички филми, които имат думата "код" като част от заглавието, бихме използвали процентния заместващ знак, за да извършим съвпадение на шаблон от двете страни на думата "код". По-долу е SQL изразът, който може да се използва за постигане на желаните резултати.
SELECT * FROM movies WHERE title LIKE '%code%';
Изпълнението на горния скрипт в MySQL workbench срещу myflixdb ни дава резултатите, показани по-долу.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
7 | Davinci Code | NULL | NULL | 6 |
Забележете, че дори ако ключовата дума за търсене "код" се появи в началото или в края на заглавието, тя все пак се връща в нашия резултат. Това е така, защото нашият код включва произволен брой знаци в началото, след което съвпада с модела "код", последван от произволен брой знаци в края.
Нека сега модифицираме горния ни скрипт, за да включим процентния заместващ знак в началото само на критериите за търсене.
SELECT * FROM movies WHERE title LIKE '%code';
Изпълнението на горния скрипт в MySQL workbench срещу myflixdb ни дава резултатите, показани по-долу.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
7 | Davinci Code | NULL | NULL | 6 |
Забележете, че от базата данни е върнат само един запис. Това е така, защото нашият код съвпада с произволен брой знаци в началото на заглавието на филма и получава само записи, които завършват с шаблона "код".
Нека сега изместим заместващия процент в края на посочения модел, за да бъде съчетан. Модифицираният скрипт е показан по-долу.
SELECT * FROM movies WHERE title LIKE 'code%';Изпълнението на горния скрипт в MySQL workbench срещу myflixdb ни дава резултатите, показани по-долу.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
Забележете, че от базата данни е върнат само един запис. Това е така, защото нашият код съвпада с всички заглавия, които започват с модела "код", последван от произволен брой знаци.
_ подчертаване на заместващ знак
Подчертаният заместващ знак се използва, за да съответства точно на един знак . Да предположим, че искаме да търсим всички филми, излезли през 200-те години, където x е точно един знак, който може да има всякаква стойност. За да постигнем това, ще използваме символа за подчертаване на заместващ знак. Сценарият по-долу избира всички филми, издадени през годината "200x"
SELECT * FROM movies WHERE year_released LIKE '200_';
Изпълнението на горния скрипт в MySQL workbench срещу myflixdb ни дава резултатите, показани по-долу.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
9 | Honey mooners | Jhon Shultz | 2005 | 8 |
Забележете, че в нашия набор от резултати са върнати само филми, които имат 200 следвания от който и да е герой в издадената полева година. Това е така, защото символът за долно подчертаване съвпада с модела 200, последван от всеки отделен символ
Не като
Логическият оператор NOT може да се използва заедно с заместващите символи за връщане на редове, които не съответстват на посочения модел.
Да предположим, че искаме да получим филми, които не са били пускани през 200 пъти. Бихме използвали логическия оператор NOT, заедно със символа за подчертаване, за да получим резултатите си. По-долу е скриптът, който прави това.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
8 | Underworld-Awakeninh | Michahel Eal | 2012 | 6 |
Забележете, че в нашия набор от резултати са върнати само филми, които не започват с 200 през издадената година. Това е така, защото използвахме логическия оператор NOT при нашето търсене на шаблони за заместващи символи.
Escape ключова дума.
Ключовата дума ESCAPE се използва за избягване на символи, съответстващи на шаблони , като процент (%) и подчертаване (_), ако те са част от данните.
Да предположим, че искаме да проверим низа "67%", който можем да използваме;
LIKE '67#%%' ESCAPE '#';
Ако искаме да потърсим филма "67% виновен", можем да използваме скрипта, показан по-долу, за да го направим.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Обърнете внимание на двойното " %% " в клаузата LIKE, първото в червено " % " се третира като част от низа, който трябва да се търси. Другият се използва за съвпадение на произволен брой знаци, които следват.
Същата заявка също ще работи, ако използваме нещо като
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
Обобщение
- Like & Wildcards мощни инструменти, които помагат за търсене на данни, съвпадащи със сложни модели.
- Има редица заместващи символи, които включват процента, долната черта и списъка с признаци (не се поддържат от MySQL), наред с други
- Процентният заместващ символ се използва за съвпадение на произволен брой знаци, започващи от нула (0) и повече.
- Подчертаният заместващ знак се използва, за да съответства точно на един знак.