mysql的NOT条件用于否定后续的查询条件,返回不满足条件的数据记录,是数据筛选场景中常用的逻辑操作符。通过灵活搭配NOT与其他查询语法,可以实现复杂的排除式筛选需求。

NOT条件的基础语法
NOT条件的基本使用格式是在需要否定的条件前添加NOT关键字,语法结构如下:
-- 基础NOT语法 SELECT 字段列表 FROM 表名 WHERE NOT 条件表达式;
也可以将NOT放在条件表达式内部,结合比较运算符使用,效果一致:
SELECT 字段列表 FROM 表名 WHERE 条件表达式 IS NOT 判断值;
NOT与比较运算符结合使用
NOT可以直接否定大于、小于、等于等比较运算的结果,筛选出不符合对应比较规则的数据。
假设存在用户表user_info,包含id、username、age、status字段,查询年龄不等于18的用户:
-- 方式1:使用NOT否定等于条件 SELECT id, username, age FROM user_info WHERE NOT age = 18; -- 方式2:使用不等于运算符,和上面语句效果一致 SELECT id, username, age FROM user_info WHERE age != 18; -- 方式3:使用<>不等于运算符 SELECT id, username, age FROM user_info WHERE age <> 18;
NOT与IN关键字结合使用
IN关键字用于匹配多个可选值,结合NOT可以筛选出不在指定值范围内的数据。
查询状态不是1、2、3的用户:
SELECT id, username, status FROM user_info WHERE NOT status IN (1, 2, 3);
上述语句等价于使用NOT IN:
SELECT id, username, status FROM user_info WHERE status NOT IN (1, 2, 3);
NOT与BETWEEN关键字结合使用
BETWEEN用于匹配某个区间范围内的值,结合NOT可以排除该区间的数据。
查询年龄不在18到30岁之间的用户:
-- 方式1:使用NOT否定BETWEEN条件 SELECT id, username, age FROM user_info WHERE NOT age BETWEEN 18 AND 30; -- 方式2:使用NOT BETWEEN SELECT id, username, age FROM user_info WHERE age NOT BETWEEN 18 AND 30;
NOT与LIKE关键字结合使用
LIKE用于模糊匹配字符串,结合NOT可以排除符合模糊匹配规则的数据。
查询用户名不包含test字符串的用户:
-- 方式1:使用NOT否定LIKE条件 SELECT id, username FROM user_info WHERE NOT username LIKE '%test%'; -- 方式2:使用NOT LIKE SELECT id, username FROM user_info WHERE username NOT LIKE '%test%';
NOT与NULL值判断结合使用
判断字段是否为NULL时,不能使用= NULL或者!= NULL,需要使用IS NULL和IS NOT NULL。
查询年龄字段不为空的的用户:
SELECT id, username, age FROM user_info WHERE age IS NOT NULL;
如果要查询年龄字段为空的记录,则使用:
SELECT id, username, age FROM user_info WHERE age IS NULL;
NOT与逻辑运算符结合使用
NOT可以和AND、OR结合,实现更复杂的多条件排除逻辑,需要注意运算符的优先级,NOT的优先级高于AND,AND的优先级高于OR。
查询年龄不等于18且状态不是0的用户:
SELECT id, username, age, status FROM user_info WHERE NOT age = 18 AND NOT status = 0;
查询年龄不等于18或者状态不是0的用户:
SELECT id, username, age, status FROM user_info WHERE NOT age = 18 OR NOT status = 0;
NOT条件使用注意事项
- NOT条件会否定后续整个表达式的结果,使用时要注意条件的范围,避免逻辑错误。
- 对索引字段使用NOT条件时,可能会导致索引失效,大数据量查询时需要评估性能影响。
- 判断NULL值必须使用
IS NULL和IS NOT NULL,不能使用NOT加等于或不等于判断。 - 复杂条件中建议使用括号明确优先级,避免因为运算符优先级问题导致查询结果不符合预期。
NOT条件是mysql查询中非常重要的逻辑操作符,熟练掌握其和各类关键字的搭配使用方法,能够帮助我们更灵活地实现数据筛选需求,减少复杂的嵌套查询逻辑。