简析SQL Server数据库用视图来拍卖复杂的数查询关系

发布时间:2018-11-15  栏目:sqlite  评论:0 Comments

SQL
Server数据库用视图来处理千头万绪的数量查询关系是本文我们着重要介绍的情节,该内容是如此想到的:在扶持教务系统那块的时,我举行的一个页面是对准单个先生及整个学院讲师的工作量查询,这个操作设计及了三单依照数据库被的表和一个异数据库中之一个名师信息表,如果因此寻常的SQL语句是异常难落实之,由于自刚刚开做的视频播放系统,数据库的表相对比较少,没有涉嫌到如此复杂的处理涉嫌,刚开感到格外不便。

图片 1

后来想到用视图可以解决多个说明底繁杂关系,但是另外一摆设表是不同数据库的,是否仍能够开展操作,经过测试之后,居然可以将不同数据库中之鲜布置表进行确立视图关系,从而视图就是一个虚拟的表,我们拿用查询的不同数据库中之表或者相同数据库被的阐发,放到一起,然后择得之字段,重新成立一个新的虚表,然后是视图就得看作一个新的申,进行操作。这样就吧咱提供了众好。

同一:子查询概念

起于where子句被之select语句被称为子查询,子查询返回一个汇聚,通过和归的汇比较来规定询问集合。

图片 2

视图是一个加表,是由一个要多单说明或视图倒出来的表明,其结构与数码常常起于对表的询问基础及之。

第二:子查询利用

2.1 in | not in
基本语法 :表达式 [not] in 子查询
诠释:表达式是分段查询中之素,表现为
表达式[不]涵盖于子查询返回的汇中,子查询返回的联谊[不]含表达式。

eg:列出李四 张三同学的一切信息

select * from student 
where Sname in("张三" "李四"`);

eg:列出学过001课程号的同班的真名及学号

select Sname,S# from student
where S# in(select S# from Sc where c#="001");

eg:列出既学过001如泣如诉课程 又学过002号课程 同学的学号

select S# from Sc
where C#="001" and S# in (select from Sc where C#="002");

eg:列出没学过李明先生提了课的拥有同学的姓名

select Sname from student 
where S# not in 
(select S# from SC,Course C,Teacher T ,Sc where Tname="李明" and T.T#=C.T# and C.C#=Sc.C#);

2.2 θ some | θ all
基本语法 :表达式 θ some 子查询/表达式 θ all 子查询
里头 θ是于运算符 :<、>、=、<=、>=、<>(不对等)
分解:表达式与子查询返回的集合中之各个一个因素满足定义的θ关系。

eg:找有工资最低的教育工作者姓名

select Tname from Teacher 
where salary <=(select salary from Teacher);

eg:找出001号课程成绩不是最高的拥有学员的学号

select S# from Sc 
where C#="001" and score <=some(select score from Sc where C#="001");

eg:找有装有课程都未沾边的学生姓名

select Sname from student 
where  60 >all(select score from Sc where student.S#=SC.S#)

此间用到互相关子查询 即
在子查询中之所以到表面变量student。这里用student.S#=SC.S#
管教查询也一个学生的全体课。

eg:找有980311声泪俱下同学成绩低的课程号

select C# from Sc 
where S#="980311" and score<= all(select score from Sc where  S#="980311" );

eg:找有张三成绩最低的学科号

select C# from Course,student
where Sname="张三" and student.S#=Sc.S# and score <= all(select score from Sc where student.S#=course.S#);

2.3 exists | not exists
着力语法: [not] exists 子查询

eg:检索选修了张三先生的科目的保有同学的姓名

select Sname from student 
where exists (select * from Sc ,Course C, Teacher T where T.T#=C.T# and C.C#=Sc.C# and  and Tname="张三" and student.S#=Sc.S#);

或者

select Sname from student S,Sc,Courese C,Teacher T
where T.T#=C.T# and Tname="张三" and S.S#=Sc.S# and C.C#=Sc.C#

eg:检索学过001声泪俱下教师教学的享有课程的享有学员的姓名
<=>对于同一叫作学童而言,不存在发生一门001号教师讲课的课,该生没学了。这样的学童的真名即便如果摸的。

select Sname from student 
where not exists (select * from Course where T#="001" and not exists (select * from Sc where Sc.C#=Course.C# and student.S#=Sc.S#));

eg: 列出无学了李明先生授课任何一样派系科目的学员姓名
<=>对于一个学生而言,不存在李明先生上课的一致家科目
,该同学学了。这样的学员的姓名即便一旦找的。

select Sname from student S
where not exists (select * from Teacher T,Course C where T.T#=C.T# and Tname="李明" and exists(select * from Sc where Sc.S#=S.S# and Sc.C#=C.C#));

或者

select Sname from student S
where not exists (select *from Teacher T,Course C,Sc where Sc.S#=S.S# and T.T#=C.T# and C.C#=Sc.C# and Tname="李明" );

eg:列出至少学过 3150705同学学过所有课程的 学生的学号
<=>对于一个学员而言,不设有一门3150705同校学了之学科,该同学没有法过。这样的生的学号就是要物色的。

select S# from student S
where not exists (select * from Sc Sc1 where S#="3050705" and not exists (select * from Sc  Sc2 where Sc2.C#=Sc1.C# and Sc2.S#=S.S#));

图片 3

视图的长

其三:结果算和聚集函数

前面我们select再举行结果投影是还是列名,其实selec后面还好有表达式,聚集函数。
知识点:
select 列名|表达式|聚集函数[,[select 列名|表达式|聚集函数],……]
from 表名1[,[表名2]……]
where 检索条件

3.1结果算
吁任意两员教师的薪饷差额。

select T1.Tname as TR1,T2.Tname as TR2, T1.salary-T2.salary as Ts
from Teacher T1,Teacher T2
where T1.salary>T2.salary;

求学生的出生日期,当前凡2017年

select S.S#,S.Sname,2017-S.Sage+1 as Tyear
from student;

3.2汇聚函数:下面介绍都是针对列做操作
求个数 count();
求平均 avg();
eg:求数据库课程的平均成绩

select avg(score)
from Course C,Sc
where C.C#=Sc.C# and Cname="数据库";sum();

求总和

eg:求教师工资总值。

select sum(salay)
from Teacher;

eg:求计算机系教师工资的总数。

select sum(salary)
from Teacher 
where  D# in (select D# from Dept where Dname="计算机" );

or

select sum(salary)
from Teacher
where exists (select * from Teacher T,Dept D where T.D#=D.D# and D.Dname="计算机");

求最大 max();
求最小 min();

1.视图得吃用户我们挑选一些特定的数额与要特定的天职,而那些未欲的还是无用的数据可不再视图中显。

季:分组查询和分组过滤

分组概念:SQL可以以搜到的元组按照有一样规格进行分类,具有同样标准值的元祖可以划分到均等组要平等集合中,同时处理多单组或者集合的汇运算。

  1. 分组查询
    基本语法:
    select 表达式| 聚集函数 |列名
    from 列名[,[列名]……]
    where 检索条件
    group by 分组条件

eg:求诸一个同室的平分成绩

select S#,avg(score)
from Sc
group by S#;

eg:求诸一样帮派课程的平分成绩

select C#,avg(score)
from Sc
group by C#;
  1. 分组过滤
    过滤概念:对聚集(或分组)进行标准化过滤,即满足条件的聚集(分组)留下,不满足的过滤掉。

主干语法:
select 表达式| 聚集函数 |列名
from 列名[,[列名]……]
where 检索条件
group by 分组条件 having [过滤条件]

eg:求无及格课程超过两派别的同学的学号
先根据学号将同学分组,然后以分组里了滤掉不满足的组

select S#
from Sc
where score<60
group by S# having (count(*)>2);

eg:求十个人之上未沾边的课号

select C#
from Sc
where score<60
group by C# having count(*)>10;

eg:求少宗科目以上无过关的同窗的学号及其平均成绩。
不当的写法:

select S#,avg(score)
from Sc
where score <60
group by S# having Count(*)>2;

这种写法求来之结果是:两山头课程以上无合格的同学的学号和未及格全部课的平分成绩。where子句是针对性元组过滤。having
子句针对分组后底组进行过滤。

然的写法。
先期找找有有点儿派系以上未合格课程的同窗的学号。然后以对学号进行分组,求来平均成绩。

select S#,avg(score)
from Sc
where S# in (select S# from Sc where score<60 group by S# having count(*)>60)
group by S#

2.视图大大的简化了针对性数据库的操作,可以经视图操作进行对表的操作。

3.视图可以让不同的用户为不同之法子来看不同或者同一的数据集,相当便宜

4.在好几情况下,由于表中数据量太死,因此于表明底统筹时以说明进行水平或垂直细分,但是表底组织转变对应用程序的出不好的震慑,而采取视图可以另行组织数量,从而使他模式保持无变换,原有的应用程序可以由此视图来重载数据。

5.视图提供了一个简便而有效的安全体制。

视图的瑕疵

要是该视图处理的数据量非常非常,那么就是被sql数据库带来了众压力,执行进度相对来说比较缓慢,不如存储过程,所以只要可以用存储过程实现之,优先用存储过程   

建视图根本创建方式:

1.据此sql server管理平台创建视图

2.之所以Transact-sql语句被之create view命令来创造视图

3.使用sql sever管理平台的视图模板来创造视图

创立视图的早晚要留心:

1.只会以时下数据库中开创视图,在视图中极度多只能引用1024条例,视图中记录数据先明了光出该基表中之记录数决定。

2.如果视图引用的基表或者视图被去除,该视图不能够更让采用,知道创建新的基表或者视图

3.万一视图中某个平等排是函数、数学表达式、常量或者来多单表中的列名相同,则必须也列定义名称。

4.无可知还视图上创造索引,不能够重新规则、默认、触发器中援视图

5.当通过视图查询数据时,sql
server要检查为确保讲话中干的具有数据库对象有,每个数据库对象在讲话的上下文中行之有效,而且数量修改报告句不能够背数据完整性规则。

6.视图的名必须遵标示符的条条框框,且对每个用户必须是唯一的,此外,该名不得与拖欠用户发生另外一样名称的表
这是确立之视图,其中TeacherInfo是从另外一个数据库被补充加进去的。

图片 4以下是经视图查询出来的数表   
“select * from
QueryWorkInfoByFaculty”

图片 5关于SQL
Server数据库用视图来处理复杂的数额查询关系的系文化就介绍及此处了,希望此次的介绍会对君抱有得!

乃或许感兴趣之章:

  • 囤过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)
  • SQL server
    视图(view)介绍
  • sql
    server判断数据库、表、列、视图是否在
  • SQL
    SERVER先判断视图是否有然后再次创视图的言语
  • Sql Server中之视图介绍
  • Sql
    Server中之网视图详细介绍
  • 分析SQL Server
    视图、数据库快照
  • 前述SQL Server中之视图

留下评论

网站地图xml地图