sql之浅谈视图的作用
2017-01-03 20:47
316 查看
原文:http://www.2cto.com/database/201408/326895.html
笔记:
视图是一张虚拟表,可以看作编译好的复杂查询语言,可以直接将视图当作一个临时表,在视图的基础上查找,但不能在视图上删除和添加。
视图可以事先编译复杂查询语言,对于复杂业务,可以简化调用者的逻辑
sql之浅谈视图的作用
2014-08-19 4 个评论
来源:诺言永远依恋小柴、、、
收藏
我要投稿
【数据库】☆★sql之浅谈视图的作用
在一个项目的实际开发过程中牵涉到复杂业务的时候,我们不可避免的需要使用中间表来进行数据连接,有的同学就说了,我可以采用Hibernate进行主外键进行关联啊?多对多,多对一,一对一,等,采用主外键关联在数据的操作过程中具有很强的耦合性,尤其对于需要经常删改数据表而言,我们是不建议采用主外键关联这种模式,那么,如果我们采用中间表的话,当数据过大在性能上又面临严峻考验,sql视图的出现,在解决中间表的业务逻辑上是不错的选择。ok,首先我们了解什么是视图?
1、视图是表?没错,但是是一张虚拟表,视图的字段是由我们自定义的,视图只供查询,数据不可更改,查询数据来源于我们建立的实体表。
2、使用视图的优势?视图可以将多个复杂关联表,提取出我们需要的信息,优化查询速度。
如何创建视图?
我们先建立三张表;如下:
这个是典型的一对多和一对一的关系,那么,假如每张表的数据都在一万条数据以上,现在查询在潢高上学的学生姓名?
首先,我们分析一下,在潢高上学?首先是一个高中,那么我们会有一条Sql where school='潢高',
查询出一个List,得到gradeids,然后再到grade中根据gradeids查询这么多grades对应的studentids,在使用这些studentsid查询出students循环最后得到name?
是不是很累赘?查询是不是很影响性能?
观察得知,这三张表每两张表之间都是通过id进行关联的,如果我们通过id将三张表组成一张表,是不是很方便?
我们来关联学校表和年级表:这个年级ID我们不要,ok?
?
那么我们再关联上学生表,学生表的id等于年级表的studentid ok?
?
ok,到了这里?我们再看运行结果?
那么我们想查询在潢高上学的学生姓名,where schoolName='潢高',获取的list循环得到Object,通过Object.getStudentName,就可以了?
所以需要将查询到的结果,建立为一张虚拟表,这样才能操作,通过这个create view 视图名 as 命令建立:
意思就是将查询结果创建为名称为table_sgt的一张虚拟表:
?
我们在使用视图的时候,需要把它看做为一张表,建立一张实体表需要做的步骤,视图也都需要(例如,实例化,配置映射文件,对象的属性get,set方法)
注意视图所查询出来的数据只能进行查看,不能增删改!
例子数据库为Mysql5.5,工具Navicat for MySQL
ok,有问题请举手?
笔记:
视图是一张虚拟表,可以看作编译好的复杂查询语言,可以直接将视图当作一个临时表,在视图的基础上查找,但不能在视图上删除和添加。
视图可以事先编译复杂查询语言,对于复杂业务,可以简化调用者的逻辑
sql之浅谈视图的作用
2014-08-19 4 个评论
来源:诺言永远依恋小柴、、、
收藏
我要投稿
【数据库】☆★sql之浅谈视图的作用
在一个项目的实际开发过程中牵涉到复杂业务的时候,我们不可避免的需要使用中间表来进行数据连接,有的同学就说了,我可以采用Hibernate进行主外键进行关联啊?多对多,多对一,一对一,等,采用主外键关联在数据的操作过程中具有很强的耦合性,尤其对于需要经常删改数据表而言,我们是不建议采用主外键关联这种模式,那么,如果我们采用中间表的话,当数据过大在性能上又面临严峻考验,sql视图的出现,在解决中间表的业务逻辑上是不错的选择。ok,首先我们了解什么是视图?
1、视图是表?没错,但是是一张虚拟表,视图的字段是由我们自定义的,视图只供查询,数据不可更改,查询数据来源于我们建立的实体表。
2、使用视图的优势?视图可以将多个复杂关联表,提取出我们需要的信息,优化查询速度。
如何创建视图?
我们先建立三张表;如下:
这个是典型的一对多和一对一的关系,那么,假如每张表的数据都在一万条数据以上,现在查询在潢高上学的学生姓名?
首先,我们分析一下,在潢高上学?首先是一个高中,那么我们会有一条Sql where school='潢高',
查询出一个List,得到gradeids,然后再到grade中根据gradeids查询这么多grades对应的studentids,在使用这些studentsid查询出students循环最后得到name?
是不是很累赘?查询是不是很影响性能?
观察得知,这三张表每两张表之间都是通过id进行关联的,如果我们通过id将三张表组成一张表,是不是很方便?
我们来关联学校表和年级表:这个年级ID我们不要,ok?
?
那么我们再关联上学生表,学生表的id等于年级表的studentid ok?
?
那么我们想查询在潢高上学的学生姓名,where schoolName='潢高',获取的list循环得到Object,通过Object.getStudentName,就可以了?
所以需要将查询到的结果,建立为一张虚拟表,这样才能操作,通过这个create view 视图名 as 命令建立:
意思就是将查询结果创建为名称为table_sgt的一张虚拟表:
?
我们在使用视图的时候,需要把它看做为一张表,建立一张实体表需要做的步骤,视图也都需要(例如,实例化,配置映射文件,对象的属性get,set方法)
注意视图所查询出来的数据只能进行查看,不能增删改!
例子数据库为Mysql5.5,工具Navicat for MySQL
ok,有问题请举手?
相关文章推荐
- sql之浅谈视图的作用
- sql之浅谈视图的作用
- sql之浅谈视图的作用
- sql之浅谈视图的作用
- sql 浅谈视图的作用
- sql之浅谈视图的作用
- oracle 视图作用(sql查询语句)
- 数据库索引 ,sql视图的作用(2012-05-29 11:42:17)
- 数据库视图的作用---[Microsoft Sql Server 2005]
- SQL——视图作用
- sql 视图的作用(转http://www.cup.edu.cn/nic/Programing/database/34943.htm)
- sql中视图的作用
- sql中视图视图的作用
- 浅谈SQL中的where 1=1和where 1<>1的作用
- sql中视图的作用
- 谁能解释一下v$sqlarea,v$sql,v$sqltext这个3个视图的作用与区别?
- SQL中视图的作用
- sql中视图的作用
- sql中视图的作用
- 浅谈 接口(Interface)的作用