作業(yè)中積累的知識點:
關(guān)系代數(shù)部分:
1.sigma 和 pi 執(zhí)行的先后實際上是可能存在影響的.
2.theta join沒有結(jié)合律 但是natural join有.
3.自我natural join 就是自己
4.關(guān)系代數(shù)比sql好在有除法 還有集合操作比較簡單 交并差都可以使用
5.count等聚集函數(shù)沒有distinct關(guān)鍵字, 如果需要去重, 使用pi投影預(yù)處理關(guān)系.
sql部分:
1.primary key會建立主鍵索引, 同時還可以建立外鍵關(guān)系, unique not? null則不能
2.order by 每個屬性默認asc
3.select默認是包含重復(fù)的, 而關(guān)系代數(shù)中投影是默認去重的.
4.除了count(*)其他的所有聚集操作都不會統(tǒng)計null
5.natural join 可以不要on 但是其余join沒有on 或 using就報錯
6.即使natural join了你也可以訪問被省略掉的另一個表的某一個屬性
7.自己對自己外連接可以求一個表某一屬性的最大值和最小值的元組
8.using() 要括號, 給表起別名只能給基礎(chǔ)表, 不能給join過的表起, 多個表join注意重疊表要起別名
9.經(jīng)常注意distinct的使用, 比如要不同值的時候, count的時候
10.效率方面, 不考慮索引, 那么獨立子查詢一般比相關(guān)子查詢效率高, 因為后者往往存在循環(huán). join也需要循環(huán), 是代價比較大的操作
11. 使用in或not in的時候如果子查詢結(jié)果中包含null 那么條件判斷為否. 此原因可能導(dǎo)致查詢不到合適結(jié)果.