数据查询.ppt

上传人:本田雅阁 文档编号:3185381 上传时间:2019-07-22 格式:PPT 页数:53 大小:440.51KB
返回 下载 相关 举报
数据查询.ppt_第1页
第1页 / 共53页
数据查询.ppt_第2页
第2页 / 共53页
数据查询.ppt_第3页
第3页 / 共53页
数据查询.ppt_第4页
第4页 / 共53页
数据查询.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《数据查询.ppt》由会员分享,可在线阅读,更多相关《数据查询.ppt(53页珍藏版)》请在三一文库上搜索。

1、An Introduction to Database System,3.4 数据查询,一、概述 二、 单表查询 三、 连接查询 四、 嵌套查询 五、 集合查询 六、 小结,An Introduction to Database System,一、概述,语句格式 SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ;,An Introduction to Database System,语句格式说明:,SELECT子句:指定要显示的属性列 FROM子句:指定查询对象(基本表或视图) WHERE子句:指定查询条

2、件 GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。 HAVING短语:筛选出只有满足指定条件的组 ORDER BY子句:对查询结果表按指定列值的升序或降序排序,An Introduction to Database System,3.4 查 询,一、概述 二、单表查询 三、连接查询 四、嵌套查询 五、集合查询 六、小结,An Introduction to Database System,二、单表查询,1.选择表中的若干列 2.选择表中的若干元组 3.对查询结果排序 4.使用集函数 5.对查询结果分组,查询仅涉及一个表,最简单的查询操

3、作,An Introduction to Database System,1、查询指定列,例1 查询全体学生的学号与姓名。,例2 查询全体学生的姓名、学号、所在系。,SELECT Sno,Sname FROM Student;,SELECT Sname,Sno,Sdept FROM Student;,An Introduction to Database System,2、查询全部列,SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;,例3 查询全体学生的详细记录。,SELECT * FROM Student;,或,An Introduction to

4、 Database System,3、查询经过计算的值,SELECT子句的为表达式 算术表达式 字符串常量 函数 列别名 等,An Introduction to Database System,查询经过计算的值,例4 查询全体学生的姓名及其出生年份。,SELECT Sname,2008-Sage FROM Student;,输出结果: Sname 2008-Sage - - 李勇 1986 刘晨 1987 王名 1988 张立 1987,An Introduction to Database System,查询经过计算的值,例5 查询全体学生的姓名、出生年份和所在系,要求用小写字母表示所有系

5、名。,SELECT Sname,Year of Birth:,2008-Sage,LOWER(Sdept) FROM Student;,An Introduction to Database System,例题(续),输出结果: Sname Year of Birth: 2008-Sage LOWER(Sdept) - - - - 李勇 Year of Birth: 1986 cs 刘晨 Year of Birth: 1987 is 王名 Year of Birth: 1988 ma 张立 Year of Birth: 1987 is,An Introduction to Database S

6、ystem,例5.1 使用列别名改变查询结果的列标题,输出结果: NAME BIRTH BIRTHDAY DEPARTMENT - - - - 李勇 Year of Birth: 1986 cs 刘晨 Year of Birth: 1987 is 王名 Year of Birth: 1988 ma 张立 Year of Birth: 1987 is,SELECT Sname NAME,Year of Birth:BIRTH, 2008-Sage BIRTHDAY, LOWER(Sdept) DEPARTMENT FROM Student;,An Introduction to Database

7、 System,二、选择表中的若干元组,消除取值重复的行 查询满足条件的元组,An Introduction to Database System,1. 消除取值重复的行,在SELECT子句中使用DISTINCT短语假设SC表中有下列数据 Sno Cno Grade - - - 200215121 1 92 200215121 2 85 200215121 3 88 200215122 2 90 200215122 3 80,An Introduction to Database System,ALL 与 DISTINCT,例6 查询选修了课程的学生学号。 (1) SELECT Sno FRO

8、M SC; 或(默认 ALL) SELECT ALL Sno FROM SC; 结果: Sno - 95001 95001 95001 95002 95002,An Introduction to Database System,例题(续),(2) SELECT DISTINCT Sno FROM SC; 结果: Sno - 95001 95002,注意 DISTINCT短语的作用范围是所有目标列,An Introduction to Database System,2.查询满足条件的元组,WHERE子句常用的查询条件 比较大小 确定范围 确定集合 字符串匹配 涉及空值的查询 多重条件查询,A

9、n Introduction to Database System,(1) 比较大小,在WHERE子句的中使用比较运算符 =,=,!,!, 逻辑运算符NOT + 比较运算符 例8 查询所有年龄在20岁以下的学生姓名及其年龄。,SELECT Sname,Sage FROM Student WHERE Sage = 20;,An Introduction to Database System,(2) 确定范围,使用谓词 BETWEEN AND NOT BETWEEN AND 例10 查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。,SELECT Sname,Sdept,Sa

10、ge FROM Student WHERE Sage BETWEEN 20 AND 23;,An Introduction to Database System,例题(续),例11 查询年龄不在2023岁之间的学生姓名、系别和年龄。,SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;,An Introduction to Database System,(3) 确定集合,使用谓词 IN (值表), NOT IN (值表) (值表) :用逗号分隔的一组取值 例12查询信息系(IS)、数学系(MA)和计算机科

11、学系(CS)学生的姓名和性别。,SELECT Sname,Ssex FROM Student WHERE Sdept IN ( IS,MA,CS );,An Introduction to Database System,(3) 确定集合,例13查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。,SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN ( IS,MA,CS );,An Introduction to Database System,(4) 字符串匹配,NOT LIKE ESCAPE :指定匹配模板 匹配模板:固定字符串或

12、含通配符的字符串 当匹配模板为固定字符串时, 可以用 = 运算符取代 LIKE 谓词 用 != 或 运算符取代 NOT LIKE 谓词 查找指定的属性列值与相匹配的元组,An Introduction to Database System,通配符,% (百分号) 代表任意长度(长度可以为0)的字符串 例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串 _ (下横线) 代表任意单个字符 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串,An Introduction to Database System,ESC

13、APE 短语:,当用户要查询的字符串本身就含有 % 或 _ 时,要使用ESCAPE 短语对通配符进行转义。,An Introduction to Database System,例题,1) 匹配模板为固定字符串 例14 查询学号为95001的学生的详细情况。,SELECT * FROM Student WHERE Sno LIKE 95001; 等价于: SELECT * FROM Student WHERE Sno = 95001;,An Introduction to Database System,例题(续),2) 匹配模板为含通配符的字符串 例15 查询所有姓刘学生的姓名、学号和性别。

14、,SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 刘%;,An Introduction to Database System,例题(续),匹配模板为含通配符的字符串(续) 例16 查询姓“欧阳“且全名为三个汉字的学生的姓名。 SELECT Sname FROM Student WHERE Sname LIKE 欧阳_ _;,An Introduction to Database System,例题(续),匹配模板为含通配符的字符串(续) 例17 查询名字中第2个字为“阳“字的学生的姓名和学号。,SELECT Sname,Sno FROM

15、 Student WHERE Sname LIKE _ _阳%;,An Introduction to Database System,例题(续),匹配模板为含通配符的字符串(续) 例18 查询所有不姓刘的学生姓名。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE 刘%;,An Introduction to Database System,例题(续),3) 使用换码字符将通配符转义为普通字符 例19 查询DB_Design课程的课程号和学分。 SELECT Cno,Ccredit FROM Course WHERE Cname

16、LIKE DB_Design ESCAPE ,An Introduction to Database System,例题(续),使用换码字符将通配符转义为普通字符(续) 例20 查询以“DB_“开头,且倒数第3个字符为 i的课程的详细情况。,SELECT * FROM Course WHERE Cname LIKE DB_%i_ _ ESCAPE ;,An Introduction to Database System,(5) 涉及空值的查询,使用谓词 IS NULL 或 IS NOT NULL “IS NULL” 不能用 “= NULL” 代替 例21 某些学生选修课程后没有参加考试,所以有

17、选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL;,An Introduction to Database System,例题(续),例22 查询所有有成绩的学生学号和课程号。,SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;,An Introduction to Database System,(6) 多重条件查询,用逻辑运算符AND和 OR来联结多个查询条件 AND的优先级高于OR 可以用括号改变优先级,An Introduction to

18、Database System,例题,例23 查询计算机系年龄在20岁以下的学生姓名。,SELECT Sname FROM Student WHERE Sdept= CS AND Sage20;,An Introduction to Database System,改写例12,例12 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex FROM Student WHERE Sdept IN ( IS,MA,CS ) 可改写为:,SELECT Sname,Ssex FROM Student WHERE Sdept= IS OR Sdep

19、t= MA OR Sdept= CS ;,An Introduction to Database System,改写例10,例10 查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23; 可改写为:,SELECT Sname,Sdept,Sage FROM Student WHERE Sage=20 AND Sage=23;,An Introduction to Database System,三、对查询结果排序,使用ORDER BY子句 可以

20、按一个或多个属性列排序 升序:ASC;降序:DESC;缺省值为升序 当排序列含空值时 ASC:排序列为空值的元组最后显示 DESC:排序列为空值的元组最先显示,An Introduction to Database System,对查询结果排序(续),例24 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT Sno,Grade FROM SC WHERE Cno= 3 ,ORDER BY Grade DESC;,An Introduction to Database System,查询结果,Sno Grade - - 95010 95024 95007 92 95

21、003 82 95010 82 95009 75 95014 61 95002 55,An Introduction to Database System,对查询结果排序(续),例25 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。,SELECT * FROM Student ORDER BY Sdept,Sage DESC;,An Introduction to Database System,四、使用集函数,5类主要集函数 计数 COUNT(DISTINCT|ALL *) COUNT(DISTINCT|ALL ) 计算总和 SUM(DISTINCT|ALL

22、 ) 计算平均值 AVG(DISTINCT|ALL ),An Introduction to Database System,使用集函数(续),求最大值 MAX(DISTINCT|ALL ) 求最小值 MIN(DISTINCT|ALL ) DISTINCT短语:在计算时要取消指定列中的重复值 ALL短语:不取消重复值 ALL为缺省值,An Introduction to Database System,使用集函数 (续),例26 查询学生总人数。,SELECT COUNT(*) FROM Student;,例27 查询选修了课程的学生人数。,SELECT COUNT(DISTINCT Sno)

23、 FROM SC;,注:用DISTINCT以避免重复计算学生人数,An Introduction to Database System,使用集函数 (续),例28 计算1号课程的学生平均成绩。,SELECT AVG(Grade) FROM SC WHERE Cno= 1 ;,例29 查询选修1号课程的学生最高分数。,SELECT MAX(Grade) FROM SC WHER Cno= 1 ;,An Introduction to Database System,五、对查询结果分组,使用GROUP BY子句分组 细化集函数的作用对象 未对查询结果分组,集函数将作用于整个查询结果 对查询结果分组

24、后,集函数将分别作用于每个组,An Introduction to Database System,使用GROUP BY子句分组,例30 求各个课程号及相应的选课人数。 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; 结果 Cno COUNT(Sno) 1 22 2 34 3 44 4 33 5 48,An Introduction to Database System,对查询结果分组 (续),GROUP BY子句的作用对象是查询的中间结果表 分组方法:按指定的一列或多列值分组,值相等的为一组 使用GROUP BY子句后,SELECT子句的列名列表中只能

25、出现分组属性和集函数,An Introduction to Database System,使用HAVING短语筛选最终输出结果,例31 查询选修了3门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3;,An Introduction to Database System,例题,例32 查询有3门以上课程是90分以上的 学生的学号及(90分以上的)课程数 SELECT Sno, COUNT(*) FROM SC WHERE Grade90 GROUP BY Sno HAVING COUNT(*)3;,An Introduction to Database System,使用HAVING短语筛选最终输出结果,只有满足HAVING短语指定条件的组才输出 HAVING短语与WHERE子句的区别:作用对象不同 WHERE子句作用于基表或视图,从中选择满足条件的元组。 HAVING短语作用于组,从中选择满足条件的组。,An Introduction to Database System,下课了。,休息一会儿。,追 求,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1