数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段,用户的应用程序不会受影响。在关系数据库中,重构数据库最常见的是将一个基本表“垂直”地分成多个基本表。例如:将学生关系Student(Sno,Sname,Ssex,Sage,Sdept), 分为SX(Sno,Sname,Sage)和SY(Sno,Ssex,Sdept)两个关系。这时原表Student为SX表和SY表自然连接的结果。如果建立一个视图Student:CREATE VIEW Student(Sno,Sname,Ssex,Sage,Sdept)ASSELECT SX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.SdeptFROM SX,SYWHERE SX.Sno=SY.Sno;这样尽管数据库的逻辑结构改变了(变为SX和SY两个表了),但应用程序不必修改,因为新建立的视图定义为用户原来的关系,使用户的外模式保持不变,用户的应用程序通过视图仍然能够查找数据。

注意
COUNT(*)中的*可以用其他的列名代替。如果用主属性替换*,那么最后统计出来的数是一样的;但如果用非主属性替换*,统计出来的值可能会不一样,因为非主属性的值可能存在为空的情况,那么这个元组就不会被统计到总数中了。 此处的as可以省略。 当使用统计函数统计时,返回统计函数的值没有列,在实际应用过程中,后期可能会遗忘这个返回值的含义,所以为了方便使用,一般会给统计函数的返回值起一个列名。
注意
GROUP BY 按哪一列分组的列名 Having 分组条件; where语句的执行优先级是高于having的,因为having是在分组的基础上再进行限制的条件,也就是说where是在分组之前的筛选条件,having是在分组之后的查询条件。 在select后面跟随的列,除了使用聚集函数的列之外,其他的列都要写在分组条件中,也就是group by 后面,将作为分组依据的列放在第一个,其余列放在后面。