数据库原理与应用(10)第10章 SQL高级应用
第10章 SQL高级应用
10.1.1 数据汇总查询
生成简单汇总报表的应用程序:
– CUBE或ROLLUP运算符。
– COMPUTE或COMPUTE BY运算符
1.聚合函数 聚合函数用来完成一定的统计功能。 •聚合函数仅在下列项中允许作为表达式使用: • SELECT语句的选择列表(子查询或外部查询)。 • COMPUTE或COMPUTE BY子句; • HAVING子句。
group by student.class,ame
with cube
使用rollup汇总
CUBE 和 ROLLUP 之间的区别: 1、CUBE 生成的结果集显示了所选列中值的所 有组合的聚合。 2、ROLLUP 生成的结果集显示了所选列中值的 某一层次结构的聚合。
使用rollup汇总
select student.class as '班号', ame as '课程', avg(score.degree) as '平均分'
from student,course,score
where student.sno=score.sno and o=o
else
begin rollback transaction
print '选修操作系统的人数已满,张三同学不能选修此课程!'
end
4.在事务内设置保存点 保存点定义如果有条件地取消事务的一部分,事务 可以返回的位置。 •语法格式为: SAVE TRAN[SACTION] {savepoint_name |
• 一致性(Consistency)——事务在完成时,必
须使所有的数据都保持一致状态。
•隔离性(Isolation)——由并发事务所作的修
第10章sql高级应用
第10章SQL高级应用CHAPTER 10练习题10参考答案1.数据检索时使用COMPUTE和COMPUTE BY产生的结果有何不同答使用COMPUTE子句和COMPUTE BY子句都能既浏览明细数据,又看到统计的结果。
只使用COMPUTE子句时,其查询的结果类似于总计;而使用COMPUTE BY子句时,其查询的结果将为带具体内容的分类进行统计。
2.进行连接查询时应注意什么答连接查询是指以指定表中的某个列或某些列作为连接条件,从两个或更多的表中查询关联数据的查询。
进行连接查询时应注意以下几点:一般而言,基于主键和外键指定查询条件,连接条件可使用“主键=外键”。
如果一个表有复合关键字,在连接表时,必须引用整个关键字。
应尽可能限制连接语句中表的数目,连接的表越多,查询处理的时间越长。
对于连接表的两个列应有相同或类似的数据类型。
不要使用空值作为连接条件,因为空值计算不会和其他任何值相等。
3.什么是交叉连接答交叉连接是两个表的笛卡尔积,即两个表的记录进行交叉组合。
4.内连接、外连接有什么区别答内连接是从结果中删除与其他被连接表中没有匹配行的所有行,因此内连接可能会丢失信息。
外连接会把内连接中删除原表中的一些行保留下来,保留哪些行由外连接的类型决定。
5.外连接分为左外连接、右外连接和全外连接,它们有什么区别答左外连接从结果中保留第一个表的所有行,但只包含第二个表中与第一个表匹配的行,第二个表相应的空行被放入NULL值。
右外连接从结果中保留第二个表的所有行,但只包含第一个表中与第二个表匹配的行,第一个表相应的空行被放入NULL值。
全外连接会把两个表所有行都显示在结果中,并尽可能多地匹配数据和连接条件。
6.什么是事务事务的特点是什么答事务是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元。
事务中任何一个语句执行时出错,系统都会返回到事务开始前的状态。
事务是并发控制的基本单元,是数据库维护数据一致性的单位。
第10章 数据完整性-数据库原理与应用教程(Oracle 12c版)-赵明渊-清华大学出版社
例如,对于stsys数据库中student表,sno列作为主键,每一个学 生的sno列能唯一地标识该学生对应的行记录信息,通过sno列建立 主键约束实现student表的实体完整性。
3.参照完整性
参照完整性保证主表中的数据与从表中数据的一致性,又称为 引用完整性,参照完整性确保键值在所有表中一致,通过定义主键 (PRIMARY KEY)与外键(FOREIGN KEY)之间的对应关系实现参照 完整性。
Oracle使用完整性约束机制以防止无效的数据进入数据库的基 表,如果一个DML语句执行结果破坏完整性约束,就会回滚语句并 返回一个错误。通过完整性约束实现数据完整性规则有以下优点:
●完整性规则定义在表上,存储在数据字典中,应用程序的任何 数据都必须遵守表的完整性约束。
●当定义或修改完整性约束时,不需要额外编程。
主键(PRIMARY KEY):表中能唯一标识每个数据行的一个或 多个列。
外键(FOREIGN KEY):一个表中的一个或多个列的组合是另 一个表的主键。
数据库原理与应用教程
(Oracle 12c 版)
4
10.1 数据完整性概述
例如,将student表作为主表,表中的sno列作为主键,score表作为 从表,表中的sno列作为外键,从而建立主表与从表之间的联系实现参 照完整性,student表和score表的对应关系如表10.1、和表10.2所示。
● CHECK约束,检查约束,现域完整性。
● NOT NULL约束,非空约束,实现域完整性。
● PRIMARY KEY约束,主键约束,实现实体完整性。
● UNIQUE KEY约束,唯一性约束,实现实体完整性。
● FOREIGN KEY约束,外键约束,实现参照完整性。
sql数据库原理与应用
sql数据库原理与应用SQL database, or structured query language database, is a type of database that is used to store and manage data in a structured manner. It is a powerful tool that allows users to create, retrieve, update, and delete data from a database. SQL is widely used in both small and large organizations for managing their data. It is an essential tool for businesses to store and manipulate their data efficiently. SQL databases are known for their scalability, reliability, and performance, making them an ideal choice for businesses of all sizes.SQL数据库,即结构化查询语言数据库,是一种用于以结构化方式存储和管理数据的数据库类型。
它是一种强大的工具,允许用户从数据库中创建、检索、更新和删除数据。
SQL在小型和大型组织中被广泛使用,用于管理其数据。
它是企业存储和高效操作数据的重要工具。
SQL数据库以其可扩展性、可靠性和性能而闻名,使其成为各种规模企业的理想选择。
One of the key characteristics of SQL databases is their ability to handle large amounts of data efficiently. With the use of indexing, querying, and optimization techniques, SQL databases can quicklyretrieve and manipulate data, even when dealing with massive datasets. This makes them suitable for businesses that need to process and analyze large volumes of data on a regular basis.SQL数据库的一个关键特点是其能够高效处理大量数据。
《数据库原理与应用》课程教学大纲
《数据库原理与应用》课程教学大纲一、课程基本信息(一)课程代码:(二)课程中文名称:数据库原理与应用(三)课程英文名称:Principle and Application of Database(四)课程性质:专业基础课程(五)适用专业:计算机科学与技术、软件工程、大数据与人工智能(六)开课单位:(七)教学时间安排:第 3学期(八)先修课程:计算机基础、高级语言程序设计(九)后续课程:网络程序开发、大数据技术原理及应用(十)学时、学分:32学时、2学分二、课程目标《数据库原理与应用》是计算机类各专业的必修课,是一门重要的专业基础课。
原理部分以数据库技术的实际应用为目标,重点讲述数据库的基础知识、基本原理和基本技术;应用部分以数据库应用开发为主,介绍数据库应用系统的设计方法、步骤和范例。
通过本课程学习,使学生在掌握数据库系统基本概念、原理的基础上,能熟练使用SQL语言在某一个具体的数据库管理系统上进行应用操作;掌握数据库原理、方法及步骤,具有数据库设计以及应用数据库管理系统的基本能力。
达成支撑专业学习成果相应的指标点。
课程目标对学生能力要求如下:课程目标1. 逐步掌握科学的学习方法,阅读并理解数据库相关教材、参考书和科技文献,不断地扩展知识面,增强独立思考的能力,更新知识结构。
课程目标2. 掌握关系代数语言的使用;能够熟练使用SQL语句进行数据操纵和数据定义。
课程目标3. 了解关系模型的基本概念;掌握关系数据库规范化理论,能够利用分解算法将关系模式进行合理的分解;掌握数据库设计方法和数据库系统维护的相关概念和应用。
课程目标4. 能够在MySQL平台环境和开发工具下使用SQL语句进行数据操纵和数据定义。
课程目标5. 具备良好的沟通、表达和团队协作能力。
三、教学内容与课程目标的关系第1章数据库系统的基本原理1.章节学时:1学时2.教学内容:(1)数据库系统概述(数据库系统概念;数据管理技术的产生和发展;数据库系统组成)。
数据库原理与应用教程NO10
2.3 )全局变量 全局变量全局变量由SQL Server系统提供 并赋值的变量,名字由@@符号开始。用户不 能建立全局变量,也不可能使用SET语句去修 改全局变量的值。通常应该将全局变量的值赋 给在同一个批中的局部变量,以便保存和处理。 全局变量分为两类: 与连接有关的全局变量,如:@@rowcount 影响的行数; 与 系 统 内 部 信 息 有 关 的 全 局 变 量 。 如 @@version SQL的版本号。 全局变量不可由用户定义、赋值
(6). 双字节字符串数据类型,unicode字符类型(N代表 国际语言National Language)一个字符/汉字占两个字节 定长字符串(nchar):,空间不足截断尾部,空间多余空 格填充; 变长字符串(nvarchar):空间不足截断尾部,多余空间不 填空格; 变长字符串(ntext):存储大小是所输入字符/汉字个数的 两倍(以字节为单位)。 (7). 二进制数据类型:存储Word文档、声音、图表、 图像(包括GIF、BMP文件)等数据。 在SQL Server中,除上述26种数据类型外,允许用户 在系统数据类型的基础上建立自己定义的数据类型。但值 得注意的是每个数据库中所有用户定义的数据类型名称必 须唯一。建立自己定义的数据类型则需要使用系统存储过 程sp_addtype来建立。
1.1) 数据类型
类型 名称 取值范围
整数
位型 货币型
bigint、 int、 smallint、 tinyint
Bit money、 smallmoney
(±922亿亿) 8 2^63 (±21亿) 4 2^31 (±32768) 2 2^15 (0-255) 1
由0和1表示真、假。 (±922万亿) (±21万),精确到万分之一。 ±1038-1,最大位数38位 (±1.79E+308) (±3.40E+38)
SQL高级应用
第10章 SQL 高级应用 10章
主讲人: 主讲人:朱晓丽
1、 聚 合 函 数 ( 1)
数据库的一个最大的特点: 数据库的一个最大的特点:将各种分散的数据按 照一定规律、条件进行分类组合,最后得出统计结果; 照一定规律、条件进行分类组合,最后得出统计结果; SQL Server 提供了聚合函数,用来完成一定的统 提供了聚合函数, 计功能; 计功能; 聚合函数对一组值执行计算并返回单一的值; 聚合函数对一组值执行计算并返回单一的值; 函数外, 除Count函数外,聚合函数忽略空值(Null) 函数外 聚合函数忽略空值( ) 聚合函数经常与 select 语句的 group by 子句一同 使用; 使用;
第10章 SQL 高级应用 10章
主讲人: 主讲人:朱晓丽
第10章 SQL 高级应用 10章
主讲人: 主讲人:朱晓丽
第10章 SQL 高级应用 10章
主讲人: 主讲人:朱晓丽
(2)比较 compute 和 group by
区别: 区别: – – group by 生成单个结果集: 生成单个结果集: compute 生成多个结果集; 生成多个结果集;
第10章 SQL 高级应用 10章
主讲人: 主讲人:朱晓丽
本人网站 欢迎访问
第10章 SQL 高级应用 10章
主讲人: 主讲人:朱晓丽
本 章 主 要 内 容
Transact-SQL 高级查询语句; - 高级查询语句; 事务处理; 事务处理; 游标; 游标; 数据锁定; 数据锁定; 分布式查询; 分布式查询;
子句中, 注:在 compute 或 compute by 子句中,不能包 数据类型; 含 ntext、text 或 image 数据类型; 、
《数据库原理》数据库技术与应用-文档资料
应用程序A1 应用程序A2 数据集S1 数据集S2
应用程序An
…
图1-1 数据的人工管理
数据集Sn
…
2019/3/15
2.文件系统阶段
20世纪50年代后期到20世纪60年代中期,出现了磁鼓、磁盘等直接存取数据的存 储设备。1954年出现了第一台商业数据处理的电子计算机UNIVACI,标志着计算机开 始应用于以加工数据为主的事务处理。人们得益于计算机惊人的处理速度和大容量的 存储能力,从而解脱了从大量传统纸张文件中寻找数据的困难,这种基于计算机的数 据处理系统也就从此迅速发展起来。 这种数据处理系统是把计算机中的数据组织成相互独立的数据文件,系统可以按 照文件的名称对其进行访问,对文件中的记录进行存取,并可以实现对文件的修改、 插入和删除,这就是文件系统。文件系统实现了记录内的结构化,即给出了记录内各 种数据间的关系。但是,文件从整体来看却是无结构的。其数据面向特定的应用程序, 因此数据共享性、独立性差,且冗余度大,管理和维护的代价也很大。
数据库技术
数据模型
关系数据库
数据库应用技术10
10.1.3 深入SQL-DMO 对象
例程10.3:在VB中用SQL-DMO对象建立到数据库Book的连接,并且在该数据库上建立一个视图,该视图返回与“北 京怡神工贸有限公司”签定的所有合同。代码如下: Dim objSQLSERVER As SQLDMO.SQLServer Set objSQLSERVER = New SQLDMO.SQLServer Dim objDB As SQLDMO.database Dim objView As SQLDMO.View On Error GoTo ErrorHandler objSQLSERVER.LoginTimeout = -1 objSQLSERVER.LoginSecure = False objSQLSERVER.AutoReConnect = False objSQLSERVER.Connect "red", "sa", "" Set objDB = objSQLSERVER.Databases("book") Set objView = New SQLDMO.View = "GetContract" objView.Text = "Create View GetContract AS" _ & " select companyname,contractid from company,contract" _ & " where panyid=panyid " _ & " and companyname='北京怡神工贸有限公司'" objDB.Views.Add objView MsgBox "创建成功!" objSQLSERVER.DisConnect Set objSQLSERVER = Nothing Set objDB = Nothing Set objView = Nothing Exit Sub ErrorHandler: MsgBox "错误: " & Err.Number & " " & Err.Description, vbOKOnly, "提示"
数据库原理与应用:基于SQL+Server+2005课后答案
CHAPTER 01第1章数据库系统概述练习题1参考答案1.文件系统中的文件与数据库系统中的文件有何本质上的不同?答文件系统中的文件是面向应用的,一个文件基本上对应于一个应用程序,文件之间不存在联系,数据冗余大,数据共享性差,数据独立性差;数据库系统中的文件不再面向特定的某个或多个应用,而是面向整个应用系统,文件之间是相互联系着的,减少了数据冗余,实现了数据共享,数据独立性高。
2.对数据库的3种不同数据观是如何划分的?答概念模式体现了数据库的总体观,称为DBA视图;内模式体现了数据库的存储观,称为系统程序员视图;外模式体现了数据库的用户观,称为用户视图。
用户视图有多个,而其他视图只有一个。
3.什么是数据独立性?数据库系统是如何实现数据独立性的?答数据独立性是指应用程序和数据之间相互独立、不受影响,即数据结构的修改不引起应用程序修改的特性。
数据独立性包括物理数据独立性和逻辑数据独立性。
物理数据独立性是指数据库物理结构改变时不必修改现有的应用程序。
逻辑数据独立性是指数据库逻辑结构改变时应用程序不用改变。
数据独立性是由DBMS的二级映象功能来保证的。
数据库系统通常采用外模式、模式和内模式三级结构,数据库管理系统在这三级模式之间提供了外模式/概念模式和概念模式/内模式两层映象,当整个系统要求改变模式时(增加记录类型,增加数据项)时,由DBMS 对各个外模式/概念模式的映象作相应改变,可以使外模式保持不变,由于应用程序是依据数据的外模式编写的,因而应用程序不必修改,保证了数据的逻辑独立性。
当数据的存储结构改变时,由DBMS对概念模式/内模式映象作相应改变,可以使模式不变,从而应用程序也不必改变,保证了数据的物理独立性。
第2章数据模型CHAPTER 02练习题2参考答案1.什么是关系?什么是关系框架?关系之间实现联系的手段是什么?什么是关系数据库?答关系是一张二维表,即元组的集合。
关系框架是一个关系的属性名表。
SQL-数据库原理与应用题库(按章节)
目录第一章数据库基础知识 (2)一单选题 (2)二判断题 (4)第二章SQL语言 (4)一单选题 (4)二判断题 (8)三综合题 (8)第四章视图与索引 (13)一单选题 (13)二判断题 (14)第七章数据库设计 (14)一单选题 (14)二判断题 (16)三综合题 (16)第十章数据库备份与恢复 (20)一单选题 (20)二判断题 (21)《数据库原理与应用III 》题库第一章数据库基础知识一单选题[试题分类]: [01]数据库基础知识/[0101]数据库基本概念1.( B )是按照一定的数据模型组织的、长期存储在计算机内,可为多个用户共享的数据的集合。
( A )数据库系统( B )数据库( C )关系数据库( D )数据库管理系统2.(B)是位于用户和操作系统之间的一层数据管理软件。
数据库在建立、使用和维护时由其统一管理、统一控制.A. DB B.DBMS C.DBS D3.数据库管理系统的工作不包括( A )A.为定义的数据库提供操作系统B.数据备份C.为已定义的数据库进行管理D.定义数据库4. 数据库系统的特点是____、数据独立、减少数据冗余、避免数据不一致和加强了数据保护。
A.数据共享B.数据存储C.数据应用D.数据保密5、数据库(DB )、DBMS 、DBS 三者之间的关系( B ) 。
( A )DB 包括DBMS 和DBS ( B )DBS 包括DB 和DBMS( C )DBMS 包括DB 和DBS ( D )DBS 与DB 和DBMS 无关6. 数据库是保存在计算机中的、有组织的、可共享的(B)A.文件的集合B.数据的集合C.命令的集合D.程序的集合7.支持数据库各种操作的软件系统叫(B )。
A.命令系统B.数据库管理系统C.数据库系统D.操作系统8.在数据库中存储的是( A )?A.数据B.数据模型C.数据以及数据之间的联系D.信息9._D____可以减少相同数据重复存储的现象。
(完整版)数据库原理与应用习题参考答案
第1章数据库概述1.与文件管理相比,数据库管理有哪些优点?答:(1)相互关联的数据集合;(2)较少的数据冗余;(3)程序与数据相互独立;(4)保证数据的安全可靠;(5)最大限度地保证数据的正确性;(6)数据可以共享并能保证数据的一致性。
2.比较文件管理和数据库管理数据的主要区别。
答:文件系统不能提供数据的独立性,也不能提供数据共享、安全性等功能,这些需要客户端编程实现。
而数据库管理系统可以很方便地提供这些功能。
3.在数据库管理方式中,应用程序是否需要关心数据的存储位置和结构?为什么?答:不需要。
因为这些都由数据库管理系统来维护。
4.在数据库系统中,数据库的作用是什么?答:数据库是存储数据的仓库,其作用是存储数据。
5.在数据库系统中,应用程序可以不通过数据库管理系统而直接访问数据库文件吗?答:不可以。
6.数据独立性指的是什么?它能带来哪些好处?答:数据独立性包括逻辑独立性和物理独立性两部分。
物理独立性是指当数据的存储结构发生变化时,不影响应用程序的特性;逻辑独立性是指当表达现实世界的信息内容发生变化时,不影响应用程序的特性。
这两个独立性使用户只需关心逻辑层即可,同时增强了应用程序的可维护性。
7.数据库系统由哪几部分组成,每一部分在数据库系统中的作用大致是什么?答:数据库系统一般包括3个主要部分:数据库、数据库管理系统和应用程序。
数据库是数据的汇集,它以一定的组织形式保存在存储介质上;数据库管理系统是管理数据库的系统软件,它可以实现数据库系统的各种功能;应用程序专指以数据库数据为基础的程序8.在文件服务器结构和客户/服务器结构中,对数据的处理有什么区别?答:在文件服务器结构中,数据的处理是在客户端完成的,而在客户/服务器结构中,对数据的处理是在服务器端完成的,服务器返回给客户端的是处理后的结果。
第2章数据模型与数据库系统结构1.解释数据模型的概念,为什么要将数据模型分成两个层次?答:数据模型实际上是模型化数据和信息的工具,在数据库中,数据模型要满足三个要求:第一,要能够比较真实地模拟现实世界;第二,要容易被人们理解;第三,要能够很方便地在计算机上实现。
(完整版)数据库原理和应用(第2版)习题参考答案解析
第1章数据概述一•选择题1 •下列关于数据库管理系统的说法,错误的是CA. 数据库管理系统与操作系统有关,操作系统的类型决定了能够运行的数据库管理系统的类型B. 数据库管理系统对数据库文件的访问必须经过操作系统实现才能实现C. 数据库应用程序可以不经过数据库管理系统而直接读取数据库文件D. 数据库管理系统对用户隐藏了数据库文件的存放位置和文件名2•下列关于用文件管理数据的说法,错误的是DA. 用文件管理数据,难以提供应用程序对数据的独立性B. 当存储数据的文件名发生变化时,必须修改访问数据文件的应用程序C. 用文件存储数据的方式难以实现数据访问的安全控制D. 将相关的数据存储在一个文件中,有利于用户对数据进行分类,因此也可以加快用户操作数据的效率3 •下列说法中,不属于数据库管理系统特征的是CA. 提供了应用程序和数据的独立性B. 所有的数据作为一个整体考虑,因此是相互关联的数据的集合C. 用户访问数据时,需要知道存储数据的文件的物理信息D. 能够保证数据库数据的可靠性,即使在存储数据的硬盘岀现故障时,也能防止数据丢失5 •在数据库系统中,数据库管理系统和操作系统之间的关系是DA. 相互调用B. 数据库管理系统调用操作系统C. 操作系统调用数据库管理系统D. 并发运行6.数据库系统的物理独立性是指DA. 不会因为数据的变化而影响应用程序B. 不会因为数据存储结构的变化而影响应用程序C. 不会因为数据存储策略的变化而影响数据的存储结构D. 不会因为数据逻辑结构的变化而影响应用程序7 •数据库管理系统是数据库系统的核心,它负责有效地组织、存储和管理数据,它位于用户和操作系统之间,属于AA. 系统软件B.工具软件C.应用软件D.数据软件8 •数据库系统是由若干部分组成的。
下列不属于数据库系统组成部分的是BA. 数据库B.操作系统C.应用程序D.数据库管理系统9 •下列关于客户/服务器结构和文件服务器结构的描述,错误的是DA. 客户/服务器结构将数据库存储在服务器端,文件服务器结构将数据存储在客户端B. 客户/服务器结构返回给客户端的是处理后的结果数据,文件服务器结构返回给客户端的是包含客户所需数据的文件C. 客户/服务器结构比文件服务器结构的网络开销小D. 客户/服务器结构可以提供数据共享功能,而用文件服务器结构存储的数据不能共享数据库是相互关联的数据的集合,它用综合的方法组织数据,具有较小的数据冗余,可供多个用户共享,具有较高的数据独立性,具有安全控制机制,能够保证数据的安全、可靠,允许并发地使用数据库,能有效、及时地处理数据,并能保证数据的一致性和完整性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【例10.5】 给出以下程序的执行结果。
USE school SELECT allocate.班号,allocate.课程号,teacher.姓名 FROM allocate JOIN teacher ON (allocate.教师编号=teacher.编号) ORDER BY allocate.班号
【例10.3】 给出以下程序的执行结果。
USE school SELECT student.班号,course.课程名,AVG(score.分数) AS '平均分' FROM student,course,score图10.3 程序执行结果 WHERE student.学号=score.学号 AND course.课程号=score.课程号 GROUP BY student.班号,course.课程名 WITH CUBE
COMPUTE BY子句可以用同一SELECT语句既查看明 细行,又查看汇总行。可以计算子组的汇总值,也可以计算 整个结果集的汇总值。COMPUTE 子句需要以下信息:
可选的BY关键字。该关键字可按对一列计算指定的 行聚合。 行聚合函数名称。例如,SUM、AVG、MIN、 MAX或COUNT。 要对其执行行聚合函数的列。
【例10.1】 给出以下程序的执行结果。
USE school SELECT 学号,课程号,分数 FROM score WHERE 学号 IN (103,105) ORDER BY 学号 COMPUTE SUM(分数)
解:该程序中SELECT语句使用简单COMPUTE子句生 成score表中分数列的求和总计。执行结果如下图所示。
(1)COMPUTE生成的结果集 COMPUTE所生成的汇总值在查询结果中显示为分离的结 果集。包括COMPUTE子句的查询的结果类似于控制中断报表, 即汇总值由指定的组来控制的报表。可以为各组生成汇总值, 也可以对同一组计算多个聚合函数。 当COMPUTE带有可选的BY子句时,符合SELECT条件的 每个组都有两个结果集:
第10章 SQL高级应用
10.1 SELECT高级查询
10.1.1 数据汇总 为决策支持系统生成聚合事务的汇总报表是一项复杂并 且相当消耗资源的工作。SQL Server 2005提供两个灵活且强 大的工具,即SQL Server 2005分析服务和报表服务。 但是对于生成简单汇总报表的应用程序,可使用以下运 算符: CUBE或ROLLUP运算符。均为GROUP BY子句 的一部分。 COMPUTE或COMPUTE BY运算符。均与 GROUP BY子句相关联。
在SQL Server 2005中,子查询还要受下面的条件限制: 通过比较运算符引入的子查询的选择列表只能包括一个 表达式或列名称(分别对SELECT *或列表进行EXISTS 和IN操作除外)。 如果外部查询的WHERE子句包括某个列名,则该子句 必须与子查询选择列表中的该列在连接上兼容。 子查询的选择列表中不允许出现ntext、text和image数据 类型。 由于不修改数据的比较运算符(指其后未接关键字IN、 ANY或ALL等)的引入,这类子查询必须返回单个值, 而且子查询中不能包括GROUP BY和HAVING子句。 包括GROUP BY的子查询不能使用DISTINCT关键字。 不能指定COMPUTE和INTO子句。
USE school
SELECT allocate.班号,allocate.课程号,teacher.姓名 FROM allocate INNER JOIN teacher ON (allocate.教师编号=teacher.编号) ORDER BY allocate.班号
2.外连接 仅当至少有一个同属于两表的行符合连接条件时,内连接 才返回行。内连接消除与另一个表中的任何行不匹配的行。而 外连接会返回FROM子句中提到的至少一个表或视图的所有行, 只要这些行符合任何WHERE或HAVING搜索条件。 将检索通过左外连接引用的左表的所有行,以及通过右外 连接引用的右表的所有行。全外连接中两个表的所有行都将返 回。 SQL Server 2005对在FROM子句中指定的外连接使用以下 关键字: LEFT OUTER JOIN或LEFT JOIN(左外连接) RIGHT OUTER JOIN或RIGHT JOIN(右外连接) FULL OUTER JOIN或FULL JOIN(全外连接)
(3)全外连接 若要通过在连接结果中包括不匹配的行保留不匹配信息, 可以使用全外连接。SQL Server 2005提供全外连接运算符 FULL OUTER JOIN,不管另一个表是否有匹配的值,此运算 符都包括两个表中的所有行。
【例10.8】 给出以下程序的执行结果。
USE school INSERT INTO allocate(班号,课程号) VALUES('1031','9-888') SELECT allocate.班号,allocate.课程号,teacher.姓名 FROM allocate FULL OUTER JOIN teacher ON (allocate.教师编号=teacher.编号) ORDER BY allocate.班号 DELETE allocate WHERE 班号='1031' AND 课程号='9-888'
【例10.2】 给出以下程序的执行结果。
USE school SELECT 学号,课程号,分数 FROM score WHERE 学号 IN (103,105) ORDER BY 学号 COMPUTE SUM(分数) BY 学号
解:该程序中的查询在COMPUTE子句中加入可选的BY 关键字,以生成每个组的小计。执行结果如下图所示。
10.1.2 复杂连接查询 通过连接,可以根据各个表之间的逻辑关系从两个或多个 表中检索数据。连接表示SQL Server 2005应如何使用一个表 中的数据来选择另一个表中的行。 可在FROM或WHERE子句中指定连接。连接条件与 WHERE和HAVING搜索条件组合,用于控制FROM子句引用 的基表中所选定的行。 在FROM子句中指定连接条件,有助于将这些连接条件与 WHERE子句中可能指定的其他搜索条件分开,指定连接时建 议使用这种方法。简单的子句连接语法如下: FROM 第一个表名 连接类型 第二个表名 [ON (连接条件)] 其中,连接类型有内连接、外连接或交叉连接。
(2)比较COMPUTE和GROUP BY的功能 COMPUTE和GROUP BY之间的区别汇总如下: GROUP BY生成单个结果集。每个组都有一个只包含分组 依据列和显示该组子聚合的聚合函数的行。选择列表只能 包含分组依据列和聚合函数。 COMPUTE生成多个结果集。一类结果集包含每个组的明 细行,其中包含选择列表中的表达式。另一类结果集包含 组的子聚合,或SELECT语句的总聚合。选择列表可包含 除分组依据列或聚合函数之外的其他表达式。聚合函数在 COMPUTE子句中指定,而不是在选择列表中。
(2)右外连接 右外连接简称为右连接,其结果中包括第二个命名表 (“右”表,出现在JOIN子句的最右边)中的所有行,不包括 左表中的不匹配行。
【例10.7】 给出以下程序的执行结果。
USE school INSERT INTO allocate(班号,课程号) VALUES('1031','9-888') SELECT allocate.班号,allocate.课程号,teacher.姓名 FROM allocate RIGHT JOIN teacher ON (allocate.教师编号=teacher.编号) ORDER BY allocate.班号 DELETE allocate WHERE 班号='1031' AND 课程号='9-888'
带ROLLUP参数会依据GROUP BY后面所列第一个字段 做汇总运算。 【例10.4】 给出以下程序的执行结果。图10.4 程序执行 结果
USE school SELECT student.班号,AVG(score.分数) AS '平均分' FROM student,course,score WHERE student.学号=score.学号 GROUP BY student.班号 WITH ROLLUP
(1)左外连接 左外连接简称为左连接,其结果包括第一个命名表(“左” 表,出现在JOIN子句的最左边)中的所有行,不包括右表中 的不匹配行。
【例10.6】 给出以下程序的执行结果。
USE school INSERT INTO allocate(班号,课程号) VALUES('1031','9-888') SELECT allocate.班号,allocate.课程号,teacher.姓名 FROM allocate LEFT JOIN teacher ON (allocate.教师编号=teacher.编号) ORDER BY allocate.班号 DELETE allocate WHERE 班号='1031' AND 课程号='9-888'
2.GROUP BY子句 GROUP BY子句的语法格式为:
[GROUP BY [ALL] 分组表达式 [,…n] [WITH {CUBE | ROLLUP }] ]
ALL。包含所有组和结果集,甚至包含那些任何行都不满 足WHERE子句指定的搜索条件的组和结果集。如果指定了 ALL,将对组中不满足搜索条件的汇总列返回空值。 CUBE。指定在结果集内,不仅包含由GROUP BY提供的 正常行,还包含汇总行。在结果集内返回每个可能的组和 子组组合的GROUP BY汇总行。GROUP BY汇总行在结果 中显示为NULL,但可用来表示所有值。 ROLLUP。指定在结果集内不仅包含由GROUP BY提供的 正常行,还包含汇总行。按层次结构顺序,从组内的最低 级别到最高级别汇总组。