通过上课的学习与个人的总结了解到数据库可以从两个方面进行考虑:
####1.通过集合的方式进行理解 ####以集合的方式来理解的话,一个表就是一个多个域随意组合的结果的一个子集,通过选择、投影、并、差、笛卡尔积的方式将想要的结果展示出来。
####2.通过循环的方式进行理解 ####循环的话以EXISTS为例: ####学生是否选择了一号课为例 ``` SELECT Sno FROM Student s WHERE EXISTS( SELECT * FROM SC WHERE sno = s.sno AND cno = 1 ); ``` ####上述的代码可以理解为一个二重的循环: ``` RESULT<-NULL for each tuple ts of Student do{ for each tuple tsc of SC do{ if the tuples ts and tsc match{ add ts to RESULT; break; } } } ``` ####一个EXISTS可以理解为是一个二重循环
首先外层查询的第一个元组与内层循环的第一个元组进行匹配,配置之后,外层的第一个元组与内层的第二个元组进行匹配......当内层的匹配完成之后,外层的第二个元组和内层的元组一次进行匹配,从而循环到外层的最后一个和内层的最后一个元组匹配完成。 ####
####其中select语句相当于关系代数中的Π(投影) ####其中from语句相当于关系代数中的笛卡尔积 ####其中where语句相当于关系代数中的σ(选择),当数据库的where语句后边的内容为true(真)的时候则将改结果添加到返回的结果列表中,若为false(假)则不将其添加到结果列表中
####个人的观点:在书写相关的SQL语句的时候,关键的不是用什么方法将其解决,关键是知道表的形成过程以及语句的执行顺序由为重要。