MySQL Заместващи символи: Харесва ми, НЕ харесвам, Escape, (%), (_)

⚡ Умно обобщение

MySQL Заместващите символи правят възможно търсенето, базирано на шаблони, чрез сдвояване на операторите LIKE и NOT LIKE със специални символи. Това обяснява заместващите символи за процент и долна черта, ключовата дума ESCAPE, практическите заявки към базата данни myflixdb и съображенията за производителност.

  • 🔍 Основна дефиниция: Заместващите символи са заместващи символи, които LIKE и NOT LIKE използват за съвпадение на текстови шаблони, вместо точни стойности.
  • 📊 Процентен заместител: Символът % съвпада с нула или повече символа, така че '%code%' връща всяко заглавие на филм, което съдържа думата code.
  • 🔡 Подчертаване с заместващ символ: Символът _ съвпада точно с един символ, така че „200_“ връща заглавия, издадени между 2000 и 2009 г.
  • 🚫 Правило за отрицание: NOT LIKE обръща сравнението и връща всеки ред, който не отговаря на зададения шаблон.
  • Управление при бягство: Ключовата дума ESCAPE маркира буквален % или _ в низа за търсене, така че той да се третира като данни.
  • Анализ на производителността: Водещ символ % блокира използването на индекса и налага пълно сканиране на таблицата, така че закрепвайте моделите отляво, когато е възможно.
  • 🧩 Избор на метод: LIKE обхваща просто съпоставяне на префикси и суфикси, докато REGEXP обработва класове символи и редуване.

Какви са MySQL Заместващи знаци?

MySQL Заместващи символи са специални символи, които ви помагат да търсите данни, съответстващи на сложен модел, вместо на точна стойност. Заместващите символи винаги се използват заедно с оператора за сравнение LIKE или с оператора за сравнение NOT LIKE.

MySQL поддържа два заместващи символа, като всеки от тях отговаря на различен въпрос относно вашите данни.

Wildcard Значение Примерен модел Кибрит
% Нула (0) или повече символа „%код%“ Code Име Блек, Давинчи Code
_ Точно един символ „200_“ 2005, 2008

След като двата знака са дефинирани, следващият раздел обяснява защо си струва да ги научим.

Защо да използваме заместващи символи в MySQL?

Ако сте запознати със 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_address = 'Houston, TX';

Както можете да видите от горната заявка, „WHERE клауза„“ става дълъг и крехък: всеки нов град трябва да се добавя ръчно, а един-единствен неправилно написан адрес се изключва тихомълком. Използването на заместващи символи опростява заявката, защото един-единствен шаблон покрива всеки град в щата.

SELECT * FROM members
WHERE postal_address LIKE '%TX';

Накратко, заместващите символи ви позволяват да изграждате мощни функции за търсене в приложения, управлявани от данни, с много по-малко SQL. Следващият раздел разглежда всеки заместващ символ поотделно.

Видове MySQL Заместващи символи

% – Процентният заместващ символ

Символът за процент (%) се използва за определяне на модел на нула (0) или повече знака. Той има следния основен синтаксис.

SELECT * FROM table_name
WHERE fieldname LIKE 'xxx%';

ТУК:

  • "SELECT израз„“ е стандартната SQL команда SELECT.
  • „КЪДЕ“ е ключовата дума, използвана за прилагане на филтъра.
  • „LIKE“ е операторът за сравнение, който се използва заедно със заместващи символи.
  • „xxx“ е произволен определен шаблон, например един или повече символи, а „%“ съответства на произволен брой символи, започващи от нула (0).

За да оценим напълно горното твърдение, нека разгледаме един практически пример. Да предположим, че искаме да получим всички филми, които имат думата „код“ като част от заглавието. Ще използваме процентния заместващ знак от двете страни на думата „код“, за да извършим съвпадение с шаблон навсякъде в заглавието.

SELECT * FROM movies
WHERE title LIKE '%code%';

Изпълнение на горния скрипт в MySQL Workbench спрямо базата данни myflixdb ни дава резултатите, показани по-долу.

movie_id заглавие директор year_released категория_id
4 Code Име Черно Едгар Джимз 2010 NULL
7 Да Винчи Code NULL NULL 6

Обърнете внимание, че ключовата дума за търсене „код“ се връща независимо дали се появява в началото или в края на заглавието. Това е така, защото шаблонът позволява произволен брой знаци преди „код“ и произволен брой знаци след него.

Нека сега модифицираме скрипта, така че заместващият знак за процент да се появява само в началото на критериите за търсене.

SELECT * FROM movies
WHERE title LIKE '%code';

Изпълнение на горния скрипт в MySQL Workbench спрямо базата данни myflixdb ни дава резултатите, показани по-долу.

movie_id заглавие директор year_released категория_id
7 Да Винчи Code NULL NULL 6

Обърнете внимание, че е върнат само един запис. Шаблонът съвпада с произволен брой знаци в началото на заглавието, но изисква заглавието да край с „код“.

Нека сега преместим заместващия символ за процент в края на шаблона. Модифицираният скрипт е показан по-долу.

SELECT * FROM movies
WHERE title LIKE 'code%';

Изпълнение на горния скрипт в MySQL Workbench спрямо базата данни myflixdb ни дава резултатите, показани по-долу.

movie_id заглавие директор year_released категория_id
4 Code Име Черно Едгар Джимз 2010 NULL

Връща се отново само един запис, защото този шаблон съвпада с всяко заглавие, което започва с „код“, последван от произволен брой знаци. Следователно позицията на символа % определя значението на търсенето.

💡 Съвет: Шаблон като „code%“ все още може да използва индекс в колоната за заглавие, докато „%code%“ не може. Водещ заместващ символ за процент налага MySQL за да сканирате всеки ред, така че дръжте заместващия символ отдясно, когато търсенето го позволява.

_ – Подчертаване

Използва се заместващият знак за долна черта съответства точно на един знакДа предположим, че искаме да намерим всички филми, пуснати през годините 200x, където x е точно един символ, който може да бъде произволна стойност. Скриптът по-долу избира всички филми, пуснати през годината „200x“.

SELECT * FROM movies
WHERE year_released LIKE '200_';

Изпълнение на горния скрипт в MySQL Workbench спрямо базата данни myflixdb ни дава резултатите, показани по-долу.

movie_id заглавие директор year_released категория_id
2 Забравяйки Сара Маршал Николас Столер 2008 2
9 Honey moonERS Джон Шулц 2005 8

Обърнете внимание, че се връщат само филми, чиято стойност на year_released е 200, последвана от произволен единичен символ. За разлика от заместващия символ за процент, долната черта запазва място за един символ и не повече.

НЕ КАТО с заместващи символи

Логическият оператор NOT може да се използва заедно със заместващи символи, за да върне редовете, които го правят. не съответстват на посочения шаблон.

Да предположим, че искаме филмите, които не са били пуснати през годините 200x. Комбинираме логическия оператор NOT с подчертанието (undercard), както е показано по-долу.

SELECT * FROM movies
WHERE year_released NOT LIKE '200_';
movie_id заглавие директор year_released категория_id
1 Карибски пирати 4 Rob Marshall 2011 1
4 Code Име Черно Едгар Джимз 2010 NULL
8 Подземен свят-AwakenINH Майкъл Ийл 2012 6

Връщат се само филмите, които не следват шаблона 200x, защото NOT обръща резултата от сравнението с заместващи символи. Обърнете внимание, че редовете, съдържащи NULL стойността никога не се връща от LIKE или NOT LIKE, тъй като NULL е неизвестно, а не неравно.

Ключова дума ESCAPE

Ключовата дума ESCAPE се използва за символи за екраниране при съпоставяне на шаблони като например процента (%) и долната черта (_), когато те са част от самите данни.

Да предположим, че искаме да търсим литералния низ „67%“. Декларираме escape символ и го поставяме непосредствено преди символа, който трябва да бъде прочетен като данни.

LIKE '67#%%' ESCAPE '#';

Ако искаме да намерим филма „67% виновен“, можем да използваме показания по-долу сценарий.

SELECT * FROM movies
WHERE title LIKE '67#%%' ESCAPE '#';

Обърнете внимание на двойното „%%“ в клаузата LIKE. Първото е предшествано от escape символа (#) и следователно се третира като част от търсения низ. Вторият запазва значението си на заместващ символ и съответства на произволен брой символи, които следват.

Всеки символ може да служи като escape символ, така че същата заявка работи и със знака за равенство.

SELECT * FROM movies
WHERE title LIKE '67=%%' ESCAPE '=';

Заместителните символи покриват много добре прости модели, но някои търсения изискват по-изразителни правила. Сравнението по-долу показва къде е ограничението.

MySQL Wildcards срещу REGEXP: кой да използвате?

MySQL поддържа само два заместващи символа. Списъци със символи като [ac], които някои други двигатели на бази данни приемат в LIKE, не се поддържат. Когато търсенето изисква диапазони от символи, редуване или закотвяне, Оператор REGEXP е правилният избор.

критерий LIKE с заместващи символи РЕГУЛЯРЕН ИЗРАЗ
Мощност на модела Само два символа: % и _ Класове на знаците, диапазони, редуване, повторение
Типична употреба Търсения с префикс, суфикс или „съдържа“ Валидиране, сложно съпоставяне, множество алтернативи
Използване на индекса Възможно е, когато шаблонът не започва с % Никога не използва индекс
Четливост Лесно за начинаещи По-стръмна крива на обучение

Като правило, първо използвайте LIKE: той е по-лесен за четене и е единственият от двата, който може да се възползва от индекс. Преминете към REGEXP, когато един шаблон трябва да изразява няколко алтернативи, например съвпадение на всяко заглавие, което започва с цифра. И двата оператора са само за четене, така че нито един от тях не променя редовете, върнати от INSERT or АКТУАЛИЗАЦИЯ оператори; те филтрират само това, което клаузата WHERE избира.

Въпроси и Отговори

Не, не по подразбиране. LIKE следва сортирането на колоната и стандартното MySQL сравнението не е чувствително към главни и малки букви, така че „code%“ също съвпада с „Code„Добавете ключовата дума BINARY преди колоната, когато е необходимо съвпадение с отчитане на малки и големи букви.“

Да. MySQL преобразува стойността в низ, преди да я сравни, поради което year_released LIKE '200_' работи. Преобразуването предотвратява използването на индекс в тази колона, така че филтрирайте с диапазони като BETWEEN 2000 AND 2009 в големи таблици.

Не. Списъкът със символи в скоби, приеман от някои други двигатели, не е валиден в MySQL ХАРАСЕТЕ модел. Използвайте Оператор REGEXP вместо това, например title REGEXP '^[ac]', за да се намери диапазон от начални символи.

Да. Асистентите с изкуствен интелект превеждат заявки на обикновен език в LIKE модели, които можете да изпълнявате в клиент, като например MySQL WorkbenchВинаги преглеждайте генерирания шаблон, защото преместването на един символ % променя кои редове се връщат.

Консултантите за заявки с изкуствен интелект четат изхода на EXPLAIN и маркират шаблони с водещи заместващи символи, които пропускат индекси. След това предлагат алтернативи, като например търсене в пълен текст, шаблон с префикс или РЕГУЛЯРЕН ИЗРАЗ, които все още трябва да валидирате спрямо собствените си обеми от данни.

Обобщете тази публикация с: