关于ALPHA语言其实并不难,本文想重点记录一下再学习ALPHA的一些较难点——用元组变量检索。
尤其是存在量词与全称量词的理解问题,在做到课本上全称量词的使用的时候,我想了很多天,包括问了老师,一直无法理解,后来自己突然醒悟,明白了自己在某个点上卡住了,特此记录。
本文以一道习题为例进行讨论
分析
《数据库系统概论》第五版 P59 例2.25
![XA}QG7Z57PQKAV_M)QUN_0.png
全称量词理解
全称量词来写这个表达式,我一直很难理解,一直卡在一个点上。
首先,最重要的是明确几个事情:
- 需要在几个表中查询:2个
- 查询的是什么:Studente.Sname,一定要明确,你查询的是第一个表中的元素。
- 后面的全称量词的式子的作用是什么:对前面的待查元素进行约束,这是非常重要的,后面的式子仅仅是对前面的待查元素进行约束。
如果需要模拟上面的查询流程,应当是这样的:
- 首先拿出Student表中的第一个元组,检查Student.Sno是否等于SC表中的一个元组的Sno,
- 如果Student.Sno=SCX.Sno,则检查SC表中的这个元组,SCX.Cno是否等于c1,如果不等于,则换到下一个元组,如果等于,那么说明Student表中的Sname不是我们想要的。
- 如果Student.Sno!= SCX.Sno,则满足要求,输出Student.Sname。
文字表述不清晰,可以看下面这张图:
理解的关键点是:
对于全称量词,我们首先拿出Student中的一个元组,然后遍历SC中的每一个元组,看看Student中的这个元组,是否满足后面的包含全称量词的约束条件,如果满足,则输出Student.Sname,不满足就继续Student.Sname的下一个元组,SC表对变量是起一个约束作用,全称量词的要求是,遍历SC表中的每一个元素,依次对Student.Sname进行检查
重点:在两个表中进行查询,后面一个表对前面的变量起到的是约束作用。
存在量词理解
存在量词理解比全称量词简单,只要后面的那个SC表中,找到了一个能够使Student.Sname满足题意,就进行输出Student.Sname,这里不需要像全称量词那样检查SC中每一个元素。