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