1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,An Introduction to Database System,*,本资料仅供参考,不能作为科学依据。谢谢。本资料仅供参考,不能作为科学依据。本资料仅供参考,不能作为科学依据。谢谢。不能作为科学依据。,3.4 数据查询,一、概述,二、单表查询,三、连接查询,四、嵌套查询,五、集合查询,六、小结,1/53,An Introduction to Database System,一、概述,语句格式,SELECT,ALL|DISTINCT,,,FROM,,,WHERE,GROUP BY,HAVING,ORDER
2、 BY,ASC|DESC ;,2/53,An Introduction to Database System,语句格式说明:,SELECT子句,:指定要显示属性列,FROM子句,:指定查询对象(基本表或视图),WHERE子句,:指定查询条件,GROUP BY子句,:对查询结果按指定列值分组,该属性列值相等元组为一个组。通常会在每组中作用集函数。,HAVING短语,:筛选出只有满足指定条件组,ORDER BY子句,:对查询结果表按指定列值升序或降序排序,3/53,An Introduction to Database System,3.4 查 询,一、概述,二、单表查询,三、连接查询,四、嵌套查
3、询,五、集合查询,六、小结,4/53,An Introduction to Database System,二、单表查询,1.选择表中若干列,2.选择表中若干元组,3.对查询结果排序,4.使用集函数,5.对查询结果分组,查询仅包括一个表,最简单查询操作,5/53,An Introduction to Database System,1、查询指定列,例1 查询全体学生学号与姓名。,例2 查询全体学生姓名、学号、所在系。,SELECT Sno,Sname,FROM Student;,SELECT Sname,Sno,Sdept,FROM Student;,6/53,An Introduction
4、to Database System,2、查询全部列,SELECT Sno,Sname,Ssex,Sage,Sdept,FROM Student;,例3 查询全体学生详细统计。,SELECT *,FROM Student;,或,7/53,An Introduction to Database System,3、查询经过计算值,SELECT子句为表示式,算术表示式,字符串常量,函数,列别名,等,8/53,An Introduction to Database System,查询经过计算值,例4 查询全体学生姓名及其出生年份。,SELECT Sname,-Sage,FROM Student;,输出
5、结果:,Sname -Sage,-,李勇 1986,刘晨 1987,王名 1988,张立 1987,9/53,An Introduction to Database System,查询经过计算值,例5 查询全体学生姓名、出生年份和所在系,要求用小写字母表示全部系名。,SELECT Sname,Year of Birth:,-Sage,LOWER(Sdept),FROM Student;,10/53,An Introduction to Database System,例题(续),输出结果:,Sname Year of Birth:-Sage LOWER(Sdept),-,李勇 Year of
6、Birth:1986 cs,刘晨 Year of Birth:1987 is,王名 Year of Birth:1988 ma,张立 Year of Birth:1987 is,11/53,An Introduction to Database System,例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 Sn
7、ame NAME,Year of Birth:BIRTH,-Sage BIRTHDAY,LOWER(Sdept)DEPARTMENT,FROM Student;,12/53,An Introduction to Database System,二、选择表中若干元组,消除取值重复行,查询满足条件元组,13/53,An Introduction to Database System,1.消除取值重复行,在SELECT子句中使用DISTINCT短语,假设SC表中有以下数据,Sno Cno Grade,-,15121 1,92,15121 2 85,15121 3 88,15122 2 90,1512
8、2 3 80,14/53,An Introduction to Database System,ALL 与,DISTINCT,例6 查询选修了课程学生学号。,(1)SELECT Sno,FROM SC;,或(默认 ALL),SELECT ALL Sno,FROM SC;,结果:Sno,-,95001,95001,95001,95002,95002,15/53,An Introduction to Database System,例题(续),(2),SELECT DISTINCT Sno,FROM SC;,结果:,Sno,-,95001,95002,注意 DISTINCT短语作用范围是全部目标列
9、16/53,An Introduction to Database System,2.查询满足条件元组,WHERE子句惯用查询条件,比较大小,确定范围,确定集合,字符串匹配,包括空值查询,多重条件查询,17/53,An Introduction to Database System,(1)比较大小,在WHERE子句中使用比较运算符,=,=,!,!,,逻辑运算符NOT +比较运算符,例8 查询全部年纪在20岁以下学生姓名及其年纪。,SELECT Sname,Sage,FROM Student,WHERE Sage=20;,18/53,An Introduction to Database Sy
10、stem,(2)确定范围,使用谓词 BETWEEN AND ,NOT BETWEEN AND ,例10 查询年纪在2023岁(包含20岁和23岁)之间学生姓名、系别和年纪。,SELECT Sname,Sdept,Sage,FROM Student,WHERE Sage BETWEEN 20 AND 23;,19/53,An Introduction to Database System,例题(续),例11 查询年纪不在2023岁之间学生姓名、系别和年纪。,SELECT Sname,Sdept,Sage,FROM Student,WHERE Sage NOT BETWEEN 20 AND 23;
11、20/53,An Introduction to Database System,(3)确定集合,使用谓词 IN,(,值表,),NOT IN,(,值表,),(,值表,),:用逗号分隔一组取值,例,12查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生姓名和性别。,SELECT Sname,Ssex,FROM Student,WHERE Sdept IN(IS,MA,CS);,21/53,An Introduction to Database System,(3)确定集合,例,13查询既不是信息系、数学系,也不是计算机科学系学生姓名和性别。,SELECT Sname,Ssex,FRO
12、M Student,WHERE Sdept NOT IN(IS,MA,CS);,22/53,An Introduction to Database System,(4)字符串匹配,NOT LIKE ESCAPE ,:指定匹配模板,匹配模板:固定字符串或含通配符字符串,当匹配模板为固定字符串时,,能够用=运算符取代 LIKE 谓词,用!=或 运算符取代 NOT LIKE 谓词,查找指定属性列值与相匹配元组,23/53,An Introduction to Database System,通配符,%(百分号)代表任意长度(长度可认为0)字符串,例:a%b表示以a开头,以b结尾任意长度字符串。如ac
13、b,addgb,ab 等都满足该匹配串,_(下横线)代表任意单个字符,例:a_b表示以a开头,以b结尾长度为3任意字符串。如acb,afb等都满足该匹配串,24/53,An Introduction to Database System,ESCAPE 短语:,当用户要查询字符串本身就含有%或 _ 时,要使用ESCAPE 短语对通配符进行转义。,25/53,An Introduction to Database System,例题,1)匹配模板为固定字符串,例,14 查询学号为95001学生详细情况。,SELECT*,FROM Student,WHERE Sno LIKE 95001;,等价于:
14、SELECT *,FROM Student,WHERE Sno=95001;,26/53,An Introduction to Database System,例题(续),2)匹配模板为含通配符字符串,例15 查询全部姓刘学生姓名、学号和性别。,SELECT Sname,Sno,Ssex,FROM Student,WHERE Sname LIKE 刘%;,27/53,An Introduction to Database System,例题(续),匹配模板为含通配符字符串(续),例16 查询姓欧阳且全名为三个汉字学生姓名。,SELECT Sname,FROM Student,WHERE Sn
15、ame LIKE 欧阳_ _;,28/53,An Introduction to Database System,例题(续),匹配模板为含通配符字符串(续),例17 查询名字中第2个字为阳字学生姓名和学号。,SELECT Sname,Sno,FROM Student,WHERE Sname LIKE _ _阳%;,29/53,An Introduction to Database System,例题(续),匹配模板为含通配符字符串(续),例18 查询全部不姓刘学生姓名。,SELECT Sname,Sno,Ssex,FROM Student,WHERE Sname NOT LIKE 刘%;,30
16、/53,An Introduction to Database System,例题(续),3)使用换码字符将通配符转义为普通字符,例19 查询DB_Design课程课程号和学分。,SELECT Cno,Ccredit,FROM Course,WHERE Cname LIKE DB,_Design,ESCAPE,31/53,An Introduction to Database System,例题(续),使用换码字符将通配符转义为普通字符(续),例20 查询以DB_开头,且倒数第3个字符为 i课程详细情况。,SELECT *,FROM Course,WHERE Cname LIKE DB,_%i
17、 _,ESCAPE ,;,32/53,An Introduction to Database System,(5)包括空值查询,使用谓词 IS NULL 或 IS NOT NULL,“IS NULL”不能用“,=NULL,”代替,例21 一些学生选修课程后没有参加考试,所以有选课统计,但没有考试成绩。查询缺乏成绩学生学号和对应课程号。,SELECT Sno,Cno,FROM SC,WHERE Grade IS NULL;,33/53,An Introduction to Database System,例题(续),例22 查询全部有成绩学生学号和课程号。,SELECT Sno,Cno,FRO
18、M SC,WHERE Grade IS NOT NULL;,34/53,An Introduction to Database System,(6)多重条件查询,用逻辑运算符AND和 OR来联结多个查询条件,AND优先级高于OR,能够用括号改变优先级,35/53,An Introduction to Database System,例题,例23 查询计算机系年纪在20岁以下学生姓名。,SELECT Sname,FROM Student,WHERE Sdept=CS AND Sage=20 AND Sage3;,50/53,An Introduction to Database System,例
19、题,例32,查询有3门以上课程是90分以上,学生学号及(90分以上)课程数,SELECT Sno,COUNT(*),FROM SC,WHERE Grade90,GROUP BY Sno,HAVING COUNT(*)3;,51/53,An Introduction to Database System,使用HAVING短语筛选最终输出结果,只有满足HAVING短语指定条件组才输出,HAVING短语与WHERE子句区分:作用对象不一样,WHERE子句作用于基表或视图,从中选择满足条件元组。,HAVING短语作用于组,从中选择满足条件组,。,52/53,An Introduction to Database System,下课了。,休息一会儿。,追,53/53,An Introduction to Database System,






