01_AND组合查询_把既要又要翻译成SQL

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