MySQL Підстановочні символи: Like, NOT Like, Escape, (%), (_)
⚡ Розумний підсумок
MySQL Підстановочні символи роблять можливим пошук на основі шаблонів, поєднуючи оператори LIKE та NOT LIKE зі спеціальними символами. Це пояснює підстановочні символи відсотків та підкреслення, ключове слово ESCAPE, практичні запити до бази даних myflixdb та міркування щодо продуктивності.

Які MySQL Символи підстановки?
MySQL Символи – це спеціальні символи, які допомагають шукати дані, що відповідають складному шаблону, а не точному значенню. Підстановочні символи завжди використовуються разом з оператором порівняння LIKE або оператором порівняння NOT LIKE.
MySQL підтримує два символи підстановки, і кожен з них відповідає на окреме запитання щодо ваших даних.
| Джокер | Сенс | Приклад візерунка | Сірники |
|---|---|---|---|
| % | Нуль (0) або більше символів | '%code%' | 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';
Як ви можете бачити з наведеного вище запиту, "ДЕ ЗАКЛАД«» стає довгим і крихким: кожне нове місто доводиться додавати вручну, а одна адреса з помилкою непомітно виключається. Використання підстановочних символів спрощує запит, оскільки один шаблон охоплює кожне місто в штаті.
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 Верстак з базою даних myflixdb дає нам результати, показані нижче.
| movie_id | назву | директор | year_released | category_id |
|---|---|---|---|---|
| 4 | Code Ім'я Блек | Едгар Джимз | 2010 | NULL |
| 7 | Давінці Code | NULL | NULL | 6 |
Зверніть увагу, що ключове слово «код» повертається незалежно від того, чи воно з’являється на початку чи в кінці заголовка. Це пояснюється тим, що шаблон дозволяє будь-яку кількість символів перед словом «код» і будь-яку кількість символів після нього.
Давайте тепер змінимо скрипт так, щоб символ підстановки відсотка з'являвся лише на початку критеріїв пошуку.
SELECT * FROM movies WHERE title LIKE '%code';
Виконання наведеного вище сценарію в MySQL Аналіз Workbench з базою даних myflixdb дає нам результати, показані нижче.
| movie_id | назву | директор | year_released | category_id |
|---|---|---|---|---|
| 7 | Давінці Code | NULL | NULL | 6 |
Зверніть увагу, що повернуто лише один запис. Шаблон відповідає будь-якій кількості символів на початку заголовка, але вимагає, щоб заголовок кінець з «кодом».
Давайте тепер змістимо символ підстановки відсотків у кінець шаблону. Змінений скрипт показано нижче.
SELECT * FROM movies WHERE title LIKE 'code%';
Виконання наведеного вище сценарію в MySQL Аналіз Workbench з базою даних myflixdb дає нам результати, показані нижче.
| movie_id | назву | директор | year_released | category_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 | category_id |
|---|---|---|---|---|
| 2 | Забути Сару Маршал | Ніколас Столлер | 2008 | 2 |
| 9 | Honey moonERS | Джон Шульц | 2005 | 8 |
Зверніть увагу, що повертаються лише фільми, значення year_released яких дорівнює 200, а потім будь-який один символ. На відміну від символу підстановки відсотка, символ підкреслення резервує місце для одного символу і не більше.
НЕ ПОДОБАЄТЬСЯ з підстановочними символами
Логічний оператор NOT можна використовувати разом із символами підстановки для повернення рядків, які НЕ відповідати заданому шаблону.
Припустимо, нам потрібні фільми, які не вийшли у 200x роках. Ми поєднуємо логічний оператор NOT із символом підкреслення, як показано нижче.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
| movie_id | назву | директор | year_released | category_id |
|---|---|---|---|---|
| 1 | Пірати Карибського моря 4 | Роб Маршалл | 2011 | 1 |
| 4 | Code Ім'я Блек | Едгар Джимз | 2010 | NULL |
| 8 | Підземний світ-Awakenдрукувати | Майкл Іл | 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-символ (#), і тому він розглядається як частина рядка, що шукається. Другий символ зберігає своє значення підстановлювального знака та відповідає будь-якій кількості символів, що йдуть після нього.
Будь-який символ може служити керуючим символом, тому той самий запит також працює зі знаком рівності.
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
Підстановки дуже добре охоплюють прості шаблони, але деякі пошукові запити потребують більш виразних правил. Порівняння нижче показує, де лежить межа.
MySQL Wildcards проти REGEXP: який з них слід використовувати?
MySQL підтримує лише два символи підстановки. Списки символів, такі як [ac], які деякі інші механізми баз даних приймають всередині LIKE, не підтримуються. Коли для пошуку потрібні діапазони символів, чергування або прив'язка, Оператор REGEXP є правильним вибором.
| критерій | LIKE з підстановочними символами | REGEXP |
|---|---|---|
| Сила візерунка | Тільки два символи: % та _ | Класи символів, діапазони, чергування, повторення |
| Типове використання | Пошук за префіксом, суфіксом або запитом «містить» | Валідація, складне зіставлення, множинні альтернативи |
| Використання індексу | Можливо, коли шаблон не починається з % | Ніколи не використовує індекс |
| читабельність | Просто для початківців | Крута крива навчання |
Як правило, спочатку звертайтеся до LIKE: його легше читати, і це єдиний з двох, який може отримати користь від індексу. Переходьте до REGEXP, коли один шаблон має виражати кілька альтернатив, наприклад, зіставляти кожен заголовок, який починається з цифри. Обидва оператори порівняння доступні лише для читання, тому жоден з них не змінює рядки, що повертаються INSERT or ОНОВЛЕННЯ оператори; вони фільтрують лише те, що вибирає речення WHERE.
