MySQL - NOT LIKE Operator

Привет, будущие энтузиасты баз данных! Сегодня мы окунемся в чудесный мир MySQL и рассмотрим мощный инструмент в нашем арсенале SQL: оператор NOT LIKE. Как ваш доброжелательный сосед-преподаватель информатики, я с радостью провожу вас через это путешествие, даже если вы еще ни разу не писали строку кода. Так что пристегните ремни и начнем!

MySQL - NOT LIKE Operator

Оператор 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