应用多重条件,就是让数据库只保留同时满足、或分别满足几个条件的记录。当实操任务写“显示参加这个社团且出席次数达到某个数目的成员”时,就要用到它。
本课属于数据库查询与报表。用到的比较符号有 =、<>(不等于)、>、>=、< 和 <=。你的软件可能用设计网格显示,也可能用键入文字,但逻辑是一样的。
AND、OR 和括号如何运作?
AND 要求每个条件都成立。OR 只要求至少一个成立。当两者出现在同一个查询里,AND 先算,所以要改变顺序就需要括号。
- 把任务改写成句子,每个条件单独写。
- 决定条件如何连接:全部同时成立(AND),还是任一成立(OR)。
- 把 OR 的几个选项放进括号,当它们处于 AND 之内时。
- 运行之前先手算预期记录,从源表中找出来。
- 运行后对照数量和姓名。
完整例题
表格是模块页面里虚构的 Harbour Hill Clubs 表:十条记录,含 ID、Name、Year、Club、Fee 和 Sessions(共 12 节)。
任务:列出属于 Drama 或 Robotics、且至少出席 9 节的成员。
第 1 步,句子:(Club 是 Drama 或 Club 是 Robotics)并且 Sessions 至少 9。
第 2 步,条件:(Club = “Drama” OR Club = “Robotics”) AND Sessions >= 9
**第 3 步,手算:**Drama 成员是 Bella (12)、Chen (9)、Gopal (6)。Robotics 成员是 Evan (7)、Farah (12)、Jia (5)。保留 9 节或以上的:Bella、Chen、Farah。
**第 4 步,结果:**三条记录,Bella、Chen 和 Farah。如果查询显示的就是这三条,就与手工核对一致。
要避免的错误
漏掉括号:
Club = “Drama” OR Club = “Robotics” AND Sessions >= 9
因为先算 AND,这句的意思变成:任何出席次数的 Drama 成员,加上出席 9 节或以上的 Robotics 成员。
这会返回 Bella、Chen、Gopal 和 Farah 四条记录。Gopal 只出席了 6 节,不该出现。查询运行时没有任何报错,只有手工核对才能发现问题。
改正方法是像例题那样,把两个 OR 条件放进括号,并把记录数量与你的预期对照。
自测
使用虚构的表,先手算每个答案。
1. 哪些成员在 Year 11 并且 Fee 高于 RM40?
显示答案
Year 11 成员是 Bella (45)、Evan (60) 和 Hui (30)。Fee 高于 40 的保留 Bella 和 Evan。Bella 和 Evan,共两条记录。
2. 写出“出席 8 到 11 节(含两端)”的条件,并列出符合的成员。
显示答案
Sessions >= 8 AND Sessions <= 11。符合的有:Aiman (8)、Chen (9)、Dewi (11)、Hui (10)。**共四条记录。**Bella、Farah 和 Imran 是 12 节,所以排除。
3. 有多少成员不在 Chess?
显示答案
Club <> “Chess”。Chess 有四人,所以其余六人是 Bella、Chen、Evan、Farah、Gopal 和 Jia。
接下来学什么
记录选对之后,用第二排序键排序记录,把它们排成任务要求的顺序。你也可以在只读 SQL 练习实验室里测试查询,用 ICT 实操任务与证据检查器确认证据,再做练习题。
如果括号逻辑仍然让你不踏实,我们的老师可以在一对一线上 ICT 补习中陪你练习。