MySQL - NOT LIKE Operator
Привет, будущие энтузиасты баз данных! Сегодня мы окунемся в чудесный мир MySQL и рассмотрим мощный инструмент в нашем арсенале SQL: оператор NOT LIKE. Как ваш доброжелательный сосед-преподаватель информатики, я с радостью провожу вас через это путешествие, даже если вы еще ни разу не писали строку кода. Так что пристегните ремни и начнем!
Оператор NOT LIKE в MySQL
Оператор NOT LIKE - это как бунтарскийibling оператора LIKE. В то время как LIKE помогает нам найти соответствующие шаблоны, NOT LIKE делает обратное - он помогает нам найти все, что не соответствует определенному шаблону. Это как сказать вашему компьютеру: "Покажи мне все, кроме этого!"
Давайте начнем с простого примера. Представьте, что у нас есть таблица books
с колонкой title
. Если мы хотим найти все книги, которые не начинаются с буквы 'A', мы можем использовать:
SELECT * FROM books WHERE title NOT LIKE 'A%';
Вот что делает этот код:
-
SELECT *
: Это говорит MySQL выбрать все столбцы. -
FROM books
: Мы ищем в таблицеbooks
. -
WHERE title NOT LIKE 'A%'
: Это магическая часть. Она говорит: "Дай мне все заголовки, которые не начинаются с 'A'."
Символ %
- это wildcard, который означает " может следовать что угодно". Таким образом, 'A%'
означает "A, за которым может следовать что угодно".
Использование оператора NOT LIKE с wildcard
Теперь давайте добавим немного остроты с помощью wildcards! MySQL предоставляет два основных wildcards:
-
%
: Представляет ноль, один или несколько символов -
_
: Представляет один символ
Вот таблица.common использования wildcards:
Wildcard | Описание | Пример |
---|---|---|
% |
Любое количество символов | '%adventure%' |
_ |
Один символ | '_at' |
[charlist] |
Любой один символ в charlist | '[abc]%' |
[^charlist] или [!charlist]
|
Любой один символ не в charlist | '[^abc]%' |
Давайте представим, что мы хотим найти все заголовки книг, которые не заканчиваются на "ing":
SELECT * FROM books WHERE title NOT LIKE '%ing';
Или, может быть, мы хотим книги, у которых нет exactly три символа:
SELECT * FROM books WHERE title NOT LIKE '___';
Каждый символ подчеркивания представляет один символ, поэтому '___'
означает "точно три символа".
Использование оператора NOT LIKE с операторами AND/OR
Иногда нам нужно combine несколько условий. Вот где операторы AND и OR становятся полезными. Давайте найдем книги, которые не начинаются с 'T' и не заканчиваются на 'ing':
SELECT * FROM books
WHERE title NOT LIKE 'T%'
AND title NOT LIKE '%ing';
Или, может быть, мы хотим книги, которые не начинаются с 'A' и не заканчиваются на 'z':
SELECT * FROM books
WHERE title NOT LIKE 'A%'
OR title NOT LIKE '%z';
Помните, AND означает, что оба условия должны быть верны, а OR означает, что至少 одно условие должно быть верно.
Оператор NOT LIKE для строк
Оператор NOT LIKE особенно полезен при работе со строками. Давайте представим, что у нас есть таблица customers
и мы хотим найти всех клиентов, имена которых не содержат 'son':
SELECT * FROM customers
WHERE name NOT LIKE '%son%';
Этот запрос вернет все имена, которые не имеют 'son' где-либо. Таким образом, 'Johnson' и 'Sonny' будут исключены, но 'Smith' и 'Brown' будут включены.
Вот интересный поворот: что, если мы хотим найти имена, у которых 'a' не является вторым символом?
SELECT * FROM customers
WHERE name NOT LIKE '_a%';
Этот запрос говорит: "Покажи мне все имена, где второй символ не 'a'."
Использование оператора NOT LIKE с клиентской программой
Теперь давайте применяем все эти знания на практике с помощью клиентской программы MySQL. Я буду использовать командную строку MySQL для этого примера, но принципы применяются к любому клиенту MySQL.
Сначала создадим простую таблицу employees
:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
position VARCHAR(50)
);
INSERT INTO employees (name, position) VALUES
('John Doe', 'Manager'),
('Jane Smith', 'Developer'),
('Bob Johnson', 'Designer'),
('Alice Brown', 'Tester');
Теперь найдем всех сотрудников, чьи должности не начинаются с 'D':
SELECT * FROM employees
WHERE position NOT LIKE 'D%';
Это должно вернуть John Doe (Manager) и Alice Brown (Tester).
Давайте попробуем что-то более сложное. Мы хотим найти сотрудников, имена которых не начинаются с 'J' и чьи должности не заканчиваются на 'er':
SELECT * FROM employees
WHERE name NOT LIKE 'J%'
AND position NOT LIKE '%er';
Это должно вернуть Alice Brown (Tester).
И вот оно! Вы только что освоили оператор NOT LIKE в MySQL. Помните, что практика makes perfect, так что не бойтесь экспериментировать со своими запросами. Кто знает? Вы можете обнаружить интересные закономерности в своих данных, о которых вы никогда не подозревали!
Заканчивая, я хочу поделиться с вами一个小ким секретом из своих лет преподавания: лучший способ научиться SQL - это относиться к нему как к головоломке. Каждый запрос - это загадка, ждущая своего решения. Так что наденьте шляпу детектива и начните исследовать свои данные. Счастливого запроса, будущие маги баз данных!
Credits: Image by storyset