SQL里那个Where条件怎么用,逻辑运算符又是咋回事,搞明白了查询才顺手
- 问答
- 2026-01-21 19:01:34
- 2
综合自W3School的SQL教程、菜鸟教程SQL部分以及《SQL必知必会》第4章与第5章的核心观点)
SQL里的Where条件,说白了就是给你的数据库查询加个“筛子”,没有Where子句的时候,你发出一条SELECT命令,SELECT * FROM 员工表”,数据库就会老老实实把整个“员工表”里所有员工的信息,不管有用的没用的,一股脑全倒给你,这就像你让仓库管理员把整个库房的东西都搬出来,不仅累死个人,而且你想找的那个特定工具很可能被埋在一大堆杂物里,很难找。
Where条件的作用就是让你能精确地告诉数据库:“我只要符合某某条件的那些行”,它的基本结构非常简单,紧跟在FROM表名后面,写法就是 WHERE 条件表达式,这个“条件表达式”就是你要设定的筛选规则。
Where条件怎么用:从最简单的比较开始
最基础的条件就是拿一个字段和某个值进行比较,你只想看所有在“销售部”的员工,语句就可以这么写:
SELECT * FROM 员工表 WHERE 部门 = ‘销售部’;
这里用的等号“=”就是最常用的比较运算符,除了等号,还有其他几个帮你比大小的伙计:
- :等于
- <> 或 :不等于(有的数据库用<>,有的用!=,但意思一样)
- < :小于
- > :大于
- <= :小于等于
- >= :大于等于
举个例子,想查询工资超过10000元的员工:SELECT 姓名, 工资 FROM 员工表 WHERE 工资 > 10000;,想找所有不是经理的员工:SELECT 姓名, 职位 FROM 员工表 WHERE 职位 <> ‘经理’;。
还有一个非常重要的运算符叫 BETWEEN,它用来检查某个值是否在一个区间范围内,比如查工资在8000到15000元之间的员工(包含8000和15000):SELECT 姓名, 工资 FROM 员工表 WHERE 工资 BETWEEN 8000 AND 15000;,这比你写 WHERE 工资 >= 8000 AND 工资 <= 15000 更简洁。
然后是 IN 运算符,它用来匹配一组可能的值,假如你想找在“销售部”、“技术部”或“市场部”的员工,用IN就非常方便:SELECT 姓名, 部门 FROM 员工表 WHERE 部门 IN (‘销售部’, ‘技术部’, ‘市场部’);,这同样比用多个OR连接条件要清爽得多。
处理空值的 IS NULL,数据库里的空值(NULL)表示缺失或未知的数据,它不能用等号来判断,比如想找出没有填写手机号的员工记录,必须这么写:SELECT 姓名 FROM 员工表 WHERE 手机号 IS NULL;,如果写成 WHERE 手机号 = NULL 是错的,查不到任何结果。
逻辑运算符:让筛选条件组合起来,威力倍增
很多时候,你的筛选要求没那么简单,可能需要同时满足好几个条件,或者满足其中任意一个就行,这时候就需要逻辑运算符出场了,它们能把简单的条件组合成复杂的逻辑,主要的逻辑运算符有三个:AND、OR、NOT。
-
AND:表示“。只有当AND连接的所有条件都成立时,整条记录才会被选中,它相当于严格把关,条件会越来越窄。
- 例子:你想找“销售部”的,工资高于10000元”的员工,这两个条件必须同时满足:
SELECT * FROM 员工表 WHERE 部门 = ‘销售部’ AND 工资 > 10000;,这样筛出来的人,既得是销售部的,工资还得够高。
- 例子:你想找“销售部”的,工资高于10000元”的员工,这两个条件必须同时满足:
-
OR:表示“或者”。只要OR连接的任意一个条件成立,整条记录就会被选中,它相当于扩大范围,条件会变宽。
- 例子:你想找在“北京”的,或者“上海”的员工,只要满足其中一个城市条件就行:
SELECT * FROM 员工表 WHERE 城市 = ‘北京’ OR 城市 = ‘上海’;。
- 例子:你想找在“北京”的,或者“上海”的员工,只要满足其中一个城市条件就行:
-
NOT:表示“非”,用于否定一个条件,它会把条件反过来。
- 例子:你想找所有不在“销售部”的员工:
SELECT * FROM 员工表 WHERE NOT 部门 = ‘销售部’;,这等价于WHERE 部门 <> ‘销售部’。
- 例子:你想找所有不在“销售部”的员工:
重要提醒:当AND和OR混用时,千万小心优先级!
当你把AND和OR写在同一个WHERE条件里时,很容易出错,因为数据库会优先处理AND操作,然后再处理OR操作,这就像数学里的“先乘除后加减”一样。
看个容易出错的例子:你想找出所有“销售部”的员工,或者“技术部”里“工资大于15000”的员工。
你可能会直觉地写成:SELECT * FROM 员工表 WHERE 部门 = ‘销售部’ OR 部门 = ‘技术部’ AND 工资 > 15000;
这个查询的结果可能和你想象的不一样!数据库并不是按从左到右的顺序解读的,它实际的理解是:找出“销售部”的所有员工(不管工资多少)或者 “技术部且工资大于15000”的员工,也就是说,销售部月薪3000的员工也会被查出来,但这可能不是你的本意。
你的本意很可能是先是一个“或”关系(部门是销售部或技术部),然后在这个基础上再加一个“且”关系(工资大于15000),正确的写法是用圆括号()来明确指定优先级,括号里的条件会先被计算。
正确的语句应该是:SELECT * FROM 员工表 WHERE (部门 = ‘销售部’ OR 部门 = ‘技术部’) AND 工资 > 15000;
加上括号后,意思就非常清晰了:先筛选出部门是销售部或技术部的员工,然后再从这批人里找出工资大于15000的。养成在复杂条件里使用括号的习惯,能避免很多莫名其妙的查询结果。
Where条件是你的精准查询工具,而逻辑运算符让你能组合各种条件,从简单的单条件过滤,到用AND、OR、NOT构建复杂逻辑,再到用括号控制优先级,每一步都搞明白了,你向数据库提问的能力就上了一个大台阶,查询起来自然就得心应手了。

本文由歧云亭于2026-01-21发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/84138.html
