sql之浅谈视图的作用

【数据库】☆★sql之浅谈视图的作用

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

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

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

如何创建视图?

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

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

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

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

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

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

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

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;

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

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,到了这里?我们再看运行结果?

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

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

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

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);

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

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

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

ok,有问题请举手?

sql之浅谈视图的作用

时间: 2024-10-20 16:20:15

sql之浅谈视图的作用的相关文章

ChannelOption.TCP_NODELAY, true->浅谈tcp_nodelay的作用

在TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认.为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据.这里就涉及到一个名为Nagle的算法,该算法的目的就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块. TCP_NODELAY就是用于启用或关于Nagle算法.如果要求高实时性,有数据发送时就马上发送,就将该选项设置为true关闭Nagle算法:如果要减少发送次数减少网络交互,就设置为false等累积一定大小后

浅谈MyBatis3连接池

1.在spring中注入MyBatis自带连接池的时候,仅仅只是设置上了一些数据库连接的必要数据,比如driver.url.username.password等,并不会去连接数据库 2.Mybatis连接池的状态都是由PoolState这个类来维护的,最重要的就是两个list:idleConnections.activeConnections,分别用来保存空闲连接和活动连接,这个PoolState对象在使用过程中需要同步 3.PooledConnection也就是连接池里维护的连接对象,这个类里

浅谈Trigger(SimpleTrigger&CronTrigger)

 1.Trigger是什么 Quartz中的触发器用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行job的.  2.Quartz中的Trigger  3.触发器通用属性: JobKey:表示job实例的标识,触发器被触发时,该指定的job实例会执行 StartTime:表示触发器的时间表 首次被触发的时间,值类型是Java.util.Date EndTime:指定触发器的不再触发的时间,它的值类型是Java.util.Date 例如:通过Trigger设置开始时间,结束时间以

浅谈sql优化

问题的发现:      菜鸟D在工作的时候发现项目的sql语句很怪,例如 : select a.L_ZTBH, a.D_RQ, a.VC_BKDM, (select t.vc_name from tbkxx t where t.vc_code = a.vc_bkdm) vc_name, a.VC_BZ, a.L_SCLB, a.EN_ZS, a."ROWID", s."ROWID",--冗余列 decode(nvl(a.l_cjsl, 0), 0, 0, round

数据库管理及优化浅谈(MS SQL Server)

数据库管理 说起数据库管理——————首先要说的就是数据库设计,一个好的数据库设计理念能避免很多数据库引起的麻烦和后期维护的成本 1.首先要考虑的就是数据库权限和安全,首先有条件优先考虑的是将数据库部署在数据库集群,当然数据量不大冲从成本上考虑可以是不建议使用的 权限这个主要是登陆用户权限和架构合理搭配,最好一个架构对应一个用户名,方便后期规范和维护 2.说完数据库的权限下面当然是主要存储数据,数据怎么存,应该怎么规范,索引如何建立,后期数据量超大,该怎么分区,相信这些都是很多小伙伴心中的难题

浅谈SQL Server 对于内存的管理

简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) 对于计算机来说,存储体系是分层级的.离CPU越近的地方速度愉快,但容量越小(如图1所示).比如:传统的计算机存储体系结构离CPU由近到远依次是:CPU内的寄存器,一级缓存,二级缓存,内存,硬盘.但同时离CPU越远的存储系统都会比之前的存储系统大一个数量级.比如硬盘通常要比同时代的内存大一个数量级.

浅谈SQL Server中的事务日志(四)----在完整恢复模式下日志的角色

浅谈SQL Server中的事务日志(四)----在完整恢复模式下日志的角色 本篇文章是系列文章中的第四篇,也是最后一篇,本篇文章需要前三篇的文章知识作为基础,前三篇的文章地址如下: 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色 简介 生产环境下的数据是如果可以写在资产负债表上的话,我想这个资产所占的数额一定不会

浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色

浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色 本篇文章是系列文章中的第三篇,前两篇的地址如下: 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色 简介 在简单恢复模式下,日志文件的作用仅仅是保证了SQL Server事务的ACID属性.并不承担具体的恢复数据的角色.正如”简单”这个词的字面意思一样,数据的备份和恢复仅仅是依赖于手动备份和恢复.在开始文章之前,首先

sql中视图视图的作用

视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成.对其中所引用的基础表来说,视图的作用类似于筛选.定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原