Що таке підстановки 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 ..." - це стандартна команда SQL SELECT.
- "ДЕ" - ключове слово, що використовується для застосування фільтра.
- "LIKE" - це оператор порівняння, який використовується разом із символами підстановки
- 'xxx' - це будь-який вказаний початковий шаблон, такий як один символ або більше, і "%" відповідає будь-якій кількості символів, починаючи з нуля (0).
Щоб повністю оцінити вищезазначене твердження, давайте розглянемо практичний приклад
Припустимо, що ми хочемо отримати всі фільми, у яких слово «код» є частиною заголовка, ми використовуємо відсоток підстановки для виконання збігу з обома сторонами слова «код». Нижче наведено оператор SQL, за допомогою якого можна досягти бажаних результатів.
SELECT * FROM movies WHERE title LIKE '%code%';
Виконання вищезазначеного сценарію в робочому середовищі MySQL проти 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 проти myflixdb дає нам результати, показані нижче.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
7 | Davinci Code | NULL | NULL | 6 |
Зверніть увагу, що з бази даних повернуто лише один запис. Це тому, що наш код відповідає довільній кількості символів на початку назви фільму і отримує лише записи, які закінчуються зразком "код".
Давайте тепер зрушимо відсотковий шаблон до кінця зазначеного зразка, який буде збігатися. Модифікований сценарій показано нижче.
SELECT * FROM movies WHERE title LIKE 'code%';Виконання вищезазначеного сценарію в робочому середовищі MySQL проти myflixdb дає нам результати, показані нижче.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
Зверніть увагу, що з бази даних повернуто лише один запис. Це тому, що наш код відповідає всім заголовкам, які починаються з шаблону "код", за яким слід будь-яка кількість символів.
_ підкреслення символу підстановки
Узагальнюючий знак підкреслення використовується для відповідності рівно одному символу . Припустимо, що ми хочемо шукати всі фільми, які вийшли у прокат у 200x років, де x - це точно один символ, який може мати будь-яке значення. Для цього ми використали б символи підкреслення. Наведений нижче сценарій вибирає всі фільми, випущені в рік "200x"
SELECT * FROM movies WHERE year_released LIKE '200_';
Виконання вищезазначеного сценарію в робочому середовищі MySQL проти 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 можна використовувати разом із символами підстановки для повернення рядків, які не відповідають вказаному шаблону.
Припустимо, ми хочемо отримати фільми, які не виходили у рік 200x. Для отримання результатів ми використовували б логічний оператор 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 року у випуску. Це тому, що ми використовували НЕ логічний оператор у нашому пошуку шаблону підстановки.
Ключове слово втечі.
Ключове слово 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) і більше.
- Узагальнюючий знак підкреслення використовується для відповідності рівно одному символу.