单表里边怎么写好多条件的查询语句,感觉有点复杂但其实也不难吧
- 问答
- 2025-12-24 02:19:11
- 2
整理自网络技术社区讨论和开发者经验分享,非官方教材,仅供参考)
直接说重点:单表多条件查询,你感觉复杂是因为条件一多,脑子容易乱,但核心就一句话——用WHERE接上AND或者OR,像搭积木一样把条件组合起来,我慢慢给你拆开讲。
你得忘掉“复杂”这个词,你就把它当成你在电商网站筛选商品:你要找一件“价格低于200元”、“颜色是黑色或者蓝色”、“并且是纯棉的”的T恤,你的每一个要求,就是SQL语句里的一个“条件”,数据库的工作就是帮你从一堆衣服里,把同时满足这几个条件的找出来。
第一步:最基础的,用AND连接“必须同时满足”的条件
比如你有一个员工表,想找出“销售部”里“工资大于8000”的人,这就是两个必须同时满足的条件。
SELECT * FROM 员工表 WHERE 部门 = '销售部' AND 工资 > 8000;
你看,WHERE后面跟了第一个条件部门 = '销售部',然后用AND连接第二个条件工资 > 8000,这很简单,对吧?再来三个、四个条件也一样,一直用AND连下去就行了。
SELECT * FROM 员工表 WHERE 部门 = '销售部' AND 工资 > 8000 AND 入职日期 > '2020-01-01' AND 状态 = '在职';
这就找出了2020年以后入职的、还在职的、销售部的高工资员工,逻辑非常直接。
第二步:用OR连接“满足一个就行”的条件
现在需求变了,想找出“销售部”或者“市场部”的所有员工,这两个条件满足一个就行。
SELECT * FROM 员工表 WHERE 部门 = '销售部' OR 部门 = '市场部';
第三步:当AND和OR混在一起时,问题就来了——优先级和括号
这是最容易让人头晕的地方,你想找出:“(属于销售部)工资大于8000或者有年终奖)”的员工,注意我的断句。
如果你写成这样就错了:
-- 这是错误写法! SELECT * FROM 员工表 WHERE 部门 = '销售部' AND 工资 > 8000 OR 年终奖 IS NOT NULL;
数据库会先算AND(因为它优先级比OR高),这句就变成了:“(销售部且工资高)或者(有年终奖)的人”,这意味着,其他部门但有年终奖的人也会被找出来,这不符合你的本意。
正确的做法是用括号把“或者”的部分包起来,明确告诉数据库先算括号里的。
-- 正确写法 SELECT * FROM 员工表 WHERE 部门 = '销售部' AND (工资 > 8000 OR 年终奖 IS NOT NULL);
括号就像数学里的(),强制改变计算顺序,这句的意思就很明确了:必须是销售部的人;在这个基础上,要么工资高,要么有年终奖,满足一条即可。
第四步:处理模糊条件和空值
-
模糊查询用LIKE:比如找名字里带“张”的员工。
SELECT * FROM 员工表 WHERE 姓名 LIKE '%张%';
代表任意多个字符。
-
判断空值用IS NULL或IS NOT NULL:比如找“邮箱地址没填”的员工。
SELECT * FROM 员工表 WHERE 邮箱 IS NULL;
切记不能写
= NULL,这是错的。
第五步:终极技巧,用1=1来“耍个小聪明”
这个技巧在动态拼接SQL时特别有用,比如根据用户在前端选择的不同条件来生成查询,想象一下,你可能有姓名、部门、状态等多个筛选框,用户可能只填其中几个。
如果不用技巧,拼接SQL会很痛苦:
-- 如果用户只填了姓名,SQL是:WHERE 姓名 = '张三' -- 如果用户又填了部门,SQL得变成:WHERE 姓名 = '张三' AND 部门 = '销售部' -- 每次都要判断哪个条件是第一个,要不要加AND,代码写起来很啰嗦。
聪明的方法是,在WHERE后面先写一个永真条件1=1,然后后面所有的条件都统一用AND开头。
SELECT * FROM 员工表 WHERE 1=1 /*[如果用户输入了姓名]*/ AND 姓名 = '张三' /*[如果用户选择了部门]*/ AND 部门 = '销售部' /*[如果用户选择了状态]*/ AND 状态 = '在职';
这样做,无论用户使用哪几个条件,你程序里生成SQL语句的代码都可以很简单地、无脑地在后面追加AND 条件,因为1=1永远成立,它不影响结果,但让代码拼接变得极其简单,这是个非常实用的“野路子”。
别怕多条件查询,它就是个逻辑游戏。
- 和的关系用
AND。 - 或的关系用
OR。 - 当AND和OR混用,一定要用括号来理清逻辑,这是避免出错的关键。
- 模糊、空值有专门的用法。
- 动态查询时,
1=1技巧能帮你大忙。
遇到复杂的查询,别急着写代码,先拿张纸,像我们最开始举买衣服的例子一样,用中文把需求清晰地描述出来,分清哪些条件要同时满足,哪些满足一个就行,然后再动手翻译成SQL,你会发现,真的不难。

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