跳到正文
IGCSE·Tuition
计算机科学 · 练习

数据库与查询推理:原创综合练习

查询题奖励缓慢、逐行的检查,而这套练习正是为了训练这个习惯。

这十道题涵盖字段、记录、键、SELECT 筛选、布尔分组和空结果,由易到难。全部使用同一张虚构的 Plants 表,不含任何真实个人数据。

先自己写出答案,再打开详细解答。每条查询都要对照全部八条记录来测试,而不只是看起来可能的几条。

PlantIDNameTypePriceStockIndoor
P01FernFoliage12.508TRUE
P02CactusSucculent6.0025TRUE
P03RoseFlowering15.000FALSE
P04MintHerb4.5040FALSE
P05OrchidFlowering28.003TRUE
P06BasilHerb5.0012FALSE
P07AloeSucculent9.5015TRUE
P08HibiscusFlowering18.006FALSE

第 1 题。 这张表有几个字段、几条记录?

查看答案

字段是列:PlantID、Name、Type、Price、Stock、Indoor,共 6 个字段。记录是数据行 P01 到 P08,共 8 条记录。标题行不是记录。

第 2 题。 哪个字段是最合适的主键?为什么 Type 和 Indoor 不合适?

查看答案

PlantID 在每条记录中都不同,而且是专门为唯一而创建的。Type 会重复(Herb 出现两次),Indoor 只有两个值,所以都无法识别单一记录。

第 3 题。 为 Price、Stock 和 Indoor 各选一个最合适的数据类型。

查看答案

Price:real(有小数,例如 12.50)。Stock:integer(整数)。Indoor:Boolean(TRUE 或 FALSE)。

第 4 题。 写一条查询,显示每种香草(herb)的 Name,并给出结果。

查看答案
SELECT Name
FROM Plants
WHERE Type = "Herb"

记录 P04 和 P06 通过。结果:Mint、Basil。

第 5 题。 写一条查询,列出价格低于 10 的植物的 Name 和 Price,并说明返回几行。

查看答案
SELECT Name, Price
FROM Plants
WHERE Price < 10

Cactus 6.00、Mint 4.50、Basil 5.00、Aloe 9.50 通过。共 4 行。

第 6 题。 写一条查询,显示每种缺货植物的 Name。

查看答案
SELECT Name
FROM Plants
WHERE Stock = 0

只有 Rose 的 Stock 是 0。结果:Rose。

第 7 题。 这条查询返回什么?

SELECT Name FROM Plants
WHERE Indoor = TRUE AND Price >= 9.5
查看答案

室内植物:Fern 12.50、Cactus 6.00、Orchid 28.00、Aloe 9.50。价格至少 9.5:Fern、Orchid、Aloe 通过;Cactus 不通过。结果:Fern、Orchid、Aloe。

第 8 题。 写一条查询,显示室内植物的 Name,价格最高的在前,并给出结果。

查看答案
SELECT Name
FROM Plants
WHERE Indoor = TRUE
ORDER BY Price DESC

室内植物价格:Orchid 28.00、Fern 12.50、Aloe 9.50、Cactus 6.00。结果:Orchid、Fern、Aloe、Cactus。

第 9 题。 学生想要价格高于 6 的香草或多肉植物,却写成:

SELECT Name FROM Plants
WHERE Type = "Herb" OR Type = "Succulent" AND Price > 6

写出这条查询实际返回的行,然后改正查询。

查看答案

AND 先算:Herb,或者(Succulent 且 Price > 6)。Mint 和 Basil 因为是香草而通过。Cactus(6.00)不通过。Aloe(9.50)通过。实际结果:Mint、Basil、Aloe。

改正后的查询:

SELECT Name FROM Plants
WHERE (Type = "Herb" OR Type = "Succulent") AND Price > 6

这样只返回 Aloe,因为 Mint、Basil 和 Cactus 的价格都是 6 或更低。

第 10 题。 解释为什么这条查询没有返回行。

SELECT Name FROM Plants
WHERE Type = "Succulent" AND Stock > 20 AND Indoor = FALSE
查看答案

多肉植物是 Cactus 和 Aloe。库存大于 20 只剩 Cactus(25),因为 Aloe 只有 15。Cactus 的 Indoor = TRUE,所以不满足 Indoor = FALSE。没有记录通过全部三个条件,所以没有行返回。查询本身有效,只是唯一通过两个测试的记录没有通过最后一个。

如果做错了

把每个失误连同原因记进错题记录,几天后再到只读 SQL 练习实验室重做这条查询。回到单元概览规划下一个主题。

如果同样的错误一再出现,我们的老师可以通过计算机科学线上一对一补习帮助你。

更新于:

下一步

如果你在这套题里总在同一类题目上出错,一对一的老师可以对着你的答案,指出你的推理在哪一步偏离。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由家长与老师直接确认。

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

是家长或监护人?在这里咨询

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