对于上述例题中两个NOT EXISTS嵌套的执行过程的理解: 两个NOT EXISTS嵌套的执行过程相当于一个二重循环,第一重是将Student表中的每个元组代入内查询(即每个同学),第二重是将(SELECT * FROM Course,Teacher WHERE Course.T#=Teacher.T# AND Tname=‘张小龙’)的结果集(即张小龙老师的每门课)代入内查询,总的循环次数是 学生数量*张小龙老师所教授课程数量。如果第二重循环里的结果都是该同学过了张老师的课才可以将该同学放入最外层查询的结果表里。 下面用一段伪代码(python语句与sql语句结合着来写的)来表示这个执行过程:
For Sno in Student.Sno: #表示从Student表中选出某个同学
n=0#记录该同学学过张小龙老师所教授课程的数量
For Cno in 张Cno: #表示从张小龙老师所教授课程中选出某门课程
If Cno in Sno’s_cno:#如果该学生学过该课程
n=n+1if n==3:#在这里假设张小龙老师所教授课程的数量为3print(‘学过张小龙老师教授的全部课程的同学:’,Sno)