作业中积累的知识点:
关系代数部分:
1.sigma 和 pi 执行的先后实际上是可能存在影响的.
2.theta join没有结合律 但是natural join有.
3.自我natural join 就是自己
4.关系代数比sql好在有除法 还有集合操作比较简单 交并差都可以使用
5.count等聚集函数没有distinct关键字, 如果需要去重, 使用pi投影预处理关系.
sql部分:
1.primary key会建立主键索引, 同时还可以建立外键关系, unique not null则不能
2.order by 每个属性默认asc
3.select默认是包含重复的, 而关系代数中投影是默认去重的.
4.除了count(*)其他的所有聚集操作都不会统计null
5.natural join 可以不要on 但是其余join没有on 或 using就报错
6.即使natural join了你也可以访问被省略掉的另一个表的某一个属性
7.自己对自己外连接可以求一个表某一属性的最大值和最小值的元组
8.using() 要括号, 给表起别名只能给基础表, 不能给join过的表起, 多个表join注意重叠表要起别名
9.经常注意distinct的使用, 比如要不同值的时候, count的时候
10.效率方面, 不考虑索引, 那么独立子查询一般比相关子查询效率高, 因为后者往往存在循环. join也需要循环, 是代价比较大的操作
11. 使用in或not in的时候如果子查询结果中包含null 那么条件判断为否. 此原因可能导致查询不到合适结果.
网友评论