资源描述
*,第,3,章 关系数据库标准语言,SQL,1,3.4,数据查询,单表查询,连接查询,嵌套查询,集合查询,Select,语句的一般形式,2,3.4,数据查询,-,嵌套查询,嵌套查询,一个,SELECT-FROM-WHERE,语句称为一个,查询块,将一个查询块嵌套在另一个查询块的,WHERE,子句或,HAVING,短语的条件中的查询称为,嵌套查询,SELECT,Sname,/*,外层查询,/,父查询*,/,FROM Student,WHERE Sno IN,(,SELECT,Sno,/*,内层查询,/,子查询*,/,FROM SC,WHERE Cno=2,);,3,3.4,数据查询,-,嵌套查询,嵌套查询,子查询的限制,不能使用,ORDER BY,子句,层层嵌套方式反映了,SQL,语言的结构化,有些嵌套查询可以用连接运算替代,4,3.4,数据查询,-,嵌套查询,嵌套查询求解方法,不相关子查询,子查询的查询条件不依赖于父查询,由里向外 逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。,5,3.4,数据查询,-,嵌套查询,嵌套查询求解方法,相关子查询:子查询的查询条件依赖于父查询,首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若,WHERE,子句返回值为真,则取此元组放入结果表,然后再取外层表的下一个元组,重复这一过程,直至外层表全部检查完为止,6,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,带有比较运算符的子查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,带有,EXISTS,谓词的子查询,7,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,带有比较运算符的子查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,带有,EXISTS,谓词的子查询,8,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,例,67,查询与“刘晨”在同一个系学习的学生。,此查询要求可以分步来完成,确定“刘晨”所在系,SELECT,Sdept,FROM Student,WHERE,Sname,=,刘晨,;,结果为:,2,9,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,例,67,查询与“刘晨”在同一个系学习的学生。,查找所有在,2,系学习的学生。,SELECT Sno,,,Sname,,,Sdept,FROM Student,WHERE,Sdept,=2,;,2,刘晨,200215122,2,李勇,200215121,Sdept,Sname,Sno,10,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,例,67,查询与“刘晨”在同一个系学习的学生。,将第一步查询嵌入到第二步查询的条件中,SELECT Sno,,,Sname,,,Sdept,FROM Student,WHERE,Sdept,IN,(SELECT,Sdept,FROM Student,WHERE,Sname,=,刘晨,),;,此查询为不相关子查询。,11,3.4,数据查询,-,嵌套查询,用自身连接完成,例,67,查询要求,SELECT,S1,.Sno,,,S1,.Sname,,,S1,.Sdept,FROM Student,S1,,,Student,S2,WHERE,S1,.Sdept=,S2,.Sdept AND,S2,.Sname=,刘晨,;,12,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,例,68,查询选修了课程名为“信息系统”的学生学号和姓名,13,3.4,数据查询,-,嵌套查询,SELECT Sno,,,Sname,FROM Student,WHERE Sno,IN,SELECT,Sno,FROM SC,WHERE Cno,IN,SELECT Cno,FROM Course,WHERE,Cname,=,信息系统,),最后在,Student,关系中取出,Sno,和,Sname,然后在,SC,关系中找出选,修了,3,号课程的学生学号,首先在,Course,关系中找出“信息系统”的课程号,为,3,号,(,);,(,14,3.4,数据查询,-,嵌套查询,用连接查询实现,例,68,SELECT Sno,,,Sname,FROM Student,,,SC,,,Course,WHERE,Student.Sno,=,SC.Sno,AND,SC.Cno,=,Course.Cno,AND,Course.Cname,=,信息系统;,15,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,对,例,51“,求有两门以上不及格课程的同学的学号及其平均成绩”给出正确语句,Select,Sno,AVG(Score,),From SC,Where,Sno,in,(Select,Sno,From SC,Where Score 2),Group by,Sno,;,16,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,重新改写,例,61“,求既学过,1,号课程,又学过,2,号课程的学生的学号”,用嵌套查询实现,Select,Sno,From SC,Where,Cno,=1 and,Sno,in,(Select,Sno,From SC,Cno,=2,);,17,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,例,69,列出没学过李明老师讲授课程的所有同学的姓名,Select,Sname,From Student,Where,Sno,not in,(Select,Sno,From,SC,Prof,Course,Where,Prof.Pname,=,李明,and,Prof.Pno,=,Course.Pno,and,SC.Cno,=,Course.Cno,);,18,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,带有比较运算符的子查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,带有,EXISTS,谓词的子查询,19,3.4,数据查询,-,嵌套查询,带有比较运算符的子查询,当能确切知道内层查询返回,单值,时,可用比较运算符(,,,=,,,=,(SELECT,AVG(Grade,),FROM SC y,WHERE,y.Sno,=,x.Sno,);,此查询为相关子查询,23,3.4,数据查询,-,嵌套查询,带有比较运算符的子查询,可能的执行过程,(1),从外层查询中取出,SC,的一个元组,x,,将元组,x,的,Sno,值(,200215121,)传送给内层查询。,SELECT,AVG(Grade,),FROM SC y,WHERE,y.Sno,=200215121;,24,3.4,数据查询,-,嵌套查询,带有比较运算符的子查询,可能的执行过程,(2),执行内层查询,得到值,88,(近似值),用该值代替内层查询,得到外层查询:,SELECT Sno,,,Cno,FROM SC x,WHERE Grade=88,;,25,3.4,数据查询,-,嵌套查询,带有比较运算符的子查询,可能的执行过程,(3),执行这个查询,得到,(,200215121,,,1,),(,200215121,,,3,),26,3.4,数据查询,-,嵌套查询,带有比较运算符的子查询,可能的执行过程,(4),外层查询取出下一个元组重复做上述,1,至,3,步骤,直到外层的,SC,元组全部处理完毕。结果为,:,(,200215121,,,1,),(,200215121,,,3,),(,200215122,,,2,),27,3.3,数据查询,-,嵌套查询,带有比较运算符的子查询,例,75,找出所有课程都不及格的学生姓名,。,SELECT,Sname,FROM Student,WHERE 60,(SELECT,max(Grade,),FROM SC,WHERE,Sno,=,Sudent.Sno,);,28,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,带有比较运算符的子查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,带有,EXISTS,谓词的子查询,29,3.4,数据查询,-,嵌套查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,谓词语义,ANY,:任意一个值,ALL,:所有值,30,3.4,数据查询,-,嵌套查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,需要配合使用比较运算符,ANY,大于子查询结果中的某个值,ALL,大于子查询结果中的所有值,ANY,小于子查询结果中的某个值,=ANY,大于等于子查询结果中的某个值,=ALL,大于等于子查询结果中的所有值,31,3.4,数据查询,-,嵌套查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,需要配合使用比较运算符,=ANY,小于等于子查询结果中的某个值,=ALL,小于等于子查询结果中的所有值,=ANY,等于子查询结果中的某个值,=ALL,等于子查询结果中的所有值,(通常没有实际意义),!=,(或,),ANY,不等于子查询结果中的某个值,!=,(或,),ALL,不等于子查询结果中的任何一个值,32,3.4,数据查询,-,嵌套查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,例,71,查询其他系中比,1,系某一学生年龄小的学生姓名和年龄,SELECT,Sname,,,Sage,FROM Student,WHERE Sage,ANY,(SELECT Sage,FROM Student,WHERE,Dno,=1),AND,Dno,1,;,33,3.4,数据查询,-,嵌套查询,结果:,执行过程:,1.RDBMS,执行此查询时,首先处理子查询,找出,1,系中所有学生的年龄,构成一个集合,(20,,,19),2.,处理父查询,找所有不是,1,系且年龄小于,20,或,19,的学生,Sname,Sage,王敏,张立,18,19,34,3.4,数据查询,-,嵌套查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,用聚集函数实现,例,71,SELECT,Sname,,,Sage,FROM Student,WHERE Sage,(SELECT,MAX(Sage,),FROM Student,WHERE,Dno,=1),AND,Dno,1 ;,35,3.4,数据查询,-,嵌套查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,例,72,查询其他系中比,1,系,所有,学生年龄都小的学生姓名及年龄。,方法一:用,ALL,谓词,SELECT,Sname,,,Sage,FROM Student,WHERE Sage ALL,(SELECT Sage,FROM Student,WHERE,Dno,=1),AND,Dno,1;,36,3.4,数据查询,-,嵌套查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,例,72,查询其他系中比,1,系,所有,学生年龄都小的学生姓名及年龄。,方法二:用聚集函数,SELECT,Sname,,,Sage,FROM Student,WHERE Sage,(SELECT,MIN(Sage,),FROM,Student,WHERE,Dno,=1),AND,Dno,1;,37,3.4,数据查询,-,嵌套查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,ANY,(或,SOME,),,ALL,谓词与聚集函数、,IN,谓词的等价转换关系,=,或,!=,=,ANY,IN,-,MAX,MIN,=MIN,ALL,-,NOT IN,MIN,MAX,=MAX,38,3.4,数据查询,-,嵌套查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,例,73,找出工资最低的教师姓名,。,SELECT,Pname,FROM Prof,WHERE Sal=all,(SELECT Sal,FROM Prof);,39,3.4,数据查询,-,嵌套查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,例,74,找出,1,号课成绩不是最高的所有学生的学号,。,SELECT,Sno,FROM SC,WHERE,Cno,=1 and,Grade=all,(,select,avg(Grade,),from SC,group by,Sno,),41,3.4,数据查询,-,嵌套查询,带有,IN,谓词的子查询,带有比较运算符的子查询,带有,ANY,(,SOME,)或,ALL,谓词的子查询,带有,EXISTS,谓词的子查询,42,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,EXISTS,谓词,存在量词,带有,EXISTS,谓词的子查询不返回任何数据,只产生逻辑真值“,true”,或逻辑假值“,false”,。,若内层查询结果非空,则外层的,WHERE,子句返回真值,若内层查询结果为空,则外层的,WHERE,子句返回假值,由,EXISTS,引出的子查询,其目标列表达式通常都用*,因为带,EXISTS,的子查询只返回真值或假值,给出列名无实际意义,43,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,NOT EXISTS,谓词,若内层查询结果非空,则外层的,WHERE,子句返回假值,若内层查询结果为空,则外层的,WHERE,子句返回真值,44,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,例,76,查询所有选修了,1,号课程的学生姓名。,思路分析:,本查询涉及,Student,和,SC,关系,在,Student,中依次取每个元组的,Sno,值,用此值去检查,SC,关系,若,SC,中存在这样的元组,其,Sno,值等于此,Student.Sno,值,并且其,Cno=1,,则取此,Student.Sname,送入结果关系,45,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,例,76,查询所有选修了,1,号课程的学生姓名。,用嵌套查询,SELECT,Sname,FROM,Student,WHERE EXISTS,(SELECT*,FROM SC,WHERE Sno=,Student.Sno,AND Cno=1),;,46,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,例,76,查询所有选修了,1,号课程的学生姓名。,用连接运算,SELECT,Sname,FROM Student,SC,WHERE,Student.Sno,=,SC.Sno,AND,SC.Cno,=1;,47,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,例,77,查询没有选修,1,号课程的学生姓名。,SELECT,Sname,FROM,Student,WHERE NOT EXISTS,(SELECT*,FROM SC,WHERE Sno=,Student,.Sno,AND Cno=1),;,48,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,不同形式的查询间的替换,一些带,EXISTS,或,NOT EXISTS,谓词的子查询不能被其他形式的子查询等价替换,所有带,IN,谓词、比较运算符、,ANY,和,ALL,谓词的子查询都能用带,EXISTS,谓词的子查询等价替换,49,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,例:,例,67,查询与“刘晨”在同一个系学习的学生。,可以用带,EXISTS,谓词的子查询替换:,SELECT Sno,,,Sname,,,Sdept,FROM Student S1,WHERE,EXISTS,(SELECT*,FROM Student S2,WHERE S2.Dno=S1.Dno AND,S2.Sname=,刘晨,),;,用,EXISTS,谓词代替,IN,谓词,50,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,用,EXISTS/NOT EXISTS,实现全称量词,(,难点,),SQL,语言中没有全称量词,(,For all,),可以把带有全称量词的谓词转换为等价的带有存在量词的谓词:,(,x)P,(,x(,P),51,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,例,78,查询选修了全部课程的学生姓名。,SELECT,Sname,FROM Student,WHERE NOT EXISTS,(,SELECT*,FROM Course,WHERE NOT EXISTS,(SELECT*,FROM SC,WHERE Sno=,Student.Sno,AND Cno=,Course.Cno,);,52,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,用,EXISTS/NOT EXISTS,实现逻辑蕴函,(,难点,),SQL,语言中没有蕴函,(Implication),逻辑运算,可以利用谓词演算将逻辑蕴函谓词等价转换为:,p,q,pq,53,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,例,79,查询至少选修了学生,200215122,选修的全部课程的学生号码。,解题思路:,用逻辑蕴函表达:查询学号为,x,的学生,对所有的课程,y,,只要,200215122,学生选修了课程,y,,则,x,也选修了,y,。,54,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,例,79,查询至少选修了学生,200215122,选修的全部课程的学生号码。,解题思路:,形式化表示:,用,P,表示谓词“学生,200215122,选修了课程,y”,用,q,表示谓词“学生,x,选修了课程,y”,则上述查询为,:(,y)p,q,55,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,例,79,查询至少选修了学生,200215122,选修的全部课程的学生号码。,等价变换:,(,y)p,q ,(,y(,(p,q),(,y(,(,p q),y(p,q,),变换后语义:不存在这样的课程,y,,学生,200215122,选修了,y,,而学生,x,没有选。,56,3.4,数据查询,-,嵌套查询,用,NOT EXISTS,谓词表示:,SELECT DISTINCT Sno,FROM SC,SCX,WHERE NOT EXISTS,(SELECT*,FROM SC,SCY,WHERE,SCY.Sno,=200215122 AND,NOT EXISTS,(SELECT*,FROM SC SCZ,WHERE,SCZ.Sno,=,SCX,.Sno,AND,SCZ.Cno,=,SCY.,Cno,),;,57,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,例,80,已知:,SPJ(Sno,Pno,Jno,Qty),其中,Sno,供应商号,,Pno,零件号,,Jno,工程号,,Qty,数量,列出至少用了供应商,S1,供应的全部零件的工程号。,58,3.4,数据查询,-,嵌套查询,带有,EXISTS,谓词的子查询,Select DISTINCT,Jno,From SPJ SPJ1,Where not exists,(Select *From SPJ SPJ2,Where SPJ2.Sno=S1 and not exists,(Select *From SPJ SPJ3,Where SPJ3.Pno=SPJ2.Pno,and SPJ3.Jno=SPJ1.Jno);,59,3.4,数据查询,单表查询,连接查询,嵌套查询,集合查询,Select,语句的一般形式,60,3.4,数据查询,-,集合查询,集合操作的种类,并操作,UNION,交操作,INTERSECT,差操作,EXCEPT,参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同,61,3.4,数据查询,-,集合查询,例,81,查询,1,系的学生及年龄不大于,19,岁的学生,方法一:,SELECT*,FROM Student,WHERE,Dno,=1,UNION,SELECT*,FROM Student,WHERE Sage=19,;,62,3.4,数据查询,-,集合查询,UNION,:将多个查询结果合并起来时,系统自动,去掉,重复元组,UNION ALL,:将多个查询结果合并起来时,,保留,重复元组,63,3.4,数据查询,-,集合查询,例,81,查询,1,系的学生及年龄不大于,19,岁的学生,方法二:,SELECT DISTINCT *,FROM Student,WHERE,Dno,=1 OR Sage=19,;,64,3.4,数据查询,-,集合查询,例,82,查询选修了课程,1,或者选修了课程,2,的学生。,SELECT Sno,FROM SC,WHERE Cno=1,UNION,SELECT Sno,FROM SC,WHERE Cno=2,;,65,3.4,数据查询,-,集合查询,例,83,查询,1,系的学生与年龄不大于,19,岁的学生的交集,SELECT*,FROM Student,WHERE,Dno,=1,INTERSECT,SELECT*,FROM Student,WHERE Sage=19,66,3.4,数据查询,-,集合查询,例,83,查询,1,系的学生与年龄不大于,19,岁的学生的交集,实际上就是查询,1,系中年龄不大于,19,岁的学生。,SELECT*,FROM Student,WHERE,Dno,=1 AND Sage=19,;,67,3.4,数据查询,-,集合查询,例,84,查询既选修了课程,1,又选修了课程,2,的学生。,选修课程,1,的学生集合与选修课程,2,的学生集合的交集,SELECT Sno,FROM SC,WHERE Cno=1,INTERSECT,SELECT Sno,FROM SC,WHERE Cno=2,;,68,3.4,数据查询,-,集合查询,例,84,查询选修课程,1,的学生集合与选修课程,2,的学生集合的交集,实际上是查询既选修了课程,1,又选修了课程,2,的学生,SELECT Sno,FROM SC,WHERE Cno=1 AND Sno IN,(SELECT,Sno,FROM SC,WHERE,Cno,=2),;,69,3.4,数据查询,-,集合查询,例,85,查询,1,系的学生与年龄不大于,19,岁的学生的差集。,SELECT*,FROM Student,WHERE,Dno,=1,EXCEPT,SELECT *,FROM Student,WHERE Sage 19,;,71,3.4,数据查询,-,集合查询,例,86,求选修了,1,或,2,号而没有选,3,号课程的学生号。,(select,Sno,from SC,where,Cno,=1 or,Cno,=2),except,(select,Sno,from SC,where,Cno,=003),72,3.4,数据查询,单表查询,连接查询,嵌套查询,集合查询,Select,语句的一般形式,73,3.4,数据查询,-SELECT,语句的一般格式,SELECT,ALL|DISTINCT,别名,,,别名,FROM,别名,,,别名,WHERE,GROUP,BY,HAVING,ORDER,BY,ASC|DESC,74,3.4,数据查询,-SELECT,语句的一般格式,目标列表达式格式,.*,COUNT (DISTINCT|ALL*),.,,,.,其中,可以是由,属性列,、作用于属性列的,函数,和,常量,的任意算术运算(,+,,,-,,*,,/,)组成的运算公式。,75,3.4,数据查询,-SELECT,语句的一般格式,聚集函数的一般格式为,COUNT,SUM,AVG (DISTINCT|ALL ),MAX,MIN,76,3.4,数据查询,-SELECT,语句的一般格式,WHERE,子句的条件表达式有以下可选格式,(1),ANY|ALL(SELECT,语句,),77,3.4,数据查询,-SELECT,语句的一般格式,WHERE,子句的条件表达式有以下可选格式,(2),NOT BETWEEN,AND ,(SELECT,语句,)(SELECT,语句,),78,3.4,数据查询,-SELECT,语句的一般格式,WHERE,子句的条件表达式有以下可选格式,(,3,),(,,,),NOT IN,(SELECT,语句,),(4)NOT LIKE,(5)IS NOT NULL,(6)NOT EXISTS(SELECT,语句,),79,3.4,数据查询,-SELECT,语句的一般格式,WHERE,子句的条件表达式有以下可选格式,(7),AND,AND,OR,OR,80,本章内容提要,3.1 SQL,概述,3.2,学生,-,课程数据库,3.3,数据定义,3.4,数据查询,3.5,数据更新,3.6,视图,3.7 SQL Server,及其交互式环境简介,81,3.5,数据更新,插入数据,修改数据,删除数据,82,3.5,数据更新,插入数据,修改数据,删除数据,83,3.5,数据更新,-,插入数据,插入数据的方式,插入元组,插入子查询结果,可以一次插入多个元组,84,3.5,数据更新,-,插入数据,插入元组,语句格式,INSERT,INTO (,,,),VALUES(,,,),功能,将新元组插入指定表中,85,3.5,数据更新,-,插入数据,插入元组,INTO,子句,属性列的顺序可与表定义中的顺序不一致,没有指定属性列,指定部分属性列,VALUES,子句,提供的值必须与,INTO,子句匹配,值的个数,值的类型,86,3.5,数据更新,-,插入数据,插入元组,例,1,将一个新学生元组(学号:,200215128,;姓名:陈冬;性别:男;所在系:,1,;年龄:,18,岁)插入到,Student,表中。,INSERT,INTO Student(Sno,,,Sname,,,Ssex,,,Dno,,,Sage),VALUES(200215128,,,陈冬,,,男,,,1,,,18),;,87,3.5,数据更新,-,插入数据,插入元组,例,2,将学生张成民的信息插入到,Student,表中,INSERT,INTO Student,VALUES(200215126,,张成民,,男,,18,,,2);,88,3.5,数据更新,-,插入数据,插入元组,例,3,插入一条选课记录,(200215128,,,1),。,INSERT,INTO,SC(Sno,,,Cno),VALUES(200215128,,,1),;,RDBMS,将在新插入记录的,Grade,列上自动地赋空值。,或者:,INSERT,INTO SC,VALUES(200215128,,,1,,,NULL),;,89,3.5,数据更新,-,插入数据,插入子结果查询,语句格式,INSERT,INTO (,,,),子查询;,功能,将子查询结果插入指定表中,90,3.5,数据更新,-,插入数据,插入子结果查询,INTO,子句,与插入元组类似,子查询,SELECT,子句目标列必须与,INTO,子句匹配,值的个数,值的类型,91,3.5,数据更新,-,插入数据,插入子结果查询,例,4,对每一个系,求学生的平均年龄,并把结果存入数据库。,第一步:建表,CREATE TABLE,Dept_age,(,Dno,CHAR(15)/*,系号,*/,Avg_age,SMALLINT),;,/*,学生平均年龄*,/,92,3.5,数据更新,-,插入数据,插入子结果查询,例,4,对每一个系,求学生的平均年龄,并把结果存入数据库。,第二步:插入数据,INSERT,INTO,Dept_age(Dno,,,Avg_age,),SELECT,Dno,,,AVG(Sage,),FROM Student,GROUP BY,Dno,;,93,3.5,数据更新,-,插入数据,插入子结果查询,例,5,将平均成绩大于90的学生加入到,EXCELLENT,中,。,EXCELLENT,表结构为,EXCELLENT(Sno,avgScore,),,其中,avgScore,为平均成绩,insert into EXCELLENT(,Sno,avgScore,),select,Sno,avg(avgScore,),from SC,group by(,Sno,),having,avg(avgScore,)90,94,3.5,数据更新,-,插入数据,插入子结果查询,RDBMS,在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则,实体完整性,参照完整性,用户定义的完整性,NOT NULL,约束,UNIQUE,约束,值域约束,95,3.5,数据更新,插入数据,修改数据,删除数据,96,3.5,数据更新,-,修改数据,语句格式,UPDATE ,SET =,,,=,WHERE,;,功能,修改指定表中满足,WHERE,子句条件的元组的指定列值,97,3.5,数据更新,-,修改数据,SET,子句,要修改的列,修改后取值,WHERE,子句,指定要修改的元组,缺省表示要修改表中的所有元组,98,3.5,数据更新,-,修改数据,三种修改方式,修改某一个元组的值,修改多个元组的值,带子查询的修改语句,99,3.5,数据更新,-,修改数据,修改某一元组的值,例,6,将学生,200215121,的年龄改为,22,岁,UPDATE Student,SET Sage=22,WHERE Sno=200215121,;,100,3.5,数据更新,-,修改数据,修改多个元组的值,例,7,将所有教师工资上调,5%,Update Prof,Set Sal =,Sal,*1.05 ;,101,3.5,数据更新,-,修改数据,修改多个元组的值,例,8,将所有学生的年龄增加,1,岁,UPDATE Student,SET Sage=Sage+1,;,102,3.5,数据更新,-,修改数据,带子查询的修改语句,例,9,将,1,系全体学生的成绩置零。,UPDATE SC,SET Grade=0,WHERE 1=,(SELETE,Dno,FROM Student,WHERE,Student.Sno,=,SC.Sno,),;,103,3.5,数据更新,-,修改数据,带子查询的修改语句,例,10,将所有计算机系的教师工资上调,10%,。,Update Prof,Set Sal =,Sal,*1.1,Where,Dno,in,(Select,Dno,From Dept,Where,Dname,=,计算机,);,104,3.5,数据更新,-,修改数据,带子查询的修改语句,例,11,当某同学,1,号课的成绩低于该课程平均成绩时,将该同学该门课成绩提高,5%,。,Update SC,Set Grade =,Grade,*1.05,Where,Cno,=1 and Grade,(Select,AVG(Grade,),From SC,Where,Cno,=1);,105,3.5,数据更新,-,修改数据,带子查询的修改语句,例,12,将,1,系系主任的工资改为该系的平均工资。,update Prof,set Sal=(select,avg(Sal,),from Prof,where,Dno,=1),where,Pno,=(select Dean,from Dept,where,Dno,=1),106,3.5,数据更新,-,修改数据,RDBMS,在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则,107,3.5,数据更新,插入数据,修改数据,删除数据,108,3.5,数据更新,-,删除数据,语句格式,DELETE,FROM ,WHERE,;,功能,删除指定表中满足,WHERE,子句条件的元组,109,3.5,数据更新,-,删除数据,语句格式,DELETE,FROM ,WHERE,;,WHERE,子句,指定要删除的元组,缺省表示要删除表中的全部元组,表的定义仍在字典中,110,3.5,数据更新,-,删除数据,三种删除方式,删除某一个元组的值,删除多个元组的值,带子查询的删除语句,111,3.5,数据更新,-,删除数据,删除某一元组的值,例,13,删除学号为,200215128,的学生记录。,DELETE,FROM Student,WHERE Sno=200215128,;,112,3.5,数据更新,-,删除数据,删除多个元组的值,例,14,删除,98030101,号同学所选的所有课程。,DELETE,FROM SC,WHERE Sno=98030101,;,113,3.5,数据更新,-,删除数据,删除多个元组的值,例,15,删除所有的学生选课记录。,DELETE,FROM SC,;,114,3.5,数据更新,-,删除数据,带子查询的删除语句,例,16,删除,1,系所有学生的选课记录。,DELETE,FROM SC,WHERE 1=,(SELETE,Dno,FROM Student,WHERE,Student.Sno,=,SC.Sno,),;,115,3.5,数据更新,-,删除数据,带子查询的删除语句,例,17,删除有四门不及格课程的所有同学。,Delete,From Student,Where,Sno,in,(Select,Sno,From SC,Where Grade=4);,116,3.5,数据更新,-,删除数据,带子查询的删除语句,例,18,删除低于平均工资的老师记录。,delete,from Prof,where Sal ,(select,avg(Sal,),from Prof),
展开阅读全文