数据库原理第9讲_第1页
数据库原理第9讲_第2页
数据库原理第9讲_第3页
数据库原理第9讲_第4页
数据库原理第9讲_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四、使用集函数5类主要集函数计数COUNT([DISTINCT|ALL]*)COUNT([DISTINCT|ALL]<列名>)计算总和SUM([DISTINCT|ALL]<列名>) 计算平均值AVG([DISTINCT|ALL]<列名>).使用集函数(续)求最大值MAX([DISTINCT|ALL]<列名>)

求最小值MIN([DISTINCT|ALL]<列名>) DISTINCT短语:在计算时要取消指定列中的重复值ALL短语:不取消重复值ALL为缺省值.使用集函数(续)[例26]查询学生总人数。

SELECTCOUNT(*)FROMStudent;

[例27]查询选修了课程的学生人数。

SELECTCOUNT(DISTINCTSno)FROMSC;注:用DISTINCT以避免重复计算学生人数.使用集函数(续)[例28]计算1号课程的学生平均成绩。

SELECTAVG(Grade)FROMSCWHERECno='1';

[例29]查询选修1号课程的学生最高分数。

SELECTMAX(Grade)FROMSCWHERCno='1';.五、对查询结果分组使用GROUPBY子句分组 细化集函数的作用对象未对查询结果分组,集函数将作用于整个查询结果对查询结果分组后,集函数将分别作用于每个组.使用GROUPBY子句分组[例30]求各个课程号及相应的选课人数。

SELECTCno,COUNT(Sno)FROMSCGROUPBYCno;

结果

CnoCOUNT(Sno)

122

234 344 433 548.对查询结果分组(续)GROUPBY子句的作用对象是查询的中间结果表分组方法:按指定的一列或多列值分组,值相等的为一组使用GROUPBY子句后,SELECT子句的列名列表中只能出现分组属性和集函数

.使用HAVING短语筛选最终输出结果[例31]查询选修了3门以上课程的学生学号。

SELECTSnoFROMSCGROUPBYSnoHAVINGCOUNT(*)>3;

.例题[例32]查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数

SELECTSno,COUNT(*)FROMSCWHEREGrade>=90GROUPBYSnoHAVINGCOUNT(*)>=3;

.使用HAVING短语筛选最终输出结果只有满足HAVING短语指定条件的组才输出HAVING短语与WHERE子句的区别:作用对象不同WHERE子句作用于基表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。

.3.3查询3.3.1概述3.3.2单表查询3.3.3连接查询3.3.4嵌套查询3.3.5集合查询3.3.6小结.3.3.3连接查询同时涉及多个表的查询称为连接查询用来连接两个表的条件称为连接条件或连接谓词一般格式:[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>

比较运算符:=、>、<、>=、<=、!=[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>.连接查询(续)连接字段连接谓词中的列名称为连接字段连接条件中的各连接字段类型必须是可比的,但不必是相同的.连接操作的执行过程嵌套循环法(NESTED-LOOP)首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组。重复上述操作,直到表1中的全部元组都处理完毕.排序合并法(SORT-MERGE)常用于=连接首先按连接属性对表1和表2排序对表1的第一个元组,从头开始扫描表2,顺序查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。当遇到表2中第一条大于表1连接字段值的元组时,对表2的查询不再继续.排序合并法找到表1的第二条元组,然后从刚才的中断点处继续顺序扫描表2,查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。直接遇到表2中大于表1连接字段值的元组时,对表2的查询不再继续重复上述操作,直到表1或表2中的全部元组都处理完毕为止.索引连接(INDEX-JOIN)对表2按连接字段建立索引对表1中的每个元组,依次根据其连接字段值查询表2的索引,从中找到满足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组.连接查询(续)SQL中连接查询的主要类型

广义笛卡尔积 等值连接(含自然连接)

非等值连接查询 自身连接查询 外连接查询 复合条件连接查询.一、广义笛卡尔积不带连接谓词的连接很少使用例:

SELECTStudent.*,SC.*FROMStudent,SC.二、等值与非等值连接查询等值连接、自然连接、非等值连接[例32]查询每个学生及其选修课程的情况。SELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.Sno=SC.Sno;.等值连接连接运算符为=的连接操作

[<表名1>.]<列名1>=[<表名2>.]<列名2>任何子句中引用表1和表2中同名属性时,都必须加表名前缀。引用唯一属性名时可以加也可以省略表名前缀。.等值连接假设Student表、SC表分别有下列数据:

Student表SnoSnameSsexSageSdept95001

李勇

男20CS95002

刘晨

女19IS95003

王敏

女18MA95004

张立

男19IS.等值连接SC表SnoCnoGrade9500119295001285950019500295002323889080.等值连接结果表

Student.SnoSnameSsexSageSdeptSC.SnoCnoGrade

95001李勇男20 CS 9500119295001李勇男20 CS 9500128595001李勇男20 CS 9500138895002刘晨女19 IS 9500229095002刘晨女19 IS 95002380

.自然连接等值连接的一种特殊情况,把目标列中重复的属性列去掉。[例33]对[例32]用自然连接完成。

SELECTStudent.Sno,Sname,Ssex,Sage, Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno;.非等值连接查询连接运算符不是=的连接操作

[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>比较运算符:>、<、>=、<=、!=[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>

.三、自身连接一个表与其自己进行连接,称为表的自身连接需要给表起别名以示区别由于所有属性名都是同名属性,因此必须使用别名前缀.自身连接(续)[例34]查询每一门课的间接先修课(即先修课的先修课)

SELECTFIRST.Cno,SECOND.CpnoFROMCourseFIRST,CourseSECONDWHEREFIRST.Cpno=SECOND.Cno;.自身连接(续)FIRST表(Course表)

CnoCnameCpnoCcredit1数据库542数学

23信息系统144操作系统635数据结构746数据处理

27PASCAL语言64.自身连接(续)SECOND表(Course表)

CnoCnameCpnoCcredit1数据库542数学

23信息系统144操作系统635数据结构746数据处理

27PASCAL语言64.自身连接(续)查询结果

173556

cnocpno.四、外连接(OuterJoin)外连接与普通连接的区别普通连接操作只输出满足连接条件的元组外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出.外连接(续)

[例33]查询每个学生及其选修课程的情况包括没有选修课程的学生----用外连接操作SELECTStudent.Sno,Sname,Ssex, Sage,Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno(*);.外连接(续)结果:

Student.Sno SnameSsexSageSdeptCnoGrade

95001李勇男20CS19295001李勇男20CS28595001李勇男20CS38895002刘晨女19IS29095002刘晨女19IS38095003王敏女18MA95004张立男19IS.外连接(续)在表名后面加外连接操作符(*)或(+)指定非主体表非主体表有一“万能”的虚行,该行全部由空值组成虚行可以和主体表中所有不满足连接条件的元组进行连接由于虚行各列全部是空值,因此与虚行连接的结果中,来自非主体表的属性值全部是空值.外连接(续)

左外连接

外连接符出现在连接条件的左边 右外连接

外连接符出现在连接条件的右边

.五、复合条件连接WHERE子句中含多个连接条件时,称为复合条件连接[例35]查询选修2号课程且成绩在90分以上的所有学生的学号、姓名SELECTStudent.Sno,student.SnameFROMStudent,SCWHEREStudent.Sno=SC.SnoAND

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论