概述
学习目标
视图定义
-
视图(view)也是存储数据的一种方式
-
视图文件存储在views文件夹中(GUI)
-
从表中查询信息仅存在于内存中,断电则信息消失(没有存储文件),而视图(view)为物理文件,已存储
-
视图本质上不是一个表
-
对视图的操作与对基表的操作是对等的,改变视图数据即改变对应基表的数据内容(包括表的约束,操作视图时也要遵守)
使用视图的目的
- 不同人能访问不同列,如非老板的数据库维护人员不能看到工作评价这一列
- 视图:能保证在更新视图的同时,更新对应的基表数据
- 基于多表(类似多表连接)创建一个视图,简化查询
创建视图
修改视图
- 若上述视图名也存在,则表示覆盖该视图
- 别名和子查询的各列相对应
删除视图
- 不删除数据
复杂视图
- 创建视图时使用了组函数
创建复杂视图
- 当创建视图时,用到了组函数,但实际中不存在组函数那一列——》创建复杂视图时,一定要给虚拟列取别名
视图中使用DML的规定
- 了解
- 总结:复杂视图进行增删改很多情况下不允许
- 举例:若改了视图的平均工资【虚拟列】——》要修改原数据表中的相应列的值——》那么问题来了,要怎么改呢?
屏蔽DML操作(只读)
- 只读
TOP-N分析
- 榜单TOP问题的解决方案
错误示范
- 查询结果:
- 由上图知,rownumber列虽然是伪列,但默认也有数值也有排序
- rownumber列的数值与employee_id对应
- 最终的查询结果只是对ID小于109的人进行了排序
正确做法
- 查询结果(排序好的查询结果)作为新的表(也有rownumber)
TOPN查询
- 两层查询
分页查询
- 三层查询
- 查询结果(排序好的查询结果)作为新的表(也有rownumber),然后再放入新的表(为了转化伪列),对伪列转化来的真列限制范围,达到分页查询的目的
- 考虑到注意点(ROWNUM只使用<及<=),将伪列转化为真实的一列则可使用">'等符号
- 内表的伪列作为外表的真列
- 此外,注意起别名,避免最外层又给当作伪列了