Как работают операторы SQL LIKE и NOT LIKE
10 декабря, 2022 12:47 пп 1 579 views | Комментариев нетDevelopment, mySQL | Amber | Комментировать запись
Оператор SQL LIKE используется вместе с WHERE для поиска шаблона для столбца. Подстановочные знаки помогут вам определить требуемый шаблон. Два подстановочных знака, которые используются с оператором LIKE:
- %: символ процента используется для представления одного или нескольких вхождений, а также для определения их отсутствия.
- _: подчеркивание используется для представления одного символа.
Чтобы использовать оператор SQL LIKE, вы должны быть уверены в использовании позиции подстановочного знака, поскольку он будет определять шаблон поиска.
Синтаксис оператора SQL LIKE
Оператор SQL LIKE можно использовать с любым запросом вместе с where.
SELECT column FROM table_name WHERE column LIKE pattern; UPDATE table_name SET column=value WHERE column LIKE pattern; DELETE FROM table_name WHERE column LIKE pattern;
В упомянутом выше синтаксисе оператора LIKE шаблон определяется использованием подстановочных знаков.
Примеры использования оператора SQL LIKE
Давайте попробуем понять, как работает оператор SQL LIKE вместе с подстановочными знаками, на некоторых примерах. В качестве примера рассмотрим следующую таблицу Customer.
CustomerId | CustomerName |
1 | Amit |
2 | John |
3 | Annie |
И попробуем выполнить пару практичных примеров. Допустим, мы хотим найти имя клиента, которое начинается на А:
SELECT CustomerName FROM Customer WHERE CustomerName LIKE 'A%';
Вывод:
Amit AnnieНайдем клиента, имя которого оканчивается на «е».
SELECT CustomerName FROM Customer WHERE CustomerName LIKE '%e'
Вывод:
Annie
Найдем теперь клиента, имя которого начинается с «А» и заканчивается на «т».
SELECT CustomerName FROM Customer WHERE CustomerName LIKE 'A%t'
Вывод:
Amit
Давайте найдем клиента с именем, содержащим символ «n» в любой позиции.
SELECT CustomerName FROM Customer WHERE CustomerName LIKE '%n%'
Вывод:
Annie John
Чтобы найти клиента, вторым символом в имени которого является n, введите:
SELECT CustomerName FROM Customer WHERE CustomerName LIKE '_n%'
Вывод:
Annie
Давайте теперь найдем клиента, третьим символом в имени которого является i, а последним – t.
SELECT CustomerName FROM Customer WHERE CustomerName LIKE '__i%t'
Вывод:
Amit
Оператор SQL NOT LIKE
Иногда мы хотим извлечь записи, которые не соответствуют определенному шаблону. В этом случае можно использовать оператор SQL NOT LIKE. Синтаксис оператора SQL NOT LIKE выглядит так:
SELECT column FROM table_name WHERE column NOT LIKE pattern; UPDATE table_name SET column=value WHERE column NOT LIKE pattern; DELETE FROM table_name WHERE column NOT LIKE pattern;
Ради примера предположим, что нам нужно извлечь список имен клиентов, которые не начинаются с буквы «А». Ниже представлен запрос, который даст нам требуемый набор результатов.
SELECT CustomerName FROM Customer WHERE CustomerName NOT LIKE 'A%';
Вывод:
John
Множественный оператор SQL LIKE
Мы можем использовать несколько операторов LIKE в одном SQL-запросе. Например, если нам нужен список имен клиентов, начинающихся с Jo и Am, нам придется использовать несколько операторов LIKE, как показано ниже.
SELECT CustomerName FROM Customer WHERE CustomerName LIKE 'Am%' OR CustomerName LIKE 'Jo%';
Читайте также: Почему стоит начать изучать SQL
Tags: SQLОператор LIKE
Оператор LIKE используется при условных запросах, когда мы хотим узнать соответствует ли строка определённому шаблону.
Например, у нас есть таблица Users, в которой есть поле email:
SELECT name, email FROM Users;
name | |
---|---|
Bruce Willis | [email protected] |
George Clooney | [email protected] |
Kevin Costner | [email protected] |
Samuel L. Jackson | [email protected] |
Kurt Russell | [email protected] |
Допустим, мы хотим найти всех пользователей, чья почта лежит в домене второго уровня «hotmail». Т.е. нужно отобрать только те записи, что отвечают условию:
- после символа «@» следует «hotmail»
- после «hotmail» следует символ «.» и далее любая последовательность символов
Для таких нетривиальных поисков по строковым полям и нужен оператор LIKE.
... WHERE поле_таблицы [NOT] LIKE шаблон_строки
Шаблон может включать следующие специальные символы:
Символ | Описание |
---|---|
% | Последовательность любых символов (число символов в последовательности может быть от 0 и более) |
_ | Любой единичный символ |
Так наш запрос на поиск пользователей в домене «hotmail» может выглядеть следующим образом:
SELECT name, email FROM Users WHERE email LIKE '%@hotmail. %'
name | |
---|---|
Bruce Willis | [email protected] |
Kevin Costner | [email protected] |
Jennifer Lopez | [email protected] |
Harrison Ford | [email protected] |
Michael Douglas | [email protected] |
Catherine Zeta-Jones | [email protected] |
... WHERE поле_таблицы LIKE 'text%'
Сопоставляется любым строкам, начинающимся на «text»
... WHERE поле_таблицы LIKE '%text'
Сопоставляется любым строкам, заканчивающимся на «text»
... WHERE поле_таблицы LIKE '_ext'
Сопоставляется строкам, имеющим длину 4 символа, при этом 3 последних обязательно должны быть «ext». Например, слова «text» и «next»
... WHERE поле_таблицы LIKE 'begin%end'
Сопоставляется строкам, начинающихся на «begin» и заканчивающихся на «end»
В MySQL по умолчанию шаблоны не чувствительны к регистру
ESCAPE-символ используется для экранирования специальных символов (% и \). В случае если вам нужно найти строки, вы можете использовать ESCAPE-символ.
Например, вы хотите получить идентификаторы задач, прогресс которых равен 3%:
SELECT job_id FROM Jobs WHERE progress LIKE '3!%' ESCAPE '!';
Если бы мы не экранировали трафаретный символ, то в выборку попало бы всё, что начинается на 3.
Операторы LIKE и BETWEEN в SQL — Учебник по SQL
LIKE и BETWEEN в SQL
Операторы LIKE и BETWEEN в SQL используются для сравнения значений в базе данных. В этом учебном разделе мы обсудим:
- Оператор LIKE в SQL
- Оператор МЕЖДУ в SQL
Оператор LIKE в SQL
Оператор LIKE в SQL используется для извлечения записей, в которых присутствует определенный шаблон. В предложении WHERE оператор LIKE используется для поиска определенного шаблона в столбце. В SQL он имеет два подстановочных знака, например:
- Символ процента (%): Это замена нуля, одного или нескольких символов.
- Символ подчеркивания (_): Это замена одного символа.
Получите 100% повышение!
Осваивайте самые востребованные навыки прямо сейчас!
Заинтересованы в изучении SQL? Запишитесь на наш курс обучения SQL прямо сейчас!
Вот примеры использования оператора LIKE с подстановочными знаками
Как оператор | Описание |
ГДЕ EmployeeName LIKE ‘e%’ | Находит значения, начинающиеся с «e» |
ГДЕ Имя Сотрудника КАК ‘%e’ | Находит значения, оканчивающиеся на «е» |
ГДЕ EmployeeName LIKE ‘%en%’ | Находит значения, которые содержат «en» в любой позиции |
ГДЕ EmployeeName LIKE ‘_e%’ | Находит значения, которые содержат «е» только во второй позиции |
ГДЕ EmployeeName LIKE ‘e__%’ | Находит значения, начинающиеся с «e» и имеющие длину не менее 3 символов |
ГДЕ Имя Сотрудника КАК ‘e%0’ | Находит значения, начинающиеся с «а» и заканчивающиеся на «0» |
Синтаксис SQL Like
SELECT column_list ОТ имя_таблицы ГДЕ столбец_N НРАВИТСЯ ‘_xxxxx%’;
где SELECT, FROM, WHERE и LIKE — ключевые слова, список_столбцов — список столбцов, имя_таблицы — имя таблицы, N_столбца — имя столбца, а также шаблон, за которым следует точка с запятой.
Давайте рассмотрим пример, чтобы лучше понять это, представьте, что мы хотим извлечь имя человека из таблицы сотрудников ниже.
Демонстрационная база данных
e_id | e_name | е_зарплата | e_age | e_gender | e_dept |
1 | Джон | 30000 | 25 | мужской | операций |
2 | юлия | 540000 | 27 | женский | операций |
3 | анна | 125000 | 27 | женский | аналитика |
4 | боб | 50000 | 24 | мужской | поддержка |
5 | макс. | 540000 | 29 | мужской | операций |
Выполним несколько операций с запросом LIKE в SQL. Извлеките все записи, где имя сотрудника начинается с буквы «J»
Выберите * из сотрудника, где e_name LIKE 'j%';
После написания запроса нажмите кнопку «Выполнить», чтобы проверить наличие ошибок. После выполнения SQL-запроса появляется сообщение типа «Команды успешно выполнены». Как мы видим в результате, у нас получилось всего две строки, в которых имена начинаются с буквы «j».
Теперь давайте возьмем еще один пример, в котором мы извлекаем все записи из базы данных, в которых возраст сотрудника находится в двадцатых годах.
Выберите * из сотрудника, где e_age LIKE '2_';
Смена карьеры
Хотите пройти сертификацию по SQL! Учитесь у нашего эксперта по SQL и добейтесь успеха в своей карьере благодаря сертификации Intellipaat по Microsoft SQL.
Еще раз, после написания запроса, вы должны нажать на кнопку выполнения, чтобы проверить наличие ошибок. Если ошибок не обнаружено, выводится информация обо всех сотрудниках, возраст которых находится в диапазоне от 20 до 29 лет., будет отображаться как есть.
Оператор BETWEEN в SQLОператор BETWEEN в SQL используется для выбора значений в заданном диапазоне. Например, чтобы извлечь только те записи, в которых возраст человека составляет от 20 до 25 лет, мы должны использовать запрос BETWEEN в SQL.
SQL между синтаксисомSELECT column_list ОТ имя_таблицы Где column_N МЕЖДУ val1 И val2;
где SELECT, FROM, WHERE, BETWEEN и AND — ключевые слова, column_list — список столбцов, tablename — имя таблицы, column_N — имя столбца, val1 — минимальное значение диапазона, а val2 — максимальное значение диапазона, за которым следует точка с запятой. Давайте теперь отобразим сотрудников в возрасте от 25 до 35 лет из приведенной выше таблицы сотрудников.
Выберите * От сотрудника, где e_age ОТ 25 ДО 35;
Посетите наше сообщество SQL, чтобы получить ответы на все ваши вопросы!
После написания запроса нажмите кнопку «Выполнить», чтобы проверить наличие ошибок. После выполнения запроса появится таблица.
Давайте отобразим зарплаты сотрудников от 60 000 до 120 000 долларов США из таблицы сотрудников
Выберите * От сотрудника, где e_salary МЕЖДУ 60000 И 1200000;
: После написания запроса нажмите кнопку «Выполнить», чтобы проверить наличие ошибок. После выполнения запроса появится таблица.
На этом мы подошли к концу этого учебного раздела. Теперь вы готовы приступить к использованию LIKE в SQL и BETWEEN в SQL для сравнения значений в вашей базе данных.
Курсы, которые могут вам понравиться
Ознакомьтесь с лучшими вопросами для интервью по SQL, чтобы получить преимущество в своей карьере!
Расписание курсов
Использование операторов IN, NOT и LIKE в SQL
SQL становится сложным, когда у вас есть несколько бизнес-правил, которые управляют тем, как вы возвращаете наборы записей. Как программист, вы собираете бизнес-правила, которые затем определяют, как структурировать операторы SQL, чтобы гарантировать точность возвращаемых результатов для отчетов и приложений. Эти операторы становятся сложными, когда у вас есть несколько бизнес-требований, которые необходимо использовать для возврата набора данных, который помогает компаниям принимать решения. Некоторые ключевые слова SQL, помогающие создавать сложные операторы, включают IN, NOT и LIKE. LIKE использует подстановочные знаки, которые используются для запроса похожих значений, но IN и NOT возвращают точные наборы записей на основе конкретных значений.
Условие IN
Условие IN позволяет вам установить список значений, которые должны соответствовать значениям в ваших таблицах. Условие IN перечисляет значения в скобках, и это лучше, чем работать с несколькими условиями OR. Вот примерная таблица.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
321 | Фрэнк | Лоэ | Даллас | ТХ |
455 | Эд | Томпсон | Атланта | Г. А. |
456 | Эд | Томпсон | Атланта | Г. А. |
457 | Джо | Смит | Майами | FL |
458 | Фрэнк | Доу | Даллас | ТХ |
Предположим, вы хотите вернуть значения для клиентов, которые находятся только в Атланте и Майами. Вы можете написать оператор ИЛИ, который выглядит следующим образом.
ВЫБЕРИТЕ * ОТ Заказчика
ГДЕ Город = «Майами» ИЛИ Город = «Атланта»
Представьте, что вам нужно найти 10 таких городов. Оператор OR становится длинным и сложным. Вы можете объединить эти операторы ИЛИ в оператор IN. Следующий оператор SQL делает то же самое, что и приведенный выше оператор.
SELECT * FROM Customer
WHERE City IN («Майами», «Атланта»)
Результат обоих операторов одинаков. Следующий результат отображается SQL.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
455 | Эд | Томпсон | Атланта | Г. А. |
456 | Эд | Томпсон | Атланта | Г. А. |
457 | Джо | Смит | Майами | FL |
Пункт НЕ
Вы можете вернуть 1000 записей, но хотите исключить некоторые записи из набора данных. До сих пор мы создавали только операторы SQL, в которые вы хотите включать записи. Иногда вам нужно исключить записи из ваших результатов. Предположим, вы хотите включить записи со значениями городов Атланта и Майами, но хотите исключить записи, в которых имя пользователя — Джо. В SQL есть оператор НЕ, который исключает эти записи, но при этом включает другие, соответствующие исходному запросу IN. Следующий запрос дает вам пример оператора NOT.
ВЫБЕРИТЕ * ОТ Клиента
ГДЕ Город В (‘Майами’, ‘Атланта’) И Имя НЕ В (‘Джо’)
В приведенном выше заявлении говорится: «Дайте мне все записи, которые имеют значения городов Майами и Атланты, но исключают любой из этих записей, в которых есть имя Джо». Результирующий набор записей выглядит следующим образом.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
455 | Эд | Томпсон | Атланта | Г. А. |
456 | Эд | Томпсон | Атланта | Г. А. |
Обратите внимание, что результаты похожи на запрос для оператора IN. Единственное отличие состоит в том, что исключается запись «Джо». Поскольку «Джо» соответствует оператору NOT, он исключен из результатов. Этот оператор основан на логике И. Поскольку используется И, результирующий набор должен соответствовать обоим условиям со значением true, чтобы быть включенным в результаты.
Язык SQL позволяет комбинировать NOT и LIKE для устранения результатов поиска, используя логику того же типа, за исключением того, что записи удаляются из набора данных, а не добавляются. Например, вместо поиска клиентов в городах, названия которых начинаются с «Да», вы можете исключить клиентов, расположенных в этих городах. Следующая инструкция SQL использует ключевое слово NOT с ключевым словом LIKE.
SELECT * FROM Customer
WHERE City NOT LIKE ‘da%’
Результатом являются следующие результаты данных.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
455 | Эд | Томпсон | Атланта | Г. А. |
456 | Эд | Томпсон | Атланта | Г. А. |
457 | Джо | Смит | Майами | FL |
Оператор NOT работает со всеми вашими ключевыми словами SQL, чтобы отрицать результаты. Думайте об операторе NOT как об отменяющей фразе. При использовании оператора IN язык SQL сначала получает все совпадающие значения. В данном случае параметрами являются любые записи, начинающиеся с символов «да». Затем SQL видит оператор NOT и исключает результаты. Вы можете комбинировать оператор NOT с другими фразами.
Например, предположим, что вы хотите получить все записи, начинающиеся с «да», но хотите исключить все записи, начинающиеся с «дал». Следующая инструкция SQL исключит из ваших результатов города «дал».
SELECT * FROM Customer
WHERE City LIKE ‘da%’ AND City NOT LIKE ‘dal%’
Обратите внимание на оператор AND в приведенном выше выражении. Если вместо этого вы поместите OR в свое заявление, вы снова получите всех клиентов, находящихся где угодно. С помощью оператора AND вы указываете SQL выдавать только те результаты, которые возвращают true для обеих фраз. Таким образом, значения должны иметь «да» в качестве первых двух символов, но SQL также исключает все города, которые начинаются с «дал». В этом примере не возвращаются никакие записи, поскольку все записи не соответствуют обеим фразам.
Предположим, вы поместили в оператор оператор ИЛИ вместо оператора И. В следующем операторе используется ИЛИ вместо И.
SELECT * FROM Customer
WHERE City LIKE ‘da%’ OR City NOT LIKE ‘dal%’
Условие ИЛИ изменит ваш оператор SQL на «возврат всех записей, начинающихся с ‘da’ ИЛИ записей, которые не начинай с «дал». Эта логика немного сложнее. В результате возвращаются все записи с «da», что означает, что возвращаются ваши клиенты «dallas». Затем вторая фраза указывает SQL вернуть все записи, которые не начинаются с «dal». В таблице вашего примера все записи не начинаются с символов «даль», поэтому SQL возвращает все записи. Первая фраза не имеет значения, потому что используется ИЛИ, и все ваши записи соответствуют второй фразе.
В результате SQL возвращает следующий набор данных.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
321 | Фрэнк | Лоэ | Даллас | ТХ |
455 | Эд | Томпсон | Атланта | Г. А. |
456 | Эд | Томпсон | Атланта | Г. А. |
457 | Джо | Смит | Майами | FL |
458 | Фрэнк | Доу | Даллас | ТХ |
Понимание разницы между операторами ИЛИ и И и их использование с оператором НЕ поможет вам создавать сложные операторы SQL, которые дают вам точный набор данных, который вам нужен для отображения в ваших приложениях и создания отчетов.
Оператор LIKE
Оператор LIKE уже немного обсуждался, но оператор LIKE имеет несколько других вариантов синтаксиса, которые вы можете использовать. Оператор LIKE использует подстановочный знак %. Символ % может быть помещен в начало, конец или внутри строкового значения. Обратите внимание, что оператор % предназначен для строковых или varchar-значений.
В приведенных выше примерах используется символ процента для возврата значений, начинающихся с определенной строки (в приведенных выше примерах строка была «da»). Что делать, если вам нужно найти значения, которые просто содержат значение? Например, вы можете захотеть вернуть всех клиентов, которые содержат только строку «ia». Опять же, мы начинаем с таблицы базы данных клиентов.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
321 | Фрэнк | Лоэ | Даллас | ТХ |
455 | Эд | Томпсон | Атланта | Г. А. |
456 | Эд | Томпсон | Атланта | Г. А. |
457 | Джо | Смит | Майами | ФЗ |
458 | Фрэнк | Доу | Даллас | ТХ |
Следующая инструкция SQL ищет любого клиента в городе, который содержит значение «ia».
ВЫБЕРИТЕ * ОТ Заказчика
WHERE City LIKE ‘%ia%’
Приведенное выше утверждение переводится как «дайте мне все записи, в которых значение города содержит значение «ia» в любом месте строки. Обратите внимание на символ процента в начале и в конце. Это отличается от предыдущих примеров, в которых использовалось только «da%.» «da%» сообщает SQL, что строка должна начинаться с «da» и не может включать никаких префиксных символов. Оператор «%ia%» сообщает SQL, что « ia» могут находиться в любом месте строки.
Результат набора данных следующий.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
457 | Джо | Смит | Майами | FL |
Символ подчеркивания (_ ) — это еще один подстановочный знак, используемый для указания SQL, что только один символ может иметь префикс или заканчиваться определенной строковой последовательностью. Например, следующая инструкция SQL возвращает только те записи, в которых перед «iami» есть один символ.
SELECT * FROM Customer
WHERE City LIKE ‘_iami’
Разница между символом процента и символом подчеркивания заключается в том, что символ процента сообщает SQL, что любое количество символов может предшествовать заданной последовательности или следовать за ней, а символ подчеркивания означает, что только один символ может предшествовать или следовать за последовательностью.