SQL 零基础(一):AND 组合查询——把"既要、又要、还要"翻译成 SQL
系列说明:本系列用一个真实的"奥运会管理系统"数据库做例子,Athlete 表里存着 1000 名运动员。所有语句都可以跟着敲,跟着跑。
从一个真实需求说起
想象你是奥组委的工作人员,领导走过来说:
“帮我查一下,咱们系统里中国的、女性运动员都有谁?”
注意,领导一口气提了两个要求:国家是中国、性别是女。少满足一个都不行——中国男运动员不要,外国女运动员也不要。
这种"既要、又要"的查询,就是组合查询,SQL 里靠一个单词解决:AND。
先复习:单条件查询
只有一个要求时,你已经会写了:
SELECT*FROMAthleteWHERECountryCode='CN'WHERE 后面那坨叫条件,数据库会拿着它逐行检查:满足的留下,不满足的丢掉。
AND:把条件串起来
两个要求?直接用 AND 把两个条件串起来:
SELECT*FROMAthleteWHERECountryCode='CN'ANDGender='F'数据库检查每一行时,现在要连过两关:
| 运动员 | CountryCode = ‘CN’? | Gender = ‘F’? | 结果 |
|---|---|---|---|
| 张三(中国男) | ✅ | ❌ | 淘汰 |
| Mary(美国女) | ❌ | 不用看了 | 淘汰 |
| 李四(中国女) | ✅ | ✅ | 留下 |
AND 的规则一句话:所有条件全部为真,这一行才能留下。一关不过,直接出局。
三个、四个条件?继续串!
回到开头的问题:如果领导又补了一句"要练射击的(SportID = 35)、姓名里带 an 的"呢?
有几个要求,就串几个 AND,想串多长串多长:
SELECT*FROMAthleteWHERECountryCode='CN'ANDGender='F'ANDSportID=35ANDFirstNameLIKE'%an%'(那个LIKE '%an%'是模糊匹配,意为"名字里含 an"——它的完整用法和一个大小写暗坑,见系列第五篇。)
这里有个新手常见疑问:四个条件是不是要用三个 AND?对!AND 是"连接词",N 个条件之间有 N−1 个缝隙,每个缝隙塞一个 AND。就像糖葫芦:4 颗山楂,3 段签子连接。
排版小技巧:条件多的时候,每个条件占一行、AND 顶头写(如上),一眼就能数清有几个条件。挤在一行里很容易漏写一个 AND,报错了都找不到在哪。
AND 的兄弟:OR
AND 是"全都要",OR 是"满足一个就行":
-- 中国或者日本的运动员(两国都要)SELECT*FROMAthleteWHERECountryCode='CN'ORCountryCode='JP'⚠️大坑预警:AND 和 OR 混用时,必须加括号!
-- 需求:中国或日本的"女"运动员-- ❌ 错误写法(会查出所有中国人+日本女性,细品)WHERECountryCode='CN'ORCountryCode='JP'ANDGender='F'-- ✅ 正确写法WHERE(CountryCode='CN'ORCountryCode='JP')ANDGender='F'原因:AND 的优先级比 OR 高(就像乘法先于加法),不加括号,AND 会先把'JP' AND Gender='F'绑成一团。记不住优先级没关系,混用时无脑加括号,永远不会错。
实战思考题
奥运系统的"运动员管理"界面上,有姓名、国家、性别、项目四个筛选框,用户可能只填其中几个(比如只选了性别)。这时程序该怎么办?
答案是:用户填了几个框,SQL 就动态拼几个条件。只选性别时,后台真正执行的是WHERE Gender = 'F';四个全填,就是三个 AND 串四个条件。"按需拼接 SQL"是所有管理系统查询功能的通用套路——这个进阶玩法,我们会在 C# 开发篇里手写一遍。
一句话带走
WHERE 是安检门,AND 是加装的第二、第三道门——全过才放行;OR 是并排的门,过一道就算进;混用时,括号就是导流围栏。
下一篇:《TOP 10 到底是怎么取出来的?——先排队,再掐尖》