收藏 分享(赏)

数据库标准语言sql.ppt

上传人:无敌 文档编号:1433755 上传时间:2018-07-17 格式:PPT 页数:64 大小:648KB
下载 相关 举报
数据库标准语言sql.ppt_第1页
第1页 / 共64页
数据库标准语言sql.ppt_第2页
第2页 / 共64页
数据库标准语言sql.ppt_第3页
第3页 / 共64页
数据库标准语言sql.ppt_第4页
第4页 / 共64页
数据库标准语言sql.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、第三章 数据库标准语言SQL,Y,SQL数据查询,基本结构:select A1 , A2 , , Anfrom R1 , R2 , , Rmwhere P,A1 , A2 , , An(p(R1 R2 Rm),语句格式,SELECT ALL|DISTINCT *|,FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ;,学生-课程数据库,学生表:Student(Sno,Sname,Ssex,Sage, Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:SC(Sno,Cno,Grade),Select语句的含义,

2、查询操作的对象是关系,结果还是一个关系,是一个结果集,是一个动态数据集对应于关系代数的投影()运算,用以列出查询结果集中的期望属性.Select Sno, Sname From Student,Select子句 *与属性列表,星号 * 表示所有属性星号 * :按关系模式中属性的顺序排列,并具有一定的逻辑数据独立性显式列出属性名:按用户顺序排列Select * From Student等价于:Select Sno, Sname,Ssex,Sage,Sdept From Student,Select子句更名,为结果集中的某个属性改名使结果集更具可读性Select sno as stu_no,cno

3、 as course_no, gradeFrom SCSelect sno, sname, year of birth: Birth, 2011 - sage as birthdayFrom Student,Select子句重复元组,Select 子句的缺省情况是保留重复元组( ALL ),可用 Distinct 去除重复元组Select Distinct sdept From StudentSelect All sdept From Student去除重复元组需要临时表的支持,Where 子句,where子句对应与关系代数中的选择()查询满足指定条件的元组可以通过Where子句来实现使whe

4、re子句中的逻辑表达式返回True值的元组,是符合要求的元组,将被选择出来,Where 子句运算符,比较:、=、=、;not + 上述比较运算符确定范围: Between A and B、Not Between A and B确定集合:IN、NOT IN字符匹配:LIKE,NOT LIKE空值:IS NULL、IS NOT NULL多重条件:AND、OR、NOT,Where 子句比较,例,查询所有年龄在20岁以下的学生姓名及其年龄。SELECT Sname,Sage FROM Student WHERE Sage =70 AND GRADE80,练习,检索选修1号或2号课程,且成绩高于80分的

5、学生号,课程号和分数,From 子句,From子句对应与关系代数中的笛卡儿积()列出将被扫描的关系(表)例:列出所有学生的学号、姓名、课号、成绩。Select Student.sno,sname,SC.cno,gradeFrom Student,SCWhere Student.sno = SC.sno,From 子句元组变量,为 From 子句中的关系定义元组变量方便关系名的引用在同一关系的笛卡儿积中进行辨别例:列出与09001同岁的同学的学号,姓名,年龄SelectT.sno,T.sname,T.sageFromStudent as T,Student as SWhereS.sno = 09

6、001 ANDT.sage = S.sage,Order By子句,指定结果集中元组的排列次序ASC(缺省)、DESC、未选中的属性例:列出CS系中的男生的学号、姓名、年龄,并按年龄进行排列(升序)Select sno, sname,sageFrom StudentWhere sdept = CSOrder By sage ASC,集函数,计数COUNT(DISTINCT|ALL *)COUNT(DISTINCT|ALL )计算总和SUM(DISTINCT|ALL ) 计算平均值AVG(DISTINCT|ALL )求最大值MAX(DISTINCT|ALL )求最小值MIN(DISTINCT|A

7、LL ),例, 查询学生总人数。 SELECT COUNT(*) FROM Student;例, 查询选修了课程的学生人数。 SELECT COUNT(DISTINCT Sno) FROM SC;,例, 计算1号课程的学生总分和平均成绩。SELECT Sum(Grade) 总分, Avg(Grade) 平均分 FROM SC WHERE Cno= 1;例, 查询选修3号课程的学生最高分数与最低分的差。 SELECT MAX(Grade)-MIN(Grade) FROM SC WHERE Cno= 3;,Group by子句,使用GROUP BY子句对查询结果分组 细化集函数的作用对象 未对查询

8、结果分组,集函数将作用于整个查询结果 对查询结果分组后,集函数将分别作用于每个组,例, 求各个课程号及相应的选课人数。 SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno;,注意:使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数,Group by子句,HAVING短语,使用HAVING短语设定筛选条件例, 查询选修了3门以上课程的学生学号,及选修的课程数。 SELECT Sno, COUNT(*) FROM SC GROUP BY Sno HAVING COUNT(*) 3;,HAVING短语,例, 查询有2门以上课程是90分

9、以上的学生的学号及(90分以上的)课程数 SELECT Sno, COUNT(*) FROM SC WHERE Grade=90 GROUP BY Sno HAVING COUNT(*)=2;,HAVING短语与WHERE子句的区别:,作用对象不同 WHERE子句作用于基表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。,练习,求各门课程的平均分,最高分,最低分及各门课程的选修人数.SELECT CNO as 课号, AVG(GRADE) as 平均分, MAX(GRADE) as 最高分, MIN(GRADE) as 最低分, COUNT(SNO) as 人数

10、FROM SCGROUP BY CNO;,连接查询,同时涉及多个表的查询称为连接查询用来连接两个表的条件称为连接条件或连接谓词 一般格式:. . 比较运算符:=、=、=80 and y.grade=80,连接查询,嵌套查询,在一个SELECT-FROM-WHERE语句的WHERE子句中存在另一个SELECT语句,称作嵌套查询。,SELECT Sname-外层查询/父查询 FROM Student WHERE Sno IN (SELECT Sno -内层查询/子查询 FROM SC WHERE Cno= 2);,嵌套查询求解方法,不相关子查询:子查询的查询条件不依赖于父查询是由里向外逐层处理。即

11、每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件相关子查询:子查询的查询条件依赖于父查询首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表;然后再取外层表的下一个元组;重复这一过程,直至外层表全部检查完为止。 。,嵌套查询,1.子查询的结果返回的值为单值。 WHERE子句中的子查询由 比较符 ,=, 引导例,找出年龄小于李芳的学生姓名,SELECT SNAME FROM Student WHERE SAGE =, , =, =, , =, =ALL (SELECT GRADE FROM SC WH

12、ERE CNO=2),嵌套查询,ANY和ALL谓词有时可以用集函数实现ANY与ALL与集函数的对应关系,嵌套查询,例 :用集函数实现any例子,Sage q pq(y) p-q (y(p-q ) (y (pq ) y (p q ),逻辑蕴涵表示:查询学号为x的学生,对所有的课程y,只要09002学生选修了课程y,则x也选修了y。,例:查询至少选修了学生09002选修的全部课程的学生学号 .,SELECT DISTINCT SNO FROM SC X WHERE NOT EXISTS (SELECT * FROM SC Y WHERE Y.SNO=09002 AND NOT EXISTS (SE

13、LECT * FROM SC Z WHERE Z.SNO=X.SNO AND Z.CNO=Y.CNO);,SELECT SNAME FROM Student WHERE 2 NOT IN (SELECT CNO FROM SC WHERE SNO=Student.SNO),嵌套查询,练习:找出没有学习2号课程的学生姓名.,select sname from student,scwhere student.sno=sc.sno and o!=2,错误,集合查询,SQL可以使两个查询块作关系代数并,交,差的操作对象,要求操作对象为并兼容的. 并操作(UNION)交操作(INTERSECT)差操作(

14、MINUS),例:查询计算机科学系的学生及年龄不大于19岁的学生。 SELECT * FROM Student WHERE Sdept= CS UNION SELECT * FROM Student WHERE Sage=19,SELECT DISTINCT * FROM Student WHERE Sdept= CS OR Sage80;,例:查找所有女生或成绩高于80分的学生号,例 : 查询选修课程1的学生集合与选修课程2的学生集合的交集,(select SNOfrom SCwhere CNO = 1 )intersect(select SNO from SC where CNO = 2 ),例:查找没有选2号课程的学生的学号,SELECT distinct SNO FROM SC MINUS SELECT SNO FROM SC WHERE CNO=2;,SELECT distinct SNO FROM SC WHERE CNO!=2;,错误,语句格式,SELECT ALL|DISTINCT *|,FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ;,

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

当前位置:首页 > 规范标准 > 国内外标准规范

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报