sql之浅谈视图的作用

简介:

    在一个项目的实际开发过程中牵涉到复杂业务的时候,我们不可避免的需要使用中间表来进行数据连接,有的同学就说了,我可以采用Hibernate进行主外键进行关联啊?多对多,多对一,一对一,等,采用主外键关联在数据的操作过程中具有很强的耦合性,尤其对于需要经常删改数据表而言,我们是不建议采用主外键关联这种模式,那么,如果我们采用中间表的话,当数据过大在性能上又面临严峻考验,sql视图的出现,在解决中间表的业务逻辑上是不错的选择。ok,首先我们了解什么是视图?


    1、视图是表?没错,但是是一张虚拟表,视图的字段是由我们自定义的,视图只供查询,数据不可更改,查询数据来源于我们建立的实体表。


    2、使用视图的优势?视图可以将多个复杂关联表,提取出我们需要的信息,优化查询速度。


   如何创建视图?


我们先建立三张表;如下:


wKioL1Ptjj-gJ6DEAACEukazCYo267.jpgwKiom1PtjSejuuUnAACB0OJ87yg643.jpgwKioL1PtjkDT7Lq1AAB61axLMaw679.jpg



这个是典型的一对多和一对一的关系,那么,假如每张表的数据都在一万条数据以上,现在查询在潢高上学的学生姓名

首先,我们分析一下,在潢高上学?首先是一个高中,那么我们会有一条Sql where school='潢高',

查询出一个List,得到gradeids,然后再到grade中根据gradeids查询这么多grades对应的studentids,在使用这些studentsid查询出students循环最后得到name?


是不是很累赘?查询是不是很影响性能?


观察得知,这三张表每两张表之间都是通过id进行关联的,如果我们通过id将三张表组成一张表,是不是很方便?


我们来关联学校表和年级表:这个年级ID我们不要,ok?


1
select  s.id  as  schoolId,s.school  as  schoolName,s.gradeid  as  gradeid,g.grade  as  gradeName,g.studentid  as  studentid  from  school s,grade g   where  s.gradeid=g.id;


wKioL1PtkubC7NSTAAB2kqmCXfY098.jpg


那么我们再关联上学生表,学生表的id等于年级表的studentid ok?

1
2
SELECT  s.id  as  schoolId,s.school  as  schoolName,s.gradeid  as  gradeid,g.grade  as  gradeName,g.studentid  as  studentid ,t.` name as  studentName,t.age  as  studentAge
from  school s,grade g,student t  where  s.gradeid=g.id  and   g.studentid=t.id;


ok,到了这里?我们再看运行结果?


wKioL1Ptk-SAsUfIAAC4KIhRufE356.jpg


那么我们想查询在潢高上学的学生姓名,where schoolName='潢高',获取的list循环得到Object,通过Object.getStudentName,就可以了?


所以需要将查询到的结果,建立为一张虚拟表,这样才能操作,通过这个create view 视图名 as 命令建立:


意思就是将查询结果创建为名称为table_sgt的一张虚拟表:


1
create  view  table_sgt  as ( select  s.id  as  schoolId,s.school  as  schoolName,s.gradeid  as  gradeid,g.grade  as  gradeName,g.studentid  as  studentid ,t.` name as  studentName,t.age  as  studentAge  from  school s,grade g,student t  where  s.gradeid=g.id  and   g.studentid=t.id);


wKioL1PtlZuQiR_8AABou7EhE2g895.jpg



wKiom1PtlKyj-cb_AAEt4kosx98924.jpg


    我们在使用视图的时候,需要把它看做为一张表,建立一张实体表需要做的步骤,视图也都需要(例如,实例化,配置映射文件,对象的属性get,set方法)


    注意视图所查询出来的数据只能进行查看,不能增删改!


    例子数据库为Mysql5.5,工具Navicat for MySQL


    ok,有问题请举手?










本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1540417,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
SQL 数据库
SQL使用视图的优缺点
SQL使用视图的优缺点
57 0
|
6月前
|
SQL 存储 数据库
sql事务、视图和索引
sql事务、视图和索引
|
6月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之视图
【数据库SQL server】关系数据库标准语言SQL之视图
144 0
|
6月前
|
SQL 存储 关系型数据库
sql语句,索引,视图,存储过程
sql语句,索引,视图,存储过程
59 0
|
6月前
|
SQL 数据库 数据库管理
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
174 11
|
6月前
|
存储 SQL 缓存
4.2.1 SQL语句、索引、视图、存储过程
4.2.1 SQL语句、索引、视图、存储过程
|
29天前
|
SQL 存储 数据库
实验4:SQL视图操作与技巧
在SQL数据库管理中,视图(View)是一种虚拟表,它基于SQL查询的结果集创建,并不存储实际数据,而是存储查询定义
|
29天前
|
SQL 存储 数据库
实验4:SQL视图操作技巧与方法
在数据库管理系统中,视图(View)是一种虚拟表,它基于SQL查询的结果集创建,并不实际存储数据
|
30天前
|
存储 SQL 安全
|
30天前
|
SQL 数据库
SQL使用视图的优缺点
SQL使用视图的优缺点
20 0