教学课件:第5章-关系数据库标准语言SQL.ppt

上传人:小飞机 文档编号:6289616 上传时间:2023-10-14 格式:PPT 页数:49 大小:396.32KB
返回 下载 相关 举报
教学课件:第5章-关系数据库标准语言SQL.ppt_第1页
第1页 / 共49页
教学课件:第5章-关系数据库标准语言SQL.ppt_第2页
第2页 / 共49页
教学课件:第5章-关系数据库标准语言SQL.ppt_第3页
第3页 / 共49页
教学课件:第5章-关系数据库标准语言SQL.ppt_第4页
第4页 / 共49页
教学课件:第5章-关系数据库标准语言SQL.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《教学课件:第5章-关系数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《教学课件:第5章-关系数据库标准语言SQL.ppt(49页珍藏版)》请在三一办公上搜索。

1、1,第5章,关系数据库标准语言SQL,2,主 要 内 容,5.1 SQL的功能及特点5.2 数据定义语句5.3 数据查询语句5.4 数据更新语句5.6 数据控制语句,3,5.3.1 查询语句语法,SELECT ALL|DCSTINCT FROM WHERE GROUP BY HAVING ORDER BY ASC|DESC;,4,SELECT子句:指定要显示的属性列;FROM子句:指定查询对象(基本表或视图);WHERE子句:指定查询条件;GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中使用聚集函数。HAVING短语:筛选出只有满足指定条件的组;O

2、RDER BY子句:对查询结果表按指定列值的升序或降序排序;,5.3.1 查询语句语法,5,5.3.2 简单查询,指FROM子句中仅涉及一个表的查询,是一种最简单的查询操作。一、选择表中的若干列 二、选择表中的若干元组 三、对查询结果排序 四、使用聚集函数 五、对查询结果分组,6,示例数据库,学生课程库,包含3个基本表,结构为:Student(Sno,Sname,Ssex,Sage,Sdept)Course(Cno,Cname,Cpno,Ccredit)SC(Sno,Cno,Grade),7,1.查询指定列,例1 查询全体学生的学号与姓名。,SELECT Sname,Sno,SdeptFROM

3、 Student;,例2 查询全体学生的姓名、学号、所在系。,SELECT Sno,SnameFROM Student;,8,2.查询全部列,例3 查询全体学生的详细记录。,SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;或SELECT*FROM Student;,9,3.查询经过计算的值,SELECT子句的为表达式算术表达式字符串常量函数列别名等,10,例4 查全体学生的姓名及其出生年份。SELECT Sname,2007-SageFROM Student;输出结果:Sname 2007-Sage-王林 1989 张大民 1988 顾芳 1988

4、姜凡 1989 葛波 1988,算术表达式,可以给列或表达式起别名:SELECT Sname,2007-Sage AS BirthYearFROM Student;保留字AS可以省略,11,4.消除取值重复的行,在SELECT子句中使用DISTINCT短语假设SC表中有下列数据 Sno Cno Grade-2007001 1 92 2007001 2 85 2007001 3 88 2007002 2 90 2007002 3 80,12,ALL 与 DISTINCT,例5 查询选修了课程的学生学号。SELECT Sno FROM SC;或(默认 ALL)SELECT ALL Sno FROM

5、 SC;结果:Sno-2007001 2007001 2007001 2007002 2007002,13,例 题,(2)SELECT DISTINCT Sno FROM SC;该语句则去掉了重复元组结果:Sno-2007001 2007002,14,例题(续),注意 DISTINCT短语的作用范围是所有目标列例:查询选修课程的各种成绩错误的写法SELECT DISTINCT Cno,DISTINCT GradeFROM SC;正确的写法 SELECT DISTINCT Cno,Grade FROM SC;,15,5.WHERE子句,常用的运算符,16,(1)比较大小,例1 查询所有年龄在20

6、岁以下的学生姓名及其年龄。SELECT Sname,Sage FROM Student WHERE Sage=20;,17,(2)确定范围,使用谓词 BETWEEN AND NOT BETWEEN AND 例2 查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。,SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWEEN 20 AND 23;,18,例题(续),例3 查询年龄不在2023岁之间的学生姓名、系别和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage NOT BETWE

7、EN 20 AND 23;,19,使用谓词 IN,NOT IN 例4查询计算机系(CS)、数学系(MA)学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN(CS,MA);,(3)确定集合,20,(3)确定集合,例5查询不是计算机系、数学系的学生的姓名和性别。SELECT Sname,SsexFROM Student WHERE Sdept NOT IN(CS,MA);,21,(4)涉及空值的查询,使用谓词 IS NULL 或 IS NOT NULL“IS NULL”不能用“=NULL”代替例13 某些学生选修课程后没有参加考试,所以有选课记

8、录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NULL;,22,例题(续),例14 查所有有成绩的学生学号和课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;,23,(6)多重条件查询,用逻辑运算符AND和 OR来联结多个查询条件 AND的优先级高于OR 可以用括号改变优先级可用来实现多种其他谓词 NOT IN NOT BETWEEN AND,24,例题,例15 查询计算机系年龄在20岁以下的学生姓名。SELECT Sname FROM Student

9、WHERE Sdept=CS AND Sage20;,25,改写例4,例4 查询计算机系(CS)、数学系(MA)学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN(CS,MA)可改写为:SELECT Sname,Ssex FROM Student WHERE Sdept=CS OR Sdept=MA;,26,改写例2,例2 查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWEEN 20 AND 23;可改写为:SELEC

10、T Sname,Sdept,SageFROM Student WHERE Sage=20 AND Sage=23;,27,6.聚集函数,5类主要集函数(P137 表5-10)计数COUNT(DISTINCT|ALL*)COUNT(DISTINCT|ALL)计算总和SUM(DISTINCT|ALL)计算平均值AVG(DISTINCT|ALL),28,聚集函数(续),求最大值MAX(DISTINCT|ALL)求最小值MIN(DISTINCT|ALL)DISTINCT短语:在计算时要取消指定列中的重复值ALL短语:不取消重复值ALL为缺省值,29,例1 查询学生总人数。SELECT COUNT(*)

11、FROM Student;例2 查询选修了课程的学生人数。SELECT COUNT(DISTINCT Sno)FROM SC;注:用DISTINCT以避免重复计算学生人数,30,例3 计算1号课程的学生平均成绩。SELECT AVG(Grade)FROM SC WHERE Cno=1;例4 查询选修1号课程的学生最高分数。SELECT MAX(Grade)FROM SC WHER Cno=1;,31,7.GROUP BY子句分组,使用GROUP BY子句分组,细化聚集函数的作用对象 未对查询结果分组,聚集函数将作用于整个查询结果;对查询结果分组后,聚集函数将分别作用于每个组;,32,使用GRO

12、UP BY子句分组,例1求各个课程号及相应的选课人数。SELECT Cno,COUNT(Sno)FROM SC GROUP BY Cno;,33,使用GROUP BY子句分组(续),注意:GROUP BY子句的作用对象是查询的中间结果表分组方法:按指定的一列或多列值分组,值相等的为一组使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和聚集函数,34,使用HAVING短语筛选最终输出结果,例2 查询选修了3门以上课程的学生学号。SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)3;,35,使用HAVING短语筛选最终输出结果(续

13、),注意:只有满足HAVING短语指定条件的组才输出HAVING短语与WHERE子句的区别:作用对象不同WHERE子句作用于基表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。,36,8.ORDER BY子句排序,使用ORDER BY子句 可以按一个或多个属性列排序 升序:ASC;降序:DESC;缺省值为升序当排序列含空值时ASC:排序列为空值的元组最后显示DESC:排序列为空值的元组最先显示,37,例1 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。SELECT Sno,Grade FROM SC WHERE Cno=3 ORDER BY G

14、rade DESC;,38,查询结果,Sno Grade-2007010 2007024 2007007 92 2007003 82 2007010 82 2007009 75 2007014 61 2007002 55,39,例2 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。SELECT*FROM Student ORDER BY Sdept,Sage DESC;ORDER BY 5,4 DESC;,40,小结:SELECT语句的一般格式,SELECT ALL|DISTINCT FROM WHERE GROUP BY HAVING ORDER BY ASC

15、|DESC;,41,5.3.3 连接查询,连接查询中的连接条件通过WHERE子句表达,连接条件和元组选择条件之间用AND(与)操作符衔接;源表一般为多表;用来连接两个表的条件称为连接条件或连接谓词;连接谓词中的列名称为连接字段;连接字段不一定同名,但类型必须是可比的;,42,例1 查询每个学生的基本情况以及他所选修的课程情况。Student(Sno,Sname,Ssex,Sage,Sdept)Course(Cno,Cname,Cpno,Ccredit)SC(Sno,Cno,Grade),43,SELECT Student.*,SC.*FROM Student,SC WHERE Student.

16、Sno=SC.Sno;,44,例2 求学生的学号、姓名、选修的课程名及成绩。Student(Sno,Sname,Ssex,Sage,Sdept)Course(Cno,Cname,Cpno,Ccredit)SC(Sno,Cno,Grade),45,SELECT Student.Sno,Sname,Cname,GradeFROM Student,Course,SCWHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno;,46,例3 求选修了C1课程且成绩为90分以上的学生学号、姓名及成绩。Student(Sno,Sname,Ssex,Sage,Sdept)Course(Cno,Cname,Cpno,Ccredit)SC(Sno,Cno,Grade),47,SELECT Student.Sno,Sname,GradeFROM Student,SCWHERE Student.Sno=SC.Sno AND Cno=C1AND Grade90;,48,连接操作不只是在两个表之间进行,一个表内还可以进行自身连接操作。表自身的连接操作称为自身连接。嵌套查询:将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中。,49,本节结束,休息一会儿。,追求,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号