MySQL Подстановочные символы: Like, NOT Like, Escape, ( %), ( _ )

⚡ Умное резюме

MySQL Использование символов-заменителей позволяет осуществлять поиск по шаблону, сопоставляя операторы LIKE и NOT LIKE со специальными символами. В этом разделе объясняются символы-заменители в виде процента и подчеркивания, ключевое слово ESCAPE, практические запросы к базе данных myflixdb и вопросы производительности.

  • 🔍 Основное определение: Символы-заменители — это символы-заполнители, которые функции LIKE и NOT LIKE используют для сопоставления текстовых шаблонов вместо точных значений.
  • 📊 Процентный подстановочный знак: Символ % соответствует нулю или более символам, поэтому '%code%' возвращает все названия фильмов, содержащие слово code.
  • 🔡 Подстановочный знак Undercore: Символ _ соответствует ровно одному символу, поэтому '200_' возвращает названия игр, выпущенных в период с 2000 по 2009 год.
  • ???? Правило отрицания: Функция NOT LIKE инвертирует сравнение и возвращает все строки, которые не соответствуют указанному шаблону.
  • 🛡️ Действия при эвакуации: Ключевое слово ESCAPE обозначает буквальный символ % или _ внутри поисковой строки, так что он рассматривается как данные.
  • Анализ производительности: Указатель % в начале строки блокирует использование индекса и принудительно выполняет полное сканирование таблицы, поэтому по возможности размещайте шаблоны привязки слева.
  • 🧩 Выбор метода: LIKE используется для простого сопоставления префиксов и суффиксов, а REGEXP обрабатывает классы символов и альтернативы.

Каковы MySQL Подстановочные знаки?

MySQL Wildcards Подстановочные символы — это специальные символы, которые помогают искать данные, соответствующие сложному шаблону, а не точному значению. Подстановочные символы всегда используются в сочетании с оператором сравнения LIKE или с оператором сравнения NOT LIKE.

MySQL Поддерживаются два символа-заменителя, каждый из которых отвечает на разный вопрос о ваших данных.

Джокер Смысл Пример шаблона Матчи
% Ноль (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 Wildcards

% – Символ-заменитель в процентах

Символ процента (%) используется для указания шаблона. ноль (0) или более символов. Он имеет следующий базовый синтаксис.

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

ЗДЕСЬ:

  • Оператор SELECT«» — это стандартная команда SQL SELECT.
  • «WHERE» — это ключевое слово, используемое для применения фильтра.
  • «LIKE» — это оператор сравнения, используемый в сочетании с подстановочными символами.
  • «xxx» обозначает любой заданный шаблон, например, один или несколько символов, а «%» соответствует любому количеству символов, начиная с нуля (0).

Чтобы в полной мере понять вышесказанное, рассмотрим практический пример. Предположим, мы хотим получить все фильмы, в названии которых присутствует слово «code». Мы бы использовали символ подстановки «процент» с обеих сторон слова «code», чтобы выполнить поиск по шаблону в любом месте названия.

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

Выполнение приведенного выше сценария в MySQL Верстак Обращение к базе данных myflixdb дает результаты, показанные ниже.

Movie_id название директор год_выпущено ид_категории
4 Code Имя Черный Эдгар Джимз 2010 NULL,
7 Да Винчи Code NULL, NULL, 6

Обратите внимание, что поисковое ключевое слово «code» возвращается независимо от того, находится ли оно в начале или в конце заголовка. Это происходит потому, что шаблон допускает любое количество символов до слова «code» и любое количество символов после него.

Теперь изменим скрипт так, чтобы символ подстановки в виде процента появлялся только в начале критериев поиска.

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

Выполнение приведенного выше сценария в MySQL Результаты, полученные с помощью Workbench при работе с базой данных myflixdb, показаны ниже.

Movie_id название директор год_выпущено ид_категории
7 Да Винчи Code NULL, NULL, 6

Обратите внимание, что была возвращена только одна запись. Шаблон соответствует любому количеству символов в начале заголовка, но требует, чтобы заголовок был... конец с помощью «кода».

Теперь перенесём символ подстановки процента в конец шаблона. Изменённый скрипт показан ниже.

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

Выполнение приведенного выше сценария в MySQL Результаты, полученные с помощью Workbench при работе с базой данных myflixdb, показаны ниже.

Movie_id название директор год_выпущено ид_категории
4 Code Имя Черный Эдгар Джимз 2010 NULL,

Возвращается только одна запись, поскольку этот шаблон соответствует каждому названию, которое начинается с «кодом», за которым следует любое количество символов. Таким образом, положение символа % определяет смысл поиска.

💡 Совет: Шаблон, например, 'code%', по-прежнему может использовать индекс в столбце заголовка, в то время как '%code%' — нет. Использование символа подстановки в виде процента в начале строки заставляет использовать индекс. MySQL Чтобы просканировать каждую строку, используйте подстановочный знак справа, если это позволяет поиск.

_ – Подстановочный знак нижнего подчеркивания

Подстановочный знак подчеркивания используется для соответствует ровно одному символуПредположим, мы хотим найти все фильмы, выпущенные в 200x году, где x — это ровно один символ, который может принимать любое значение. Приведённый ниже скрипт выбирает все фильмы, выпущенные в 200x году.

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

Выполнение приведенного выше сценария в MySQL Результаты, полученные с помощью Workbench при работе с базой данных myflixdb, показаны ниже.

Movie_id название директор год_выпущено ид_категории
2 Забыть Сару Маршал Николас Столлер 2008 2
9 Honey moonERS Джон Шульц 2005 8

Обратите внимание, что возвращаются только фильмы, у которых значение year_released равно 200, за которым следует любой отдельный символ. В отличие от символа подстановки процента, нижнее подчеркивание зарезервирует место для одного символа и не более.

НЕ ТАК, КАК с подстановочными символами.

Логический оператор NOT можно использовать вместе с подстановочными знаками для возврата строк, которые соответствуют условиям. не соответствовать указанному шаблону.

Предположим, нам нужны фильмы, которые не были выпущены в 200-е годы. Мы объединяем логический оператор NOT с символом подстановки — нижним подчеркиванием, как показано ниже.

SELECT * FROM movies
WHERE year_released NOT LIKE '200_';
Movie_id название директор год_выпущено ид_категории
1 Пираты Карибского моря 4 Роб Маршалл 2011 1
4 Code Имя Черный Эдгар Джимз 2010 NULL,
8 Подземный мирAwakenвдыхание Майкл Эал 2012 6

Возвращаются только фильмы, не соответствующие шаблону 200x, поскольку оператор NOT инвертирует результат сравнения с использованием подстановочного знака. Обратите внимание, что строки, содержащие NULL, Значения NULL никогда не возвращаются методами LIKE или NOT LIKE, поскольку NULL означает неизвестное значение, а не неравное.

ключевое слово ESCAPE

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

Предположим, мы хотим найти строковый литерал «67%». Мы объявляем экранирующий символ и помещаем его непосредственно перед символом, который должен быть прочитан как данные.

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

Если мы хотим найти фильм «67% Guilty», мы можем использовать сценарий, показанный ниже.

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

Обратите внимание на двойные «%%» в предложении LIKE. Первый символ предшествует экранирующему символу (#) и поэтому рассматривается как часть искомой строки. Второй символ сохраняет свое значение подстановочного знака и соответствует любому количеству символов, следующих за ним.

В качестве экранирующего символа может использоваться любой символ, поэтому тот же запрос работает и со знаком равенства.

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

Использование символов-заменителей отлично подходит для простых шаблонов, но для некоторых поисковых запросов требуются более выразительные правила. Приведенное ниже сравнение показывает, где находится предел возможностей.

MySQL Использование подстановочных символов или регулярных выражений: что лучше использовать?

MySQL Поддерживаются только два символа-заменителя. Списки символов, такие как [ac], которые некоторые другие системы управления базами данных принимают внутри оператора LIKE, не поддерживаются. Когда поиск требует диапазонов символов, чередования или привязки, Оператор REGEXP это правильный выбор.

Критерий LIKE с подстановочными символами REGEXP
Сила шаблона Всего два символа: % и _ Классы персонажей, диапазоны, чередование, повторение
Типичное использование Поиск по префиксу, суффиксу или по ключевому слову «содержит» Проверка достоверности, сложное сопоставление, множество альтернатив
Использование индекса Возможно, если шаблон не начинается с % Индекс никогда не используется
читабельность Просто для новичков Более крутая кривая обучения

Как правило, сначала используйте оператор LIKE: он проще для чтения, и только ему из двух может пригодиться индекс. Переходите к REGEXP, когда один шаблон должен выражать несколько альтернатив, например, соответствовать каждому заголовку, начинающемуся с цифры. Оба оператора являются сравнениями только для чтения, поэтому ни один из них не изменяет строки, возвращаемые оператором LIKE. ВСТАВИТЬ or ОБНОВЛЕНИЕ ПО операторы; они фильтруют только то, что выбирает условие WHERE.

Часто задаваемые вопросы (FAQ)

Нет, по умолчанию это не так. Параметр LIKE следует формату сортировки столбца и стандарту. MySQL Правила сортировки нечувствительны к регистру, поэтому 'code%' также соответствует "CodeДобавьте ключевое слово BINARY перед столбцом, если требуется совпадение с учетом регистра.

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

Нет. Список символов в скобках, принимаемый некоторыми другими движками, недействителен внутри MySQL Шаблон «Нравится». Используйте Оператор REGEXP Вместо этого, например, используйте REGEXP '^[ac]' для поиска диапазона начальных символов.

Да. Искусственные интеллекты-помощники преобразуют запросы на обычном языке в шаблоны LIKE, которые можно запускать в клиентском приложении, например, в MySQL ВерстакВсегда проверяйте сгенерированный шаблон, поскольку перемещение всего одного символа % меняет то, какие строки будут возвращены.

Советники по запросам на основе ИИ анализируют выходные данные EXPLAIN и отмечают шаблоны с ведущими символами подстановки, которые пропускают индексы. Затем они предлагают альтернативные варианты, такие как полнотекстовый поиск, префиксный шаблон или REGEXP, которые вам все равно необходимо проверить, сравнив их с собственными объемами данных.

Подведем итог этой публикации следующим образом: