第5章 数据库高级查询
SQL Server高级查询与T-SQL编程

第1章数据库设计数据库设计是建立数据库及其应用系统的技术,信息系统开发和建设中的核心技术数据库设计的主要工作●需求分析明确系统功能和实体抽象●E-R图进行概念结构设计,完成的E- R图●转换数据模型相符合的逻辑结构●使用PowerDesigner工具生成数据库模型1.1数据需求分析数据需求分析的方法数据需求分析是整个数据库设计的基础,需收集数据库|用户的信息内容和处理要求,并加以规范化和分析。
需求分析的任务是通过详细调查现实世界要处理的对象,了解原系统(手工系统或计算机系统)的工作概况,明确用户各种需求,然后在此基础上确定新系统的功能。
数据需求分析中常用的调查方法数据需求分析的重点是调查收集和分析用户在数据管理过程中的信息要求、处理要求、安全性和完整性要求等。
(1)跟班作业(2 )开调查会(3)请“专人”介绍(4)询问(5)设计调查表,请用户填写(6)查阅记录椭圆表示数据处理,动态连接线表示数据的流向,双杠线表示数据存储。
1.2概念结构设计和E-R模型概念结构设计和E R模型概念模型反映了信息系统所对应的现实事件中各部门、各务的信息结构、信息流动情况、信息间的互相制约关系以及各门或各业务对信息存储、查询和加工的要求等。
核心内容是概念模型的表示方法最常用:“实体关系”方法,简称E-R图ER图中需要在实体联系的两端添加关联的个数1.3逻辑结构设计逻辑结构设计数据库的逻辑结构设计就是将在概念结构设计阶段设计完成的E-R图,转换为与所选用的DBMS产品所支持的数据模型相符合的逻辑结构。
将E-R图转换为关系模型的实质是:将实体、实体的属性和实体之间的联系转化为关系模式。
其中实体和联系都可以表示成关系E-R图中的属性可以转换为关系的属性。
逻辑结构设计一对一联系还可以是与联系的任意一端实体所对应的关系模式合并,此时需要在该关系模式的属性中加入另一个实体的主键和联系本身的属性。
一般情况下,-对多联系不转换为一个独立的关系模式,而是与多端实体所对应的关系模式合并。
SQL Server数据库技术及应用教程(SQL Server 2016)第5章 数据库的创建与管理

• SQL Server 数据库具有以下三种类型的文件。
• (1)主数据文件
• 主数据文件是数据库的起点,指向数据库中的 其他文件。每个数据库都有一个主数据文件。 主数据文件的推荐文件扩展名是.mdf。例如, 某销售管理系统的主数据文件名为 Sales_data.mdf。
• (2)次要数据文件
在“常规”页中可以查看数据库的基本信息,包括:数 据库上次备份日期、名称、状态等。
在“文件”页和“文件组”页中可以修改数据库的所有 者。“文件”页如图5-14所示。 在“选项”页中,可以设置数据库的故障恢复模式和排 序规则。
“选项”页中的其他属性和“权限”页、“扩展属性”页、
“镜像”页等属性是数据库的高级属性,通常保持默认值 即可。如果要进行设置或定义可参考SQL Server 2016联机帮 助。
/*更改文件属性*/
|MODIFY NAME=新数据库名称
/*更改数据库名称*/
|MODIFY FILEGROUP 文件组名称{文件组属性|NAME=新文件组名称}
/*更改文件组属性,包括更改文件组名称*/
• ③ 显示“新建数据库”窗口,窗口左上方的“选择页” 框中有三个选项,分别对应“常规”页、“选项”页和 “文件组”页,这里只设置“常规”页,其他页使用系 统默认设置。
• 在“选择页”框中选择“常规”页,在窗口右侧将显示 相应的设置内容,在“数据库名称”框中填写要创建的 数据库名称“StudentMark”,也可以在“所有者”框 中指定数据库的所有者,如sa。这里使用默认值,其他 属性也按默认值设置,如图5-3所示。
• ② 单击“执行”按钮,然后在对象资源管理器中刷新, 展开“数据库”结点就能看到刚创建的Teacher数据库, 如图5-12所示。
MySQL数据库应用与管理 第5章 数据查询

2.简单查询
➢ (2)WHERE子句
使用BETWEEN AND进行范围比较查询
在WHERE子句中,可以使用BETWEEN AND关键字对指定字段的某一范 围内的数据进行比较查询,其与使用“>=”且“<=”的功能一样。其语法格 式如下:
字段名 [NOT] BETWEEN 值1 AND 值2
《MySQL数据库应用与管理》
2.简单查询
➢ (5)DISTINCT关键字
在对数据进行查询时,如果返回的查询结果中包含重复的记录,可 以使用DISTINCT关键字取消重复的数据,只返回其中的一条。其 语法格式如下:
SELECT DISTINCT 字段列表 FROM 表名;
《MySQL数据库应用与管理》
外连接
外连接显示包含来自一个表中所有行和来自另一个表中匹配行的结果集, 外连接主要又分为左外连接和右外连接。
《MySQL数据库应用与管理》
3.高级查询
➢ (1)多表查询
外连接
示例5-20:显示“网络131”班学生的学号、姓名、性别、班级、课程 ID和成绩。
《MySQL数据库应用与管理》
3.高级查询
《MySQL数据库应用与管理》
2.简单查询
➢ (2)WHERE子句
使用BETWEEN AND进行范围比较查询
示例5-9:使用BETWEEN AND关键字实现示例5-6的功能。 示例5-10:从score表中查询出成绩不在60-89分之间的学生的成绩信息。
《MySQL数据库应用与管理》
2.简单查询
《MySQL数据库应用与管理》
3.高级查询
➢ (1)多表查询
内连接
示例5-18:查询所有女生的学号、姓名、性别、课程ID和成绩。 示例5-19:查询学号(sNo)为“1308013101”学生的学号、姓名、性 别、班级、课程名称和成绩。
数据库系统原理课后答案 第五章

5.1 名词解释(1)SQL模式:SQL模式是表和授权的静态定义。
一个SQL模式定义为基本表的集合。
一个由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素(基本表、视图、索引等)的定义。
(2)SQL数据库:SQL(Structured Query Language),即‘结构式查询语言’,采用英语单词表示和结构式的语法规则。
一个SQL数据库是表的汇集,它用一个或多个SQL模式定义。
(3)基本表:在SQL中,把传统的关系模型中的关系模式称为基本表(Base Table)。
基本表是实际存储在数据库中的表,对应一个关系。
(4)存储文件:在SQL中,把传统的关系模型中的存储模式称为存储文件(Stored File)。
每个存储文件与外部存储器上一个物理文件对应。
(5)视图:在SQL中,把传统的关系模型中的子模式称为视图(View),视图是从若干基本表和(或)其他视图构造出来的表。
(6)行:在SQL中,把传统的关系模型中的元组称为行(row)。
(7)列:在SQL中,把传统的关系模型中的属性称为列(coloumn)。
(8)实表:基本表被称为“实表”,它是实际存放在数据库中的表。
(9)虚表:视图被称为“虚表”,创建一个视图时,只把视图的定义存储在数据词典中,而不存储视图所对应的数据。
(10)相关子查询:在嵌套查询中出现的符合以下特征的子查询:子查询中查询条件依赖于外层查询中的某个值,所以子查询的处理不只一次,要反复求值,以供外层查询使用。
(11)联接查询:查询时先对表进行笛卡尔积操作,然后再做等值联接、选择、投影等操作。
联接查询的效率比嵌套查询低。
(12)交互式SQL:在终端交互方式下使用的SQL语言称为交互式SQL。
(13)嵌入式SQL:嵌入在高级语言的程序中使用的SQL语言称为嵌入式SQL。
(14)共享变量:SQL和宿主语言的接口。
共享变量有宿主语言程序定义,再用SQL 的DECLARE语句说明, SQL语句就可引用这些变量传递数据库信息。
ch5 数据库系统概念(第6版)第五章高级SQL

SQL:1999 还支持大量的命令式结构,例如
存储过程
存储过程的优点:
使用存储过程可以减少网络流量 增强代码的重用性和共享性 使用存储过程可以加快系统运行速度 使用存储过程保证安全性
存储过程的创建
写SQL语句 测试SQL语句 如得到所需结果,则创建结果 执行过程
触发器
触发器
触发器 是一条语句,当对数据库做修改时,它自动被系 统执行. 要设置触发器机制,必须满足: 指明什么条件下触发器被执行. 指明触发器执行的动作是什么. SQL-92 标准并不包括触发器,但是许多DB系统支持触发 器。 触发器于SQL:1999被引进到SQL标准 , 但是更早就通过非 标准语法被大部分数据库所支持.
SQL允许用if-then-else语句,for和while循环,等等 ,来定义过程.
存储过程
可以在数据库中存储过程 然后通过call语句来执行 允许外部应用程序对数据库进行操作,而无需了解内 部细节
面向对象方面将在22章介绍 (基于对象的数据库)*
函数和过程
SQL:1999 支持函数和过程
过程结构*
注意: 大部分数据库系统对下列标准语法实现了自 己的变种 复合语句: begin … end, While 和 repeat 语句:
end while
repeat
set n = n + 1
大学计算机教程第六版 第5章数据库技术应用

3.连接运算(Join简记为JN)
连接是从关系R与S的笛卡尔积中,选取R的第i 个属性值和S的第j个属性值之间满足一定条件表达 式,构成关系子集。
关系R与T作θ连接。如表5.13和表5.14所示。
5.6.1 数据库设计理论的应用 数据库数据相关性称为数据依赖。数据依赖主
要分为内在关系的函数依赖(简记FD)和多值依赖 (简记MVD)。
把关系看成一个集合,集合运算如并、交、差、 笛卡尔积等运算,均可用到关系运算中。
设有三个关系实例R、S和T,如表5.6所示。
关系R和S的并是由属于R或S或同时属于R和S的 元组组成的集合,记为R∪S,如表5.7所示。
2. 差运算(Difference)
关系R和S的差是由属于R而不属于S的所有元组 组成的集合,记为R-S,如表5.8所示。
3. 交运算(Intersection)
关系R和S交是由同时属于R和S的元组组成的集 合,记为R∩S,如表5.9所示。
4. 笛卡尔积
关系R和S的笛卡尔积R×S的结果如表5.10所 示。
1.选择运算(Selection 简记为SL)
选择条件用F表示,在关系R中挑选满足条件F的 所有元组,组成一个新的关系,这个关系是关系R 的一个子集,记为:
设D1,D2,…Dn为n个集合,称D1×D2×…×Dn={(d1, d2, …dn)∈Di,(i=1,2, …n)}为集合D1,D2,…Dn 的笛卡尔积。
其中,Di(i=1,2,…n)可能有相同的,称它们为域, 域是值的集合。
笛卡尔积可表示为一个二维表。如果给出三个域:
D1={王欣,刘伟平} D2={张德君,李波} D3={网络技术应用,数据库原理} 则D1,D2,D3的笛卡尔积为D1×D2×D3={ (王欣,张德君,网络技术应用),(王欣,张德君,数据库原理), (王欣,李波,网络技术应用),(王欣,李波,数据库原理),(刘 伟平,张德君,网络技术应用),(刘伟平,张德君,数据库原理), (刘伟平,李波,网络技术应用),(刘伟平,李波,数据库原理)}
数据库系统教程课后答案(施伯乐)(第二版)

目录第1部分课程的教与学第2部分各章习题解答及自测题第1章数据库概论1.1 基本内容分析1.2 教材中习题1的解答1.3 自测题1.4 自测题答案第2章关系模型和关系运算理论2.1基本内容分析2.2 教材中习题2的解答2.3 自测题2.4 自测题答案第3章关系数据库语言SQL3.1基本内容分析3.2 教材中习题3的解答3.3 自测题3.4 自测题答案第4章关系数据库的规范化设计4.1基本内容分析4.2 教材中习题4的解答4.3 自测题4.4 自测题答案第5章数据库设计与ER模型5.1基本内容分析5.2 教材中习题5的解答5.3 自测题5.4 自测题答案第6章数据库的存储结构6.1基本内容分析6.2 教材中习题6的解答第7章系统实现技术7.1基本内容分析7.2 教材中习题7的解答7.3 自测题7.4 自测题答案第8章对象数据库系统8.1基本内容分析8.2 教材中习题8的解答8.3 自测题8.4 自测题答案第9章分布式数据库系统9.1基本内容分析9.2 教材中习题9的解答9.3 自测题9.4 自测题答案第10章中间件技术10.1基本内容分析10.2 教材中习题10的解答10.3 自测题及答案第11章数据库与WWW11.1基本内容分析11.2 教材中习题11的解答第12章 XML技术12.1基本内容分析12.2 教材中习题12的解答学习推荐书目1.国内出版的数据库教材(1)施伯乐,丁宝康,汪卫. 数据库系统教程(第2版). 北京:高等教育出版社,2003(2)丁宝康,董健全. 数据库实用教程(第2版). 北京:清华大学出版社,2003(3)施伯乐,丁宝康. 数据库技术. 北京:科学出版社,2002(4)王能斌. 数据库系统教程(上、下册). 北京:电子工业出版社,2002(5)闪四清. 数据库系统原理与应用教程. 北京:清华大学出版社,2001(6)萨师煊,王珊. 数据库系统概论(第3版). 北京:高等教育出版社,2000(7)庄成三,洪玫,杨秋辉. 数据库系统原理及其应用. 北京:电子工业出版社,20002.出版的国外数据库教材(中文版或影印版)(1)Silberschatz A,Korth H F,Sudarshan S. 数据库系统概念(第4版). 杨冬青,唐世渭等译. 北京:机械工业出版社,2003(2)Elmasri R A,Navathe S B. 数据库系统基础(第3版). 邵佩英,张坤龙等译. 北京:人民邮电出版社,2002(3)Lewis P M,Bernstein A,Kifer M. Databases and Transaction Processing:An Application-Oriented Approach, Addison-Wesley, 2002(影印版, 北京:高等教育出版社;中文版,施伯乐等译,即将由电子工业出版社出版)(4)Hoffer J A,Prescott M B,McFadden F R. Modern Database Management. 6th ed. Prentice Hall, 2002(中文版,施伯乐等译,即将由电子工业出版社出版)3.上机实习教材(1)廖疆星,张艳钗,肖金星. PowerBuilder 8.0 & SQL Server 2000数据库管理系统管理与实现. 北京:冶金工业出版社,2002(2)伍俊良. PowerBuilder课程设计与系统开发案例. 北京:清华大学出版社,20034.学习指导书(1)丁宝康,董健全,汪卫,曾宇昆. 数据库系统教程习题解答及上机指导. 北京:高等教育出版社,2003(2)丁宝康,张守志,严勇. 数据库技术学习指导书. 北京:科学出版社,2003(3)丁宝康,董健全,曾宇昆. 数据库实用教程习题解答. 北京:清华大学出版社,2003 (4)丁宝康. 数据库原理题典. 长春:吉林大学出版社,2002(5)丁宝康,陈坚,许建军,楼晓鸿. 数据库原理辅导与练习. 北京:经济科学出版社,2001第1部分课程的教与学1.课程性质与设置目的现在,数据库已是信息化社会中信息资源与开发利用的基础,因而数据库是计算机教育的一门重要课程,是高等院校计算机和信息类专业的一门专业基础课。
北大青鸟S2sql数据库设计和高级查询总结

第一章数据库的设计良好的数据库设计1、节省数据库的存储空间2、能够保证数据的完整性3、方便进行数据库应用系统的开发糟糕的数据库设计1、效率低下2、更新和检索数据时会出现许多问题设计数据库的步骤1、需求分析阶段分析客户的业务和数据处理需求⑴收集信息⑵标识对象(实体)⑶标识每个对象需要存储的详细信息⑷标识对象之间的关系2、概要设计阶段绘制数据库的E-R模型图(实体关系图)3、详细设计阶段将E-R图转换为多张表,进行逻辑设计,并应用数据库设计的三大规范进行设计4、代码编写阶段映射基数1一对一2一对多3多对一4多对多实体关系图矩形表示实体集椭圆形表示属性菱形表示关系集直线用来连接设计数据库问题1 信息重复2 更新异常3 插入异常(无法表示某些信息)4 删除异常(丢失有用的信息)数据库设计的三大规范理论一第一范式的目标是确保每列的原子性二第二范式的目标是确保表中的每列都和主键相关三第三范式的目标是确保每列都和主键直接相关,而不是间接相关(不能传递依赖)规范化和性能的关系在必要的情况下允许适当的数据冗余第二章数据库的实现一建库ues mastergoif exists (select * from sysdatabases where name ='数据库名字')drop database 数据库名--判断这个数据库名字是否存在,如果存在删除create database 数据库名on [primary](name='',filename='',size ='', 建立数据库的主文件如果需要建立次要文件(ndf) 用逗号隔开maxsize ='',filegrowth ='')log on(name ='',filename='',size ='', 建立日志文件如果建立多个日志文件在后面用逗号隔开maxsize ='',filegrowth ='')go -- 批处理二建表ues 数据库名字goif exists (select * from sysobjects where name ='表名')drop table 表名--判断是否有这个名字的表create table 表名(字段名数据类型列的特征如stuid int identity(1,1) not null --identity 表示是否为自动增长)go三加约束1 主键约束(primary key constraint) --constraint 约束alter table 表名add constraint 约束名(PK_***) primary key(约束的字段)2 唯一约束(unique constraint)alter table 表名add constraint 约束名(uq_***) unique(约束的字段)3 检查约束(check constraint)alter table 表名add constraint 约束名(ck_***) check(约束的条件)4 默认约束(default constraint)alter table 表名add constraint 约束名(df_***) default('默认值') for 约束的字段5 外建约束(foreign key constraint)alter table 表名add constraint 约束名(fk_***) foreign key(约束的字段) references 主表的表名(主表的字段)总结create database 建库create table 建表add constraint 加约束drop database 删库drop table 删表drop constraint 删约束use master select * from sysdatabases 判断是否有库名select * from sysobjects 判断是否有表名完整性1 实体完整性(保证数据是唯一的如主键\唯一键\标示列)2 引用完整性(保证两表数据一致如外键)3 域完整性(保证数据的准确性如检查约束\默认约束\非空)三层安全模型1 登陆帐号-- 决定登陆服务windows 身份验证exec sp_grantlogin 'windows域名\域帐户'sql 身份验证exec sp_addlogin '帐户名','密码'2 数据库用户--访问数据库use 数据库名goexec sp_grantdbaccess '登陆帐户',('数据库用户') 如果不写数据库用户默认为登陆帐号名3 权限--在数据库里的操作use 数据库名gogrant 权限(增,删,改,查,建表(create table)) on 表名to 用户名第三章T-SQL编成使用变量一局部变量declare @变量名类型赋值: 1、set @变量名= 值2、select @变量名=值二全局变量@@error 最后一个T-SQL错误的错误号@@identity 最后一次插入的标示值@@language 当前使用的语言的名称@@max_connections 可以创建的同时连接的最大数目@@rowcount 受上一个sql语句影响的行数@@servername 本地服务器的名称@@servicename 该计算机上的sql服务的名称@@timeticks 当前计算机上每刻度的微秒数@@transcount 当前连接打开的事物数@@version sql server 的版本信息输出语句1、print 局部变量或字符串2、select 局部变量as 自定义列名(查询语句的特殊应用)逻辑控制语句1、if(条件)begin -- 开头语句end --结束else --为可选begin -- 开头语句end --结束2、while (条件)语句[break]3、casewhen 条件1 then 结果1when 条件2 then 结果2[else 其他结果]end批处理语句以一条命令的方式来处理一组命令的过程称为批处理批处理的好处就是能够简化数据库的管理第四章高级查询一简单子查询select *** from 表1 where 字段1 >(子查询) 它等于一个等值内连接将子查询和比较运算符联合使用,必须保证子查询返回的值不能多与一个二in 和not in 子查询in 后面的子查询可以返回多条记录select *** from 表1 where 字段1 in(not in)(子查询)三exists not exists子查询if exists (子查询)语句如果子查询的结果非空,则exists(子查询) 将返回真(true) ,否则返回假(false)第五章事务、索引和试图一事务:是一个整体,要么都成功,要么都失败事务时作为单个逻辑工作单元执行的一系列操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
示例
UNION操作一般用在要从不同的表中查询语义相 同的列,并合并查询结果的情况。 设有作者表(authors)和出版商表( publishers),其中都有城市(city)列。 查询作者和出版商所在的全部城市。 SELECT city as 城市 FROM authors UNION SELECT city FROM publishers
数据库技术实践 (2008版)
何玉洁
第5章 高级查询
5.2 5.3 5.3 5.4 相关子查询 其他形式子查询 查询结果的并、交、差运算 其他一些查询功能
2/76
5.2 相关子查询
在条件子句中的相关子查询 在SELECT列表中的相关子查询 EXISTS形式的子查询
3/76
基本概念
一些说明
所有的SELECT语句列表中列的个数必须相 同,而且对应列的语义应该相同。 各SELECT语句中每个列的数据类型必须兼 容。 合并后的结果采用第一个SELECT语句的列 标题。 如果要对查询的结果进行排序,则ORDER BY子句写在最后一个查询语句之后。
24
示例
例1 将对计算机系学生的查询结果与信息 管理系学生的查询结果合并为一个结果集。 SELECT Sno,Sname,Sage,Sdept FROM Student WHERE Sdept = '计算机系系' UNION SELECT Sno,Sname,Sage,Sdept FROM Student WHERE Sdept = '信息管理系'
19/76
5.3 查询结果的并、交、差运算
SELECT语句的查询结果是元组的集合,所 以多个SELECT语句的结果可进行集合操作。 集合操作主要(交) MINUS(差)
20
5.3.1 并运算
并运算可将两个或多个查询语句的结果 集合并为一个结果集,这个运算可以使 用 UNION 运算符实现。 UNION是一个特殊的运算符,通过它可 以实现让两个或更多的查询产生单一的 结果集。
21
并操作示例
22
UNION语法格式
SELECT语句1 UNION [ ALL ] SELECT语句2 UNION [ ALL ] … … SELECT语句n
ALL表示在结果集中包含所有查询语句产生的全部 记录,包括重复的记录。如果没有指定ALL,则系 统默认是删除合并后结果集中的重复记录。
23
25
示例
例2 查询要求同例1,但将查询结果按年龄从小到 大的顺序进行排序,并将结果列名按中文显示
SELECT Sno 学号,Sname 姓名,Sage 年龄,Sdept 所在系
FROM Student WHERE Sdept = '计算机系' UNION SELECT Sno, Sname, Sage, Sdept FROM Student WHERE Sdept = '信息管理系' ORDER BY Sage ASC
18/76
示例
查询至少选了C001和C002两门课程的学生的姓名 、所在系、所选的课程号和课程名。 SELECT Sname,Dept,o,Cname FROM Student S JOIN SC ON S.Sno = SC.Sno JOIN Course C ON o = o WHERE S.Sno IN ( SELECT T1.Sno FROM (SELECT * FROM SC WHERE Cno = 'C001') AS T1 JOIN (SELECT * FROM SC WHERE Cno = 'c002') T2 ON T1.Sno=T2.Sno)
27
5.3.2 交运算
返回同时在两个集合中出现的记录。 其语法格式为: SELECT语句1 INTERSECT SELECT语句2 INTERSECT … … SELECT语句n
28
示例
例3 查询同时出现在t1表和t2表中的记 录。
SELECT * from t1 INTERSECT SELECT * from t2
8/76
HAVING 子句中的相关子查询
例21 查询有最高学分超过本学期平均学 分1.5倍的学期。 SELECT Semester FROM Course c1 GROUP BY Semester HAVING MAX(Credit) >= ALL ( SELECT 1.5 * AVG(Credit) FROM Course c2 WHERE c1.Semester = c2.Semester )
SELECT Sname, Dept FROM Student WHERE NOT EXISTS ( SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = 'C001' )
14/76
其他形式子查询:替代表达式的子查询
指在SELECT的选择列表中,嵌入一个只返 回一个标量值的SELECT语句,这个查询语 句通常都是一个聚合函数。 例30 查询选了C001课程的学生学号、考试 成绩以及该门课程的平均成绩。
16/76
示例
例31 查询选了C001课程的学生学号、考 试成绩、该门课程的平均成绩以及每个学 生与平均成绩的差。
SELECT Sno,Grade, (SELECT AVG(Grade) FROM SC WHERE Cno = 'C001') AS AvgGrade, Grade - (SELECT AVG(Grade) FROM SC WHERE Cno = 'C001') AS AvgGradeDiff
17/76
示例
例32 查询至少选了C001和C002两门课程 的学生学号。
SELECT T1.Sno FROM (SELECT * FROM SC WHERE Cno = 'C001') AS T1 JOIN (SELECT * FROM SC WHERE Cno = 'c002') AS T2 ON T1.Sno=T2.Sno
29
示例
例4 查询同时出现在t1、t2和t3表的记 录。
SELECT * from t1 INTERSECT SELECT * from t2 INTERSECT SELECT * from t3
30
示例
例5 查询李勇和刘晨所选的相同课程,列出课程名 和学分。(即同时被李勇和刘晨选的课程) SELECT Cname,Credit FROM Student S JOIN SC ON S.Sno = SC.Sno JOIN Course C ON o = o WHERE Sname = '李勇' INTERSECT SELECT Cname,Credit FROM Student S JOIN SC ON S.Sno = SC.Sno JOIN Course C ON o = o WHERE Sname = '刘晨'
SELECT Sno,Grade, (SELECT AVG(Grade) FROM SC WHERE Cno = 'C001') AS AvgGrade FROM SC WHERE Cno = 'C001'
15/76
其他形式子查询:派生表
有时也称为内联视图,是将子查询做为一 个表来处理,这个由子查询产生的新表 就称之为“派生表”,这很类似于临时 表。 可以在查询语句中用派生表来建立与其 它表的连接关系,在生成派生表后,在 查询语句中对派生表的操作与普通表一 样。
9/76
2 在SELECT列表中的相关子查询
子查询也可以用在SELECT语句的查询列 表中。 当所要查询的信息与查询中的其他信息 完全不同时,经常使用这种形式的子查 询。 比如,需要一个字段的聚合结果,但又 不希望这个结果影响其他的字段。
10/76
示例
例22 查询学生姓名、所在系和该学生选的 课程门数。
相关子查询与嵌套子查询的不同之处在于 信息传递是双方向的。 在相关子查询中,内层查询利用外层查询 提供的信息执行,然后将内层查询的结果 返回给外层查询,外层查询再利用这个结 果判断当前数据是否是满足要求的数据。
4/76
1 在条件子句中的相关子查询
相关子查询也可以写在WHERE子句中,或 者是HAVING子句中。它可以通过IN、比 较运算符和EXISTS关键词与外层查询关 联。
SELECT Sname,Dept, (SELECT COUNT(*) FROM SC WHERE Sno = Student.Sno ) AS CountCno FROM Student
11/76
示例
例23 查询课程名、开课学期及选该门课的学生 人数、平均成绩。不包括没人选的课程。 SELECT Cname 课程名,Semester 开课学期, ( SELECT COUNT(*) FROM SC WHERE Cno = o ) AS 选课人数, ( SELECT AVG(Grade) FROM SC WHERE Cno = o ) AS 平均成绩 FROM Course WHERE Cno IN ( SELECT Cno FROM SC )
6/76
示例
例19 查询每门课程考试成绩最高的两个学 生的学号以及相应的课程号和成绩。不包括 没考试的课程。 SELECT Sno,Cno,Grade FROM SC SC1 WHERE Sno IN ( SELECT TOP 2 WITH TIES Sno FROM SC SC2 WHERE o = o ORDER BY Grade desc ) AND Grade IS NOT NULL ORDER BY Cno ASC, Grade DESC
7/76