树叶云教你玩转MSSQL里SQL的AND和OR运算符怎么用才灵活点
- 问答
- 2025-12-31 05:09:34
- 3
树叶云教你玩转MSSQL里SQL的AND和OR运算符怎么用才灵活点 整理自“树叶云”平台的数据库入门教程系列)
你是不是刚开始学MSSQL,一看到查询条件里同时有AND和OR就开始头大?明明想查的是A或者B,但还得满足C这个条件,写出来的SQL语句结果却总是不对,别担心,这几乎是每个新手都会遇到的坎儿,我们就跟着“树叶云”的教程思路,抛开那些让人犯困的专业术语,用大白话来聊聊怎么把AND和OR用得更灵活、更准确。
先搞懂最基础的:AND和OR的“脾气”
想象一下,AND就像是一个严格的面试官,它要求你提交的所有条件都必须过关,少一个都不行,你想找“年龄大于30岁并且工资高于10000元”的员工,SQL语句就是 WHERE 年龄 > 30 AND 工资 > 10000,这个人必须同时满足两个条件,AND才会放行。
而OR则像是个好说话的介绍人,它觉得你提交的条件里只要有一个符合,就算合格,你想找“来自北京或者来自上海”的员工,SQL语句就是 WHERE 城市 = ‘北京’ OR 城市 = ‘上海’,这个人只要是北京或上海其中之一,OR就认可。
“树叶云”的教程打了个很形象的比方:AND是“,是“都”;OR是“或者”,是“或”,先把这两个核心意思刻在脑子里。
麻烦来了:当AND和OR混在一起
问题往往出在它们俩一起用的时候,看这个例子:领导让你查一下“所有销售部的人,或者人事部里工资大于8000的人”。
很多新手可能会下意识地写成:
SELECT * FROM 员工表 WHERE 部门 = ‘销售部’ OR 部门 = ‘人事部’ AND 工资 > 8000
你以为的计算顺序是:先找销售部的所有人,再找人事部里工资大于8000的人,然后把两部分合起来。
但数据库可不这么想!它有个严格的优先级规则:AND的优先级比OR高,这意味着,它会先计算AND两边的部分。
上面那句SQL的实际意思被数据库理解成了:
... WHERE 部门 = ‘销售部’ OR (部门 = ‘人事部’ AND 工资 > 8000)
这会导致什么结果呢?你会查到:
- 所有销售部的员工(不管工资多少,哪怕是2000块也会被查出来)。
- 人事部里并且工资大于8000的员工。
这显然和我们的本意有出入,我们的本意是“销售部的所有人”是一个整体,“人事部里工资高的”是另一个整体,然后用OR连接,但数据库却把“人事部”和“高工资”先紧紧地绑在了一起。
解决问题的金钥匙:括号()
想让数据库按照你的思路来思考,就必须请出“括号”这个法宝,括号的作用就是强制改变计算的先后顺序,括号里的内容会被视为一个不可分割的整体。
上面那个查询的正确写法应该是:
SELECT * FROM 员工表 WHERE (部门 = ‘销售部’) OR (部门 = ‘人事部’ AND 工资 > 8000)
虽然加了括号后,看起来和没加好像结果一样?不对,这里的关键在于明确了逻辑,但更常见且容易出错的例子是下面这种:
更典型的例子:
想查“来自北京或者上海,并且年龄大于25岁”的员工。
如果你的本意是这两个城市的人都需要满足年龄要求,写成 WHERE 城市=‘北京’ OR 城市=‘上海’ AND 年龄>25 就又错了(因为会先算AND,导致所有北京人都被查出,不管年龄)。
正确写法是用括号把“或”关系包起来:
WHERE (城市 = ‘北京’ OR 城市 = ‘上海’) AND 年龄 > 25
这样意思就非常明确了:先确定是北京或上海的人(这是一个整体),然后在这个整体里,再筛选年龄大于25的。
“树叶云”教程强调:当你无法确定优先级,或者AND和OR混合使用时,果断使用括号,多用括号不是一个坏习惯,它能让你和数据库之间的“沟通”零误会。
灵活运用的组合拳:IN 和 NOT
当你对同一个字段有多个“或”的条件时,用IN运算符会让语句更简洁。
WHERE 部门 = ‘销售部’ OR 部门 = ‘人事部’ OR 部门 = ‘市场部’,可以简写成:
WHERE 部门 IN (‘销售部’, ‘人事部’, ‘市场部’)
反过来,如果你想找除了这三个部门以外的所有人,就可以用NOT IN:
WHERE 部门 NOT IN (‘销售部’, ‘人事部’, ‘市场部’)
同样,结合AND也能实现复杂查询,查这三个部门里,工资高于5000但低于10000的员工:
WHERE 部门 IN (‘销售部’, ‘人事部’, ‘市场部’) AND 工资 > 5000 AND 工资 < 10000
这条语句清晰易懂:先圈定部门范围,再叠加两个工资条件(必须同时满足)。
最后的小贴士
- 养成加括号的习惯:即使是简单的混合条件,加上括号也能让代码更易读,避免未来的维护者(甚至几天后的你自己)看懵。
- 先写逻辑,再写SQL:动手前,先用大白话把查询需求写清楚,标出哪些条件是“,哪些是“或者”,然后再转化成SQL语句。
- 勤加测试:写完后,不要怕麻烦,用一些有代表性的测试数据跑一下,看看结果是不是你真正想要的,这是检验逻辑是否正确的唯一标准。
“树叶云”教程的核心观点是:AND和OR本身不难,难的是理清现实业务中的逻辑关系,只要你用括号这个工具把逻辑分组表达清楚,就能轻松玩转它们,让你的SQL查询既准确又灵活。

本文由颜泰平于2025-12-31发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/71691.html
