二、选择表中的若干元组1消除取值重复的行在SELECT子句

上传人:宝路 文档编号:48270322 上传时间:2018-07-12 格式:PPT 页数:56 大小:581.79KB
返回 下载 相关 举报
二、选择表中的若干元组1消除取值重复的行在SELECT子句_第1页
第1页 / 共56页
二、选择表中的若干元组1消除取值重复的行在SELECT子句_第2页
第2页 / 共56页
二、选择表中的若干元组1消除取值重复的行在SELECT子句_第3页
第3页 / 共56页
二、选择表中的若干元组1消除取值重复的行在SELECT子句_第4页
第4页 / 共56页
二、选择表中的若干元组1消除取值重复的行在SELECT子句_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《二、选择表中的若干元组1消除取值重复的行在SELECT子句》由会员分享,可在线阅读,更多相关《二、选择表中的若干元组1消除取值重复的行在SELECT子句(56页珍藏版)》请在金锄头文库上搜索。

1、二、选择表中的若干元组 1. 消除取值重复的行在SELECT子句中使用DISTINCT短语假设SC表中有下列数据:Sno Cno Grade- - - 95001 1 9295001 2 8595001 3 8895002 2 9095003 3 80例7 查询选修了课程的学生学号。SELECT Sno FROM SC;或 SELECT all Sno FROM SC; 结果: Sno - 95001 95001 95001 95002 95003SELECT distinct Sno FROM SC;结果: Sno - 95001 95002 95003 注意: DISTINCT短语的作用范

2、围是所有目标列例:查询选修课程的各种成绩错误的写法SELECT DISTINCT Cno,DISTINCT GradeFROM SC;正确的写法SELECT DISTINCT Cno,GradeFROM SC; 查询满足条件的元组(1)比较大小在WHERE子句的中使用:比较运算符=,=,!,!= 20; 查询满足条件的元组(2)确定范围 使用谓词 BETWEEN AND NOT BETWEEN AND 例9 查询年龄在2023岁(包括20岁和23岁)之间的学 生的姓名、系别和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 2

3、0 AND 23; 例10 查询年龄不在2023岁之间的学生姓名、系别和 年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23; 查询满足条件的元组(3)确定集合使用谓词:IN , NOT IN :用逗号分隔的一组取值例11 查询信息系(IS)、数学系(MA)和计算机科 学系(CS)学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN ( IS,MA,CS );例13查询既不是信息系、数学系,也不是计算 机科学系的学生的姓名和性别。SELECT Sna

4、me,SsexFROM StudentWHERE Sdept NOT IN ( IS,MA,CS );查询满足条件的元组(4)字符串匹配NOT LIKE ESCAPE :指定匹配模板匹配模板:固定字符串或含通配符的字符串当匹配模板为固定字符串时, 可以用 = 运算符取代 LIKE 谓 词, 用 != 或 运算符取代 NOT LIKE 谓词通配符% (百分号) 代表任意长度(长度可以为0)的字符串 例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb, addgb,ab 等都满足该匹配串_ (下横线) 代表任意单个字符 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb ,

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

6、4 查询姓“欧阳“且全名为三个汉字的学生的姓名。SELECT SnameFROM StudentWHERE Sname LIKE 欧阳_; 例15 查询名字中第2个字为“阳“字的学生的姓名和学号 。SELECT Sname,SnoFROM StudentWHERE Sname LIKE _阳%; 例16 查询所有不姓刘的学生姓名。SELECT Sname,Sno,SsexFROM StudentWHERE Sname NOT LIKE 刘%;3) 使用换码字符将通配符转义为普通字符例17 查询DB_Design课程的课程号和学分。SELECT Cno,CcreditFROM CourseWHE

7、RE Cname LIKE DB_Design ESCAPE ;例18 查询以“DB_“开头,且倒数第3个字符为 i的课 程的详细情况。SELECT *FROM CourseWHERE Cname LIKE DB_%i_ _ ESCAPE ; 查询满足条件的元组 (5) 涉及空值的查询 使用谓词 IS NULL 或 IS NOT NULL “IS NULL” 不能用 “= NULL” 代替例19 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。SELECT Sno,CnoFROM SCWHERE Grade IS NULL;例20 查所有

8、有成绩的学生学号和课程号。SELECT Sno,CnoFROM SCWHERE Grade IS NOT NULL; 查询满足条件的元组 (6) 多重条件查询用逻辑运算符AND和 OR来联结多个查询条 件 AND的优先级高于OR 可以用括号改变优先级例21 查询计算机系年龄在20岁以下的学生姓名。SELECT SnameFROM StudentWHERE Sdept= CS AND Sage=20 AND Sage)计算总和SUM(DISTINCT|ALL ) 计算平均值AVG(DISTINCT|ALL )求最大值 MAX(DISTINCT|ALL )求小大值 MIN(DISTINCT|ALL

9、 )DISTINCT短语:在计算时要取消指定列中的重 复值ALL短语:不取消重复值ALL为缺省值四、使用集函数(续)例24 查询学生总人数。SELECT COUNT(*)FROM Student;例25 查询选修了课程的学生人数。SELECT COUNT(DISTINCT Sno)FROM SC;注:用DISTINCT以避免重复计算学生人数例26 计算1号课程的学生平均成绩。SELECT AVG(Grade)FROM SCWHERE Cno= 1;例27 查询选修1号课程的学生最高分数。SELECT MAX(Grade)FROM SCWHER Cno= 1;五、对查询结果分组使用GROUP B

10、Y子句分组 细化集函数的作用对象 未对查询结果分组,集函数将作用于整个查询结果 对查询结果分组后,集函数将分别作用于每个组 GROUP BY子句的作用对象是查询的中间结果表分组方法:按指定的一列或多列值分组,值相等的 为一组使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数例28 求各个课程号及相应的选课人数。 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;结果Cno COUNT(Sno)1 12 23 2例29 查询选修了3门以上课程的学生学号。SELECT SnoFROM SCGROUP BY SnoHAVING COU

11、NT(*) 3;例30 查询有3门以上课程是90分以上的学生的学号及 (90分以上的)课程数SELECT Sno, COUNT(*)FROM SCWHERE Grade=90GROUP BY SnoHAVING COUNT(*)=3;2 2、SQLSQL的数据查询的数据查询连接查询连接查询 连接查询:同时涉及多个表的查询称为连接查询 用来连接两个表的条件称为连接条件或连接谓词 一般格式:. .比较运算符:=、=、. BETWEEN . AND . 连接字段连接谓词中的列名称为连接字段连接条件中的各连接字段类型必须是可比的,但不必 是相同的例31查询每个学生及其选修课程的情况。SELECT St

12、udent.*,SC.*FROM Student,SCWHERE Student.Sno = SC.Sno;1、连接运算符为 = 的连接操作 . = .任何子句中引用表1和表2中同名属性时,都必须加表名前缀。引用唯一属性名时可以加也可 以省略表名前缀。 例如:假设Student表、SC表分别有下列数据: Student表: SC表: Sno Snam eSse xSageSdep t9500 1李勇 男 20 CS9500 2刘晨 女 19 IS9500 3王敏 女 18 MA9500 4张立 男 19 ISSno CnoGrad e95001 1 9295001 2 8595001 9500

13、2 950033 23889080结果表:Student.Sno Sname Ssex Sage Sdept SC.Sno Cno Grade95001 李勇 男 20 CS 95001 1 92 95001 李勇 男 20 CS 95001 2 85 95001 李勇 男 20 CS 95001 3 88 95002 刘晨 女 19 IS 95002 2 90 95003 王敏 女 18 MA 95003 3 80 2、连接的一种特殊情况,把目标列中重复的属性列去掉。例32 :对例32用自然连接完成。SELECT Student.Sno,Sname,Ssex,Sage, Sdept,Cno,

14、GradeFROM Student,SCWHERE Student.Sno = SC.Sno;3、连接运算符 不是 = 的连接操作.比较运算符:、=、. BETWEEN . AND . 4、复合条件连接 WHERE子句中含多个连接条件时,称为复合条件连接例33查询选修2号课程且成绩在90分以上的所有学生 的学号、姓名SELECT Student.Sno, student.Sname FROM Student, SC WHERE Student.Sno = SC.Sno AND SC.Cno= 2 AND SC.Grade 90;5、多表连接: 例34查询每个学生的学号、姓名、选修的课程名及成绩

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号