SQL - NOT运算符
你好,有抱负的SQL爱好者们!我很高兴能引导你进入SQL运算符的迷人世界,特别是NOT运算符。作为一个教SQL多年的老师,我可以向你保证,掌握这个运算符将显著提高你的数据库查询技能。那么,让我们开始吧!
SQL NOT运算符
NOT运算符就像那个总是反驳你所说的一切的朋友。它在SQL中用来否定一个条件,本质上是将布尔表达式的结果颠倒。当你使用NOT时,你是在说:“给我所有不符合这个条件的记录。”
让我们从一个简单的例子开始。假设我们有一个名为students
的表,包含id
、name
和age
列。
SELECT * FROM students WHERE NOT age = 20;
这个查询将返回所有不是20岁的学生。就像说:“展示所有学生,但排除20岁的。”
这里还有一个例子:
SELECT * FROM students WHERE NOT name = 'John';
这将给我们所有名字不是John的学生。可怜的John,总是被排除在外!
SQL NOT运算符与LIKE结合
现在,让我们通过将NOT与LIKE运算符结合来增加一些趣味。LIKE用于模式匹配,当与NOT结合时,它成为了一个基于模式排除的强大工具。
SELECT * FROM students WHERE name NOT LIKE 'A%';
这个查询将返回所有名字不以'A'开头的学生的名字。就像组织一个聚会并说:“每个人都受欢迎,除了那些名字以A开头的人!”(抱歉,Anna和Alex!)
这里还有一个有趣的例子:
SELECT * FROM students WHERE email NOT LIKE '%@gmail.com';
这将给我们所有不使用Gmail邮箱的学生。也许他们是嬉皮士,更喜欢不太知名的电邮服务!
SQL NOT运算符与IN结合
IN运算符用于在WHERE子句中指定多个值。当与NOT结合时,它允许我们排除一系列值。
SELECT * FROM students WHERE age NOT IN (18, 19, 20);
这个查询将返回所有不是18、19或20岁的学生。就像说:“展示除了青少年和年轻人以外的所有人!”
这里还有一个例子:
SELECT * FROM courses WHERE department NOT IN ('Math', 'Physics', 'Chemistry');
这将给我们所有不属于数学、物理或化学系的课程。对于那些想避免硬科学的人来说,这是完美的!
SQL NOT运算符与IS NULL结合
SQL中的NULL值代表缺失或未知信息。IS NULL运算符用于测试NULL值,当与NOT结合时,它帮助我们找到非NULL值。
SELECT * FROM students WHERE phone_number IS NOT NULL;
这个查询将返回所有提供了电话号码的学生。就像说:“展示所有我可以实际打电话的学生!”
这里还有一个实用的例子:
SELECT * FROM assignments WHERE submission_date IS NOT NULL;
这将给我们所有已经提交的作业。这个结果集中没有拖延者!
SQL NOT运算符与BETWEEN结合
BETWEEN运算符用于选择给定范围内的值。当与NOT结合时,它选择范围之外的值。
SELECT * FROM products WHERE price NOT BETWEEN 10 AND 20;
这个查询将返回所有价格低于10或高于20的产品。这对于预算购物者和奢侈品寻求者来说都是完美的!
另一个例子:
SELECT * FROM events WHERE event_date NOT BETWEEN '2023-01-01' AND '2023-12-31';
这将给我们所有在2023年以外发生的活动。时间旅行者,请注意!
SQL NOT运算符与EXISTS结合
EXISTS运算符用于测试子查询中是否存在任何记录。当与NOT结合时,它检查是否不存在满足子查询的记录。
SELECT * FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);
这个看起来复杂的查询实际上做的是一件简单的事情:它返回所有没有下订单的客户。就像在数据库中找到所有只是浏览的人!
这里还有一个例子:
SELECT * FROM employees e
WHERE NOT EXISTS (SELECT 1 FROM managers m WHERE m.employee_id = e.id);
这将给我们所有不是经理的员工。这是一个找到组织中的工蜂的好方法!
总结我们讨论过的所有NOT运算符方法,这里有一个方便的表格:
方法 | 描述 | 示例 |
---|---|---|
NOT与基本比较结合 | 否定一个简单条件 | WHERE NOT age = 20 |
NOT与LIKE结合 | 排除模式 | WHERE name NOT LIKE 'A%' |
NOT与IN结合 | 排除一系列值 | WHERE age NOT IN (18, 19, 20) |
NOT与IS NULL结合 | 找到非NULL值 | WHERE phone_number IS NOT NULL |
NOT与BETWEEN结合 | 排除范围 | WHERE price NOT BETWEEN 10 AND 20 |
NOT与EXISTS结合 | 检查子查询中的缺失 | WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id) |
那么,各位!我们已经探索了NOT运算符的所有荣耀。记住,在SQL和生活中,有时候知道你不需要什么和需要什么一样重要。快乐查询,愿你的结果永远NOT NULL!
Credits: Image by storyset