MySQL - NOT LIKE 操作符

你好,有抱负的数据库爱好者们!今天,我们将深入MySQL的奇妙世界,探索我们SQL工具箱中的强大工具:NOT LIKE操作符。作为你友好的邻居计算机老师,我很兴奋能引导你完成这次旅程,即使你之前从未编写过一行代码。那么,系好安全带,让我们开始吧!

MySQL - NOT LIKE Operator

MySQL NOT LIKE 操作符

NOT LIKE操作符就像是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'开头的标题。”

百分号%是一个通配符,表示“后面可以跟任何东西”。所以'A%'意味着“A后面跟着任何东西”。

使用NOT LIKE操作符和通配符

现在,让我们用一些通配符来给事情加些料!MySQL提供了两个主要的通配符:

  • %:代表零个、一个或多个字符
  • _:代表单个字符

以下是一些常见的通配符用法表格:

通配符 描述 示例
% 任意数量的字符 '%adventure%'
_ 单个字符 '_at'
[charlist] charlist中的任意单个字符 '[abc]%'
[^charlist][!charlist] 不在charlist中的任意单个字符 '[^abc]%'

假设我们想找到所有不以"ing"结尾的书籍标题:

SELECT * FROM books WHERE title NOT LIKE '%ing';

或者,也许我们想找到没有恰好三个字符的书籍:

SELECT * FROM books WHERE title NOT LIKE '___';

每个下划线代表一个字符,所以'___'意味着“恰好三个字符”。

使用NOT LIKE操作符与AND/OR操作符

有时,我们需要组合多个条件。这时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'的名字。”

使用MySQL客户端程序使用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)。

就是这样!你刚刚掌握了MySQL中的NOT LIKE操作符。记住,熟能生巧,所以不要害怕用你自己的查询来实践。谁知道呢?你可能会在你的数据中发现一些你之前从未注意到的有趣模式!

在我们结束之前,我想分享一个我从多年教学经验中学到的秘密:学习SQL的最佳方式是把它当作一个益智游戏。每个查询都是一个等待解决的谜题。所以,戴上你的侦探帽子,开始探索你的数据。祝你好运,未来的数据库巫师们!

Credits: Image by storyset