在SQL中,
NOT
NOT
要使用
NOT
WHERE
HAVING
最常见的几种用法包括:
!=
<>
NOT
=
WHERE NOT (column = value)
!=
<>
WHERE NOT (column IS NULL)
WHERE column IS NOT NULL
WHERE NOT (column LIKE 'pattern%')
pattern
WHERE NOT (column IN (value1, value2))
column
WHERE NOT (column BETWEEN value1 AND value2)
column
WHERE NOT EXISTS (SELECT 1 FROM another_table WHERE ...)
示例:
假设我们有一个
products
product_name
price
-- 找出价格不为空的产品 SELECT product_name, price FROM products WHERE NOT (price IS NULL); -- 找出产品名称不以'Apple'开头的,或者不包含'Pro'的产品 SELECT product_name FROM products WHERE NOT (product_name LIKE 'Apple%' OR product_name LIKE '%Pro%'); -- 找出价格不在100到500之间的产品 SELECT product_name, price FROM products WHERE NOT (price BETWEEN 100 AND 500); -- 找出除了'Laptop'和'Mouse'之外的所有产品 SELECT product_name FROM products WHERE NOT (product_name IN ('Laptop', 'Mouse'));
你看,
NOT
NOT
在我日常写SQL的时候,
NOT
首先,最直观的就是排除特定值或集合。比如,你有一批订单数据,想找出除了“已取消”和“已完成”状态之外的所有订单,这时候
NOT IN ('已取消', '已完成')
NOT (status = '已取消')
status != '已取消'
NOT IN
AND status != ...
其次,是排除空值。虽然我们有
IS NOT NULL
NOT (column IS NULL)
WHERE column IS NOT NULL
NOT (column IS NULL)
再来,排除不符合特定模式的字符串。如果你在处理文本数据,比如产品描述或者用户评论,想找出那些不包含某个关键词,或者不以某个前缀开头的记录,
NOT LIKE
WHERE email_subject NOT LIKE '优惠券%'
还有就是排除特定范围的数据。比如,我想找出那些年龄不在18到60岁之间的用户,
WHERE age NOT BETWEEN 18 AND 60
最后,也是我觉得最强大、但也最容易让人犯迷糊的,是基于子查询结果的排除。
NOT EXISTS
NOT IN (subquery)
WHERE NOT EXISTS (SELECT 1 FROM orders WHERE orders.customer_id = customers.id)
NOT
总的来说,
NOT
NOT
!=
<>
这个问题我经常被问到,也看到不少初学者在这里犯迷糊。说白了,
!=
<>
<>
!=
而
NOT
NOT
NOT
举个例子你就明白了:
!=
<>
price != 100
NOT price
NOT
NOT (price > 100 AND stock_quantity < 10)
IS NULL
LIKE
IN
BETWEEN
EXISTS
那么,何时应该使用它们呢?
我的经验是,如果你只是简单地想表达“不等于某个值”,那么
!=
<>
-- 找出产品ID不等于100的产品 SELECT * FROM products WHERE product_id != 100; -- 或者 SELECT * FROM products WHERE product_id <> 100;
这种情况下,用
NOT (product_id = 100)
然而,当你的否定需求变得复杂,或者你需要否定除了等值比较之外的任何条件时,
NOT
WHERE NOT (email IS NULL)
WHERE email IS NOT NULL
WHERE NOT (product_name LIKE '%限定版%')
WHERE NOT (category IN ('电子产品', '图书'))
WHERE NOT (order_date BETWEEN '2023-01-01' AND '2023-01-31')
WHERE NOT (status = '已完成' OR amount < 50)
NOT
所以,总结一下:
!=
<>
NOT
NOT
NOT
用
NOT
NULL
首先,也是最最重要的一点:括号是你的救星! 很多人在用
NOT
NOT
比如:
WHERE NOT condition_A AND condition_B
WHERE (NOT condition_A) AND condition_B
condition_A
AND
condition_B
WHERE NOT (condition_A AND condition_B)
WHERE NOT condition_A OR NOT condition_B
这个细节,我见过太多次导致查询结果不符合预期的案例了,通常都是因为括号没用对。
其次,NULL
NULL
NULL
IS NULL
IS NOT NULL
UNKNOWN
TRUE
FALSE
WHERE
TRUE
这意味着什么呢?
WHERE NOT (column = 'value')
column
column
NULL
column = 'value'
NULL
UNKNOWN
NOT UNKNOWN
UNKNOWN
NULL
WHERE column != 'value' OR column IS NULL
NULL
WHERE NOT (column = 'value') AND column IS NOT NULL
WHERE column != 'value'
!=
NULL
这个
NULL
再者,性能考量。虽然现代SQL优化器已经非常智能了,但在某些情况下,使用
NOT
WHERE NOT column LIKE 'prefix%'
column
最后,从可读性的角度来说,过度嵌套的
NOT
NOT
NOT (A AND B)
NOT A OR NOT B
NOT (A OR B)
NOT A AND NOT B
掌握这些,你在使用
NOT
以上就是sql怎样用NOT否定查询条件 sql否定查询的简单语句教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号