MySQL Підстановочні символи: Like, NOT Like, 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 підтримує два символи підстановки, і кожен з них відповідає на окреме запитання щодо ваших даних.

Джокер Сенс Приклад візерунка Сірники
% Нуль (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.

Поширені запитання

Ні, не за замовчуванням. LIKE відповідає порядку сортування стовпця, а стандарт MySQL сортування не враховує регістр, тому «code%» також відповідає «CodeДодайте ключове слово BINARY перед стовпцем, якщо потрібне врахування регістру.

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

Ні. Список символів у дужках, що приймається деякими іншими пошуковими системами, недійсний всередині MySQL ПАРТІЯ LIKE. Використовуйте Оператор REGEXP замість цього, наприклад, title REGEXP '^[ac]', щоб відповідати діапазону початкових символів.

Так. Помічники штучного інтелекту перетворюють запити простою мовою на шаблони LIKE, які можна запускати в клієнті, наприклад MySQL ВерстакЗавжди переглядайте згенерований шаблон, оскільки переміщення одного символу % змінює, які рядки повертаються.

Консультанти запитів на базі штучного інтелекту зчитують вивід EXPLAIN та позначають шаблони початкових шаблонів підстановки, які пропускають індекси. Потім вони пропонують альтернативи, такі як повнотекстовий пошук, шаблон префікса або REGEXP, які вам все ще потрібно перевірити на відповідність власним обсягам даних.

Підсумуйте цей пост за допомогою: