《数据库管理与编程技术》第5章 数据操作.ppt
《《数据库管理与编程技术》第5章 数据操作.ppt》由会员分享,可在线阅读,更多相关《《数据库管理与编程技术》第5章 数据操作.ppt(92页珍藏版)》请在三一办公上搜索。
1、数据库管理与编程技术,第5章 数据操作,第5章 数据操作,5.1 数据查询 5.2 数据修改,5.1 数据查询,5.1.1 连接查询5.1.2 合并多个结果集 5.1.3 将查询结果保存到新表中5.1.4 使用 TOP限制结果集 5.1.5 使用CASE表达式5.1.6 汇总数据5.1.7 子查询,5.1.1 连接查询,若一个查询同时涉及两个或两个以上的表,则称之为连接查询。连接查询包括内连接、外连接和交叉连接等。,连接基础知识,连接查询中用于连接两个表的条件称为连接条件或连接谓词。一般格式为:,必须是可比的,内连接,SQL-92格式:FROM 表1 INNER JOIN 表2 ON SQL-
2、89格式:FROM 表1,表2 WHERE,执行连接操作的过程:,首先取表1中的第1个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第1个元组与该元组拼接起来,形成结果表中的一个元组。表2全部查找完毕后,再取表1中的第2个元组,然后再从头开始扫描表2,重复这个过程,直到表1中的全部元组都处理完毕为止。,例2.查询计算机系学生的修课情况,要求列出学生的名字、所修课的课程号和成绩。,SELECT Sname,Cno,Grade FROM Student JOIN SC ON Student.Sno=SC.Sno WHERE Sdept=计算机系,例3.查询信息系修了VB
3、课程的学生的修课成绩,要求列出学生姓名、课程名和成绩。,SELECT Sname,Cname,Grade FROM Student s JOIN SC ON s.Sno=SC.Sno JOIN Course c ON c.Cno=SC.Cno WHERE Sdept=信息系 AND Cname=VB,例4查询所有修了VB课程的学生的修课情况,要求列出学生姓名和所在的系。,SELECT Sname,Sdept FROM Student S JOIN SC ON S.Sno=SC.Sno JOIN Course C ON C.Cno=SC.cno WHERE Cname=VB,例5有分组的多表连接
4、查询。查询每个系的学生的考试平均成绩。,SELECT Sdept,AVG(grade)as AverageGradeFROM Student S JOIN SC ON S.Sno=SC.Sno GROUP BY Sdept,例6有分组和行过滤的多表连接查询。查询计算机系每门课程的选课人数、平均成绩、最高成绩和最低成绩。,SELECT Cno,COUNT(*)AS Total,AVG(Grade)as AvgGrade,MAX(Grade)as MaxGrade,MIN(Grade)as MinGrade FROM Student S JOIN SC ON S.Sno=SC.Sno WHERE
5、Sdept=计算机系 GROUP BY Cno,自连接,为特殊的内连接相互连接的表物理上为同一张表。必须为两个表取别名,使之在逻辑上成为两个表。,例7.查询与刘晨在同一个系学习的学生的姓名和所在的系。,SELECT S2.Sname,S2.Sdept FROM Student S1 JOIN Student S2 ON S1.Sdept=S2.Sdept WHERE S1.Sname=刘晨 AND S2.Sname!=刘晨,例8假设有著书情况表记录了作者与其所写的图书的情况,其结构为:au_book(au_id,book_id)查询哪些作者合写了一本书,要求列出合写书的作者号和书号。【见P98
6、】SELECT t1.au_id as 作者1,t2.au_id as 作者2,t1.book_id as 书号FROM au_book t1 JOIN au_book t2ON t1.book_id=t2.book_idWHERE t1.au_id t2.au_id,外连接,只限制一张表中的数据必须满足连接条件,而另一张表中数据可以不满足连接条件。外连接的语法格式为:FROM 表1 LEFT|RIGHT OUTER JOIN 表2 ON,例9.查询学生的修课情况,包括修了课程的学生和没有修课的学生。,SELECT Student.Sno,Sname,Cno,GradeFROM Student
7、 LEFT OUTER JOIN SCON Student.Sno=SC.Sno 或:SELECT Student.Sno,Sname,Cno,GradeFROM SC RIGHT OUTER JOIN Student ON Student.Sno=SC.Sno,例10查询哪些课程没有人选,列出课程名。,SELECT Cname FROM Course C LEFT JOIN SC ON C.Cno=SC.Cno WHERE SC.Cno is NULL【用子查询如何实现?】,例11查询每个学生的选课门数,包括没有选课的学生。,SELECT s.sno 学号,count(SC.cno)选课门数
8、 FROM Student s LEFT JOIN SC ON s.sno=SC.sno GROUP BY s.sno,交叉连接,语法格式为:SELECT FROM 表1 CROSS JOIN 表2 没有WHERE子句的交叉连接将产生连接所涉及的表的一个笛卡尔乘积,也就是第一个表中的每一行数据与第二个表中的每一行数据进行连接的结果。,交叉连接的结果一般没有什么实际的意义。如果在交叉连接中有WHERE子句,则交叉联接的作用将同内联接一样,例如:SELECT*FROM Student CROSS JOIN SC WHERE Student.sno=SC.sno与内连接:SELECT*FROM St
9、udent INNER JOIN SC ON Student.sno=SC.sno的结果一样。,5.1.2 合并多个结果集,将两个或更多查询的结果集组合为一个结果集,该结果集包含联合查询中的所有查询的全部行。UNION语句形式 查询语句1 UNION ALL 查询语句2 UNION ALL UNION ALL 查询语句n,ALL:在结果中包含所有的行,包括重复行。如果没有指定,则删除重复行。注意:列的个数、顺序必须相同;对应列的数据类型必须兼容!,例12:将作者所在的城市与出版商所在的城市合并为一个显示结果,SELECT city AS Cities FROM authorsUNION SEL
10、ECT city FROM publishersORDER BY city,说明:标题采用第一个的标题;排序语句放最后select 语句。,5.1.3 将查询结果保存到新表中,SELECT INTO 语句创建一个新表,并用 SELECT 的结果集填充该表。新表的结构由选择列表中表达式的特性定义。SELECT INTO子句的大致格式为:SELECT 选择列表INTO 新表名FROM 子句,被插入表的类型,局部临时表:#新表名局部于当前连接,生命期同连接期。全局临时表:#新表名可在所有连接中使用,生命期同用户连接期永久表:新表名存储在磁盘上,例13将计算机系的学生信息存入#computer局部临时
11、表中。,SELECT Sno,Sname,Ssex,Sage INTO#computer FROM Student WHERE Sdept=计算机系,例14将选修了VB课程的学生的学号及成绩存入全局临时表#VB中。,SELECT Sno,Grade INTO#VBFROM SC JOIN Course C ON C.Cno=SC.Cno WHERE Cname=VB,例1:将学生的姓名、修课的课程名和成绩存入永久表s_c_g中,SELECT Sname,Cname,Grade INTO s_c_g FROM Student s JOIN SC ON s.Sno=SC.Sno JOIN Cour
12、se c ON c.Cno=SC.Cno,5.1.4 使用 TOP限制结果集,TOP 子句限制返回到结果集中的行数。格式:TOP n PERCENT WITH TIES Top n:取前n个结果Top n Percent:取前n%个结果With Ties:取前n个结果,包括并列的行。必须同Order by一起使用,例16查询年龄最大的三个学生的姓名、年龄及所在的系。,SELECT TOP 3 Sname,Sage,Sdept FROM Student ORDER BY Sage desc若要包括年龄并列第三名的学生,则此句可写为:SELECT TOP 3 with ties Sname,Sag
13、e,Sdept FROM Student ORDER BY Sage desc,例17查询VB课程考试成绩前三名的学生的姓名和成绩。,SELECT TOP 3 WITH TIES Sname,Grade FROM Student S JOIN SC on S.Sno=SC.Sno JOIN Course C ON C.Cno=SC.Cno WHERE Cname=VB ORDER BY Grade DESC,例18查询选课门数最多的前三名的学生的学号和选课门数,包括并列的情况。,SELECT TOP 3 WITH TIES sno,count(*)选课门数 FROM SC GROUP BY s
14、no ORDER BY count(*)DESC,5.1.5 使用CASE表达式,可以在查询语句中使用CASE表达式,以达到分情况显示不同类型的数据的目的。查询语句中的CASE表达式一般是出现在查询列表中。,例19对pubs数据库中的titles表中的数据更改图书分类(Category)的显示,以使其更易于理解。如果图书分类为“popular_comp”,则显示“流行计算类”;如果图书分类为“mod_cook”,则显示“现代烹饪类”;如果图书分类为“business”,则显示“商业类”;如果图书分类为“psychology”,则显示“心理学类”;如果图书分类为“trad_cook”,则显示“传
15、统烹饪类”;其他情况,显示“未分类”。,SELECT Category=CASE type WHEN popular_comp THEN 流行计算类 WHEN mod_cook THEN 现代烹饪类 WHEN business THEN 商业类 WHEN psychology THEN 心理学类 WHEN trad_cook THEN 传统烹饪类 ELSE 未分类 END,title,price FROM titlesWHERE price IS NOT NULLORDER BY type,price,例20对pubs数据库的titles表,如果出版日期早于1991年,则显示“旧书”;如果出版
16、日期在1992年到1998年之间,则显示“较旧”;如果晚于1998年则显示“新书”。列出图书书号,书名和处理后的出版日期和图书类型。,SELECT title_id,title,case WHEN pubdate 1998/12/31 THEN 新书END,type FROM titles,例21对pubs数据库的titles表,查询每类(type)图书的平均价格,如果平均价格高于30,则显示“比较贵”;如果平均价格在20到30之间,则显示“合适”;如果平均价格小于20,则显示“比较便宜”;如果平均价格为空,则显示“未定价”。,SELECT type,平均价格=CASE WHEN avg(pr
17、ice)30 THEN 比较贵 WHEN avg(price)between 20 and 30 THEN 适中 WHEN avg(price)20 THEN 比较便宜 WHEN avg(price)IS NULL THEN 未定价 END FROM titlesGROUP BY type,5.1.6 汇总数据,有时需要对数据进行一些汇总,特别是在进行辅助决策支持时。简单的数据汇总可以直接使用Transact-SQL完成。Transact-SQL提供了的数据汇总运算符:CUBE或ROLLUP运算符。Group by 一部分!COMPUTE或COMPUTE BY运算符。支持COMPUTE和COM
18、PUTE BY是为了向后兼容。一般情况下应优先选用ROLLUP 而不是COMPUTE或COMPUTE BY。,用CUBE汇总数据,CUBE运算符在SELECT 语句的GROUP BY子句中指定。该语句的选择列表中应包含要分析的列(维度列)和聚合函数表达式(要分析的数据)。在GROUP BY子句中要指定维度列和关键字WITH CUBE。结果集将包含维度列中各值的所有可能的组合以及与这些维度值组合相匹配的基础行中的聚合值。,例22,SELECT sdept,ssex,count(*)as count_stud FROM Student GROUP BY sdept,ssex WITH CUBE,例
19、23从学号和课程号两个角度统计考试平均成绩的情况。,SELECT sno,cno,avg(grade)AS avg_grade FROM SC GROUP BY sno,cno WITH CUBE,只有一个维度的多维数据集可用于生成合计,SELECT sdept,count(*)AS count_sno FROM Student GROUP BY sdept WITH CUBE,说明,如果SELECT语句中包含多个分析的维度,则由CUBE生成的结果集可能会很大,因为这些语句会为所有维度中值的所有组合生成行。大的结果集由于包含的数据可能过多而不易于阅读和理解。解决这个问题的办法是将SELECT语
20、句放在视图中,然后再对所生成的视图进行条件查询。,例24对例23的例子,将其查询结果保存在视图中,CREATE VIEW avg_grade ASSELECT CASE WHEN GROUPING(sno)=1 THEN 全部 ELSE sno END AS SNO,CASE WHEN GROUPING(cno)=1 THEN 全部 ELSE cno END AS CNO,avg(grade)AS avg_grade FROM SC GROUP BY sno,cno WITH CUBE,例25利用例24的视图,查询学号为“9512102”的学生选课情况和平均成绩。,SELECT*from av
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库管理与编程技术 数据库管理与编程技术第5章 数据操作 数据库 管理 编程 技术 数据 操作
链接地址:https://www.31ppt.com/p-2454562.html