数据库章节4.ppt
文本预览下载声明
4、嵌套查询 在一个查询语句中嵌套了另一个查询语句 无关子查询 相关子查询 联机视图 (1)无关子查询举例 父查询与子查询相互独立,子查询语句不依赖父查询中返回的任何记录,可以独立执行 查询没有选修课程的所有学生的学号和姓名 Select s#,snameFrom studentWhere s# NOT IN ( select distinct s# From sc) 子查询返回选修了课程的学生学号集合,它与外层的查询无依赖关系,可以单独执行 无关子查询一般与IN一起使用,用于返回一个值列表 (2)相关子查询举例 相关子查询的结果依赖于父查询的返回值 查询选修了课程的学生学号和姓名 Select s#, snameFrom studentWhere EXISTS (Select * From sc Where sc.s# = student.s#) 相关子查询不可单独执行,依赖于外层查询 EXISTS(子查询):当子查询返回结果非空时为真,否则为假 执行分析:对于student的每一行,根据该行的s#去sc中查找有无匹配记录 (3)联机视图 子查询出现在From子句中作为表使用 查询只选修了1门或2门课程的学生学号、姓名和课程数 Select s#, count_c#From (Select s# as s#, count(s#) as count_c# From sc Group by s#) SC2, studentWhere sc2.s# = student.s# and (count_c#=1 OR count_c#=2) 联机视图可以和其它表一样使用 学号+课程数 5、查询结果的连接 Union和Union All Minus Intersect (1)Union和Union All 查询课程平均成绩在90分以上或者年龄小于16的学生学号 (Select s# From student where age16)UNION(Select s# From (Select s#, AVG(score) From SC group by s# having avg(score)90) SC2) UNION操作自动去除重复记录 Union All操作不去除重复记录 (2)Minus操作:差 查询未选修课程的学生学号 (Select s# From Student)Minus(Select distinct s# From SC) (3)Intersect操作 返回两个查询结果的交集 查询课程平均成绩在90分以上并且年龄小于16的学生学号 (Select s# From student where age16)Intersect(Select s# From (Select s#, AVG(score) From SC group by s# having avg(score)90) SC2) 五、视图(View) 视图(View)给出了SQL数据库的外模式定义 外模式 概念模式 内模式 关系子模式 关系模式 存储模式 视图(View) 基本表 文件 SQL用户 ANSI/SPARC 关系数据库 SQL数据库 1、视图的概念 视图是从一个或几个基本表中导出的虚拟表,其数据没有实际存储,但可以和表一样操作 视图具有和表一样的逻辑结构定义 但视图没有相应的存储文件,而每个表都有相应的存储文件 2、视图的用途 逻辑数据独立性 简化了用户眼中的数据,使用户可以集中于所关心的数据上 同一数据库对不同用户提供不同的数据呈现方式 安全保护 S# Sname Age 001 S1 22 002 S2 21 S# C# score 001 C1 88 002 C2 99 Sno Name Cno score 视图定义 用户程序 视图 表 用户 3、视图的定义 Create View 视图名(列名1,列名2,…) AS 查询 [With Read Only] 查询是一个Select语句,指明视图定义在哪些基本表上,定义了什么内容的数据 列名表定义了视图的逻辑结构,与查询中返回的数据相对应 若加上With Read Only选项表示所定义的视图是只读视图 3、视图的定义 例1:定义计算机系的学生视图 Create View cs_view (sno, name, age)As Select s#,sname,age From student Where Dept=‘计算机系‘ Create View cs_
显示全部