跳到正文
IGCSE·Tuition
计算机科学 · 课程

解释查询为什么没有返回行

空结果不是错误信息,所以会让人觉得查询什么也没告诉你。

本页内容
  1. 常见原因有哪些?
  2. 例题
  3. 要留意的错误
  4. 自我检测
  5. 接下来学什么

当没有任何记录通过全部条件时,查询就不会返回行。查询本身运行正确:数据库只是没有找到匹配的内容。

考题要求你用文字解释,所以必须指出确切的原因。这一课为数据库与查询推理单元收尾。

常见原因有哪些?

按以下顺序检查:

  1. 不可能同时成立的条件。 一个字段不能同时等于两个不同的值。
  2. 数据之外的值。 测试的值不在表里,例如价格高于最大值。
  3. 拼写或类型不匹配。 "herbs" 不是 "Herb",数字也不是文本。
  4. 本该用 OR 却用了 AND。 AND 要求所有条件同时成立。
  5. 边界问题。 > 不包括该值本身。

例题

使用 Plants 表:

PlantIDNameTypePriceStockIndoor
P01FernFoliage12.508TRUE
P02CactusSucculent6.0025TRUE
P03RoseFlowering15.000FALSE
P04MintHerb4.5040FALSE
P05OrchidFlowering28.003TRUE
P06BasilHerb5.0012FALSE
P07AloeSucculent9.5015TRUE
P08HibiscusFlowering18.006FALSE
SELECT Name FROM Plants
WHERE Type = "Flowering" AND Indoor = TRUE AND Stock > 5

这条查询没有返回行。为什么?

步骤 1,列出通过第一个条件的记录。 Type = “Flowering”:Rose、Orchid、Hibiscus。

步骤 2,应用第二个条件。 Indoor = TRUE:Rose 是 FALSE,Orchid 是 TRUE,Hibiscus 是 FALSE。只剩 Orchid。

步骤 3,应用第三个条件。 Stock > 5:Orchid 的库存是 3,不大于 5。Orchid 不通过。

步骤 4,说明原因。 唯一的室内开花植物是 Orchid,它的库存是 3,所以没有记录满足全部三个条件。

最终答案:没有行,因为唯一通过前两个测试的记录没有通过 Stock 测试。一次过滤一个条件,就能看出最后一条记录是在哪里被淘汰的。

要留意的错误

常见的失误是回答“表是空的”或“查询有错误”。

错误答案:“Plants 表里没有开花植物。”

这是错的:Rose、Orchid 和 Hibiscus 都是开花植物。

纠正:说出每个条件之后剩下的记录,并指出是哪个测试把它去掉的。解释无结果时如果没有指出具体的条件,就拿不到分数。

自我检测

1. 为什么 WHERE Type = "Herb" AND Type = "Succulent" 什么也不返回?

查看答案

一条记录的 Type 只有一个值,所以不可能同时是 Herb 和 Succulent。这两个条件不可能同时为真。用 OR 则会返回 Mint、Basil、Cactus 和 Aloe。

2. 为什么 WHERE Price > 28 什么也不返回?怎样修改才能返回一行?

查看答案

最高价格是 28.00(Orchid),而 > 不包括它。改成 >= 28 就会返回 Orchid。

3. 学生写了 WHERE Type = "herb"。他们预期得到几行?实际可能得到什么?

查看答案

他们预期 2 行(Mint、Basil)。小写拼写是否匹配,取决于数据库是否忽略大小写,所以为稳妥起见,要与存储的拼写 "Herb" 完全一致。

接下来学什么

用原创练习题完成本单元。在只读 SQL 练习实验室尝试空结果的情况,亲眼看看它是怎么发生的。

如果你想学会把这样的解释写成清楚的考试答案,可以看看我们的计算机科学线上一对一补习。

更新于:

下一步

如果空结果让你分不清是查询出了问题还是数据本身,一对一的老师可以示范一套逐步检查的方法,适用于任何题目。

一小时付费试听课,按所安排老师确认的收费,RM80 起。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

家长:在这里咨询

  • 已通过我们的服务帮助 9,000+ 名学生
  • 9+ 年帮助 IGCSE 学生