SQL的数据查询.ppt

上传人:s****8 文档编号:82793882 上传时间:2023-03-26 格式:PPT 页数:105 大小:421KB
返回 下载 相关 举报
SQL的数据查询.ppt_第1页
第1页 / 共105页
SQL的数据查询.ppt_第2页
第2页 / 共105页
点击查看更多>>
资源描述

《SQL的数据查询.ppt》由会员分享,可在线阅读,更多相关《SQL的数据查询.ppt(105页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第三章 SQL的数据查询3.3 SQL的数据查询n查询即检索操作,是对已经存在的基本表及视图进行数据检索,不改变数据本身。3.3.1 SELECT语句的基本语法n(1):SELECT-FROM-WHERE句型:n组成的查询块,一般形式:SELECT SELECT,(指出要检索的数据项指出要检索的数据项)FROM FROM,(给出要操作的关系表名给出要操作的关系表名)WHERE WHERE (给出查询结果应满足的条件给出查询结果应满足的条件)n等价于:等价于:A1,A2,An(p(r1 r2 rm)(1)、SELECT-FROM-WHERE句型nSelect语句的含义n根据 Select 子句中

2、的属性列表,对上述结果作投影()操作n对 From 子句中的各关系,作笛卡儿积()n对 Where 子句中的逻辑表达式进行选择()运算,找出符合条件的元组n结果集n查询操作的对象是关系,结果还是一个关系,是一个结果集,是一个动态数据集1、SELECT子句n说明:n对应于关系代数的投影运算,用以列出查询结果集中的期望属性n目标列形式:可以为列名,*,算术表达式,聚合函数。(1)、“*”:表示“所有的属性”。示例:检索学生的姓名,年龄和性别 SELECT S#,AGE,SEX FROM S;(SELECT*FROM S;)1、SELECT子句n 示例:给出所有老师的姓名及税后工资额。select

3、TNAME,SAL 0.95from TEACHER关系定义为:TEACHER(TNO,TNAME,SAL,EDEPT)(2)、select中有含,的算术表达式2、from子句n说明 FROM子句列出查询的对象表。当目标列取自多个表时,在不混淆的情况下可以不用显式指明来自哪个关系,否则,要指出关系名。示例:检索TOM同学所学课程的课程号及成绩select SNAME,CNO,GRADE,S.SNO from S,SCwhere S.SNO=SC.SNO and SNAME=TOM3 3、WHEREWHERE子句子句n说明:说明:查询满足指定条件的元组可以通过查询满足指定条件的元组可以通过WHE

4、REWHERE子子句实现。句实现。WHEREWHERE子句常用的查询条件如表所示。子句常用的查询条件如表所示。n常用的查询条件常用的查询条件查询条件查询条件 比较比较确定范围确定范围确定集合确定集合自符匹配自符匹配 空值空值多重条件多重条件谓词谓词=,,=,=,!=,!,NOT+上述比较运算上述比较运算BETWEEN AND BETWEEN ANDIN,NOT INLIKE,NOT LIKEIS NULL,IS NOT NULLAND,OR3 3、WHEREWHERE子句子句(1)(1)比较比较示例示例1 1:查计算机系全体学生的名单:查计算机系全体学生的名单 SELECT SELECT sn

5、ame sname FROM S WHERE FROM S WHERE dept=JSJdept=JSJ示例示例2 2:查所有年龄在查所有年龄在20岁以下的学生姓名及其年龄岁以下的学生姓名及其年龄nSELECTSELECT sname sname,age FROM S WHERE,age FROM S WHERE age 20age=20NOT age=203 3、WHEREWHERE子句子句(2)确定范围查询年龄在18至23岁之间的学生的姓名、系别、和年龄 SELECTSELECT sname sname,dept,age ,dept,age FROM S WHERE age FROM S

6、WHERE age BETWEEN 18 AND 23BETWEEN 18 AND 23与与BETWEEN.AND.BETWEEN.AND.相对的谓词是相对的谓词是NOT BETWEEN.AND.NOT BETWEEN.AND.是大于还是大于等于?n(3)确定集合n查物理系(WL)、数学系(XS)和计算机系(JSJ)的学生的姓名和性别nSELECT sname,sex,dept FROM S WHERE dept IN(WL,SX,JSJ)3 3、WHEREWHERE子句子句n与与ININ相对的谓词是相对的谓词是NOT INNOT IN,用于查用于查找属性值不属于指定集合的元组。找属性值不属于

7、指定集合的元组。3 3、WHEREWHERE子句子句(4)多重条件查询 逻辑运算符AND和OR可用来联结多个查询条件。如果这两个运算符同时出现在同一个WHERE条件子句中,则AND的优先级高于OR,但用户可以用括号改变优先级。查询的类型n1、单表查询n2、连接查询n3、嵌套查询查询的类型连接查询n在查询中,同时涉及两个或两个以上的表,要根据表中数据的情况作连接。n示例:查询学习课程名为MATHS的学生学号和姓名。nselect s.sno,sname from s,sc,c where s.sno=sc.sno and o=o and cname=MATHS查询的类型嵌套查询n在一个selec

8、t语句的where子句中,又出现了另一个select语句,这种查询称为嵌套查询。子查询中还可以嵌入子查询。n示例:检索既学习了C1又学习了C2课程的学生的学号。nselectselect snosno from sc from sc where where cnocno=C1 and=C1 and sno sno in in (selectselect sno sno from sc where from sc where cno cno=C2=C2)查询的类型嵌套查询n无论单层嵌套还是多层嵌套查询,执行的过程都是由里向外,即先做最内层的查询,求得一个结果,然后根据这个结果执行上一层查询,由里

9、向外,直到求得最外层的查询结果。考虑:嵌套查询的内层查询执行几次?3.3.3 SELECT语句中的限定1、重复元组的处理n语法约束:缺省为保留重复元组,也可用关键字all显式指明。若要去掉重复元组,可用关键字distinct或unique指明。n示例:找出所有选修了课程的学生。select distinct sno from SC2、条件表达式中的算术比较操作n示例:检索课程号为C2且成绩高于85分以上的学生学号和成绩 SELECT sno,grade FROM SC WHERE cno=C2 AND grade852、条件表达式中的算术比较操作 运算符 BETWEENAND可以选择属性列在一

10、定值范围内的行n示例n 检索成绩在70分至80分之间的学生学号,课程号和成绩SELECT*FROM SCWHERE GRADE BETWEEN 70 AND 80;3、列和基本表的改名操作n格式old_name as new_name 为关系和属性重新命名,可出现在select和from子句中。n为结果集中的某个属性改名为结果集中的某个属性改名n使结果集更具可读性使结果集更具可读性n1、属性更名 例1:Select sno as 学号学号,cno as 课程号课程号,grade as 成绩成绩From SC例2:Select sno,sname,2003-age as birthdayFrom

11、 S3、列和基本表的改名操作3、列和基本表的改名操作n2.关系更名 示例:检索至少选修课程号为C2和C4的学生学号S(SNO,SNAME,AGE,SEX)SC(SNO,CNO,GRADE)C(CNO,CNAME,TEACHER)SELECT X.SNO FROM SC AS X,SC AS Y WHERE X.SNO=Y.SNO AND X.CNO=C2 AND Y.CNO=C4 4、字符串的匹配操作n命令格式nlike:找出满足给定匹配条件的字符串。格式:列名 not like “字符串”n匹配规则:“%”:匹配零个或多个字符。“”:匹配任意单个字符。escape:定义转义字符,以去掉特殊字

12、符的特定含义,使其被作为普通字符看待。如escape“”,是定义了 作为转义字符,则可用%去匹配%,用去匹配,用 去匹配 。n大小写敏感大小写敏感4、字符串的匹配操作示例:列出姓刘的学生的学号、姓名。Select sno,snameFrom StudentWhere sname LIKE 刘%SnameSnameSnoSnoSageSageSsexSsexSdeptSdept刘勇刘勇95001950012222男男CsCs张新张新95002950022121女女CsCs刘晨刘晨95003950032222女女IfIf李立李立95004950042323男男ififSname SnoSageSs

13、exSdept刘勇刘勇9500122男男Cs刘晨刘晨9500322女女If4、字符串的匹配操作n示例n例:列出张姓且单名的学生的学号、姓名。Select sno,snameFrom SWhere sname LIKE 张_ _4、字符串的匹配操作n转义符:escape 例:列出课程名称中带有_的课号及课名。Select cno,cnameFrom CWhere cname LIKE%_%escape n列出名称中含有4个字符以上,且倒数第3个字符是d,倒数第2个字符是_的课程的所有信息。select *from c where CNAME like “%d ”4、字符串的匹配操作n查以”DB_

14、”开头,且倒数第三个字符为i的课程的详细情况nSELECT*FROM C WHERE Cname LIKE DB_%i_ ESCAPE;n注意这里的匹配字符串DB_%i_。第一个_前面有换码字符,所以它被转义为普通的_字符。而%、第二个_和第三个_前面均没有换码字符,所以它们仍作为通配符。其执行结果为:Cno Cname CcreditCno Cname Ccredit -8 DB_Design 4 8 DB_Design 4 10 DB_ 10 DB_Programing Programing 2 2 13 DB_DBMS Design 4 13 DB_DBMS Design 4聚合函数聚合

15、函数 为了进一步方便用户,增强检索功能,SQL提供了许多聚合函数,主要包括:COUNT(DISTINCT|ALL*)统计元组个数 COUNT(DISTINCT|ALL)统计一列中值的个数 SUM(DISTINCT|ALL)计算一列值的总和(此列必须是数值型)AVG(DISTINCT|ALL)计算一列值的平均值(此列必须是数值型)MAX(DISTINCT|ALL)求一列值中的最大值 MIN(DISTINCT|ALL)求一列值中的最小值 聚合函数聚合函数n1、求男学生的总人数和平均年龄SELECT COUNT(*),AVG(AGE)FROM S WHERE SEX=M聚合函数聚合函数n举例:统计选

16、修了课程的学生人数SELECT COUNT(DISTINCT S#)FROM SCSELECT count(grade)as 成绩人数,count(*)as 总人数,avg(grade)as 平均分数 from sc举例:如果有一个grade值为空下面的结果相同吗?1、COUNT(*)对行的计数,不消除重复行 2、只有count(*)将空值null,记入结果。n示例n列出老师的最高、最低、平均工资。select DNO,max(SAL),min(SAL),avg(SAL)from TEACHER nNull在聚集函数中的角色nCount 为 0n其余均忽略 NullnSum:不将其计入nAvg

17、:具有 Null 的元组不参与nMax/Min:不参与n举例:nSELECT count(sno),count(sname)from s聚合函数聚合函数聚合函数聚合函数nGroup By GROUP BY子句可以将查询结果表的各行按一列或多列取值相等的原则进行分组。对查询结果分组的目的是为了细化集合函数的作用对象。如果未对查询结果分组,集合函数将作用于整个查询结果,即整个查询结果只有一个函数值。如果用GROUP分了组,集合函数将作用于每一个组,即每一组都有一个函数值。聚合函数聚合函数GROUP BY举例:查询各个课程号以及相应的选课人数 该SELECT语句对SC表按Cno的取值进行分组,所有具

18、有相同Cno值的元组为一组,然后对每一组作用集函数COUNT以求得该组的学生人数。查询为:SELECT Cno,COUNT(Sno)FROM SCGROUP BY CnoSELECTSELECT Cno Cno,COUNT(,COUNT(SnoSno)FROM SCFROM SCGROUP BYGROUP BY Cno Cno;结果结果聚合函数聚合函数nHavingn可以针对聚合函数的结果值进行筛选,它是作用于分组计算的结果集n跟在Group By子句的后面,有GROUP BY 才有HAVING例:列出选修两门(含)以上课程的学生的学号。SELECT sno FROM SC GROUP BY

19、sno HAVING COUNT(cno)=2聚合函数例:列出具有两门(含)以上不及格的学生的学号、不及格的课目数。Select sno,count(cno)From SCWhere grade=2只选出有不及格的学生n列出及格的学生的平均成绩。select SNO,avg(GRADE)from SC group by SNO having min(GRADE)=60聚合函数聚合函数聚合函数聚合函数nHaving 与 Where的区别nWhere 决定哪些元组被选择参加运算,作用于关系中的元组nHaving 决定哪些分组符合要求,作用于分组n聚合函数的条件关系必须用Having,Where中不

20、应出现聚集函数元组显示顺序n命令 order by 列名 asc|descn示例n检索选修C1的学生学号和成绩,并按成绩的降序和学号的升序排列 SELECT Sno,GRADE FROM SC WHERE Cno=C1 ORDER BY GRADE DESC,Sno;ORDER BY 子句表示结果要排序,它必须在所有其它子句之后作为最后一个子句出现5、集合的并、交、差操作nSelect语句的结果是一个元组的集合,多个Select 语句的结果可以进行集合操作,SQL-92支持n参加集合操作的关系(结果集)必须是相容的n属性个数必须一致n对应的类型必须一致n属性名无关,最后结果集采用第一个结果的属

21、性名n缺省为自动去除重复元组n只能在整个语句的最后使用一次Order By5、集合的并、交、差操作n命令 集合并:union集合交:intersect集合差:exceptn采用集合的观点,可以多一种解决思路采用集合的观点,可以多一种解决思路5、集合的并、交、差操作例:查询姓“张”的学生及年龄不大于19岁的学生Select sno,sname as Name,ageFrom SWhere sname like 张%UnionSelect sno,sname,ageFrom SWhere age SOME (SELECT grade FROM SC WHERE sno=S2)示例:3)检索不学C2

22、课程的学生姓名与年龄nNOT IN也可以用ALL表示:nSELECT sname,age FROM S WHERE snoALL (SELECT sno FROM SC WHERE cno=C2)示例:4)检索平均成绩最高的学生学号select SNO from SC group by SNO having avg(GRADE)=all(select avg(GRADE)from SC group by SNO)在SQL中,不允许对聚合函数进行复合运算,所以不能写成MAX(AVG(GRADE)5)空关系的测试n测试集合是否为空not exists (子查询)判断子查询的结果集合中是否有任何元组

23、存在。EXISTS代表存在量词彐。带有EXISTS谓词的子查询不返回任何实际数据,它只产生逻辑真值“true或逻辑假值“false。n注:in后的子查询与外层查询无关,每个子查询执行一次,而exists后的子查询与外层查询有关,需要执行多次,称之为相关子查询。5)空关系的测试示例:列出选修了C1号课程的学生的学号及姓名。select SNO,SNAME from S where exists(select *from SC where CNO=C1 and SNO=S.SNO)首先找外层查询的s表的第一行,根据它的sno的值处理内层子查询,若结果非空,则where子句的条件为真,此时将sc表当

24、前的sno值取出,再找表s的第二行,重复上述过程,直到遍历完S表为止。S1,ZS,23,FS2,L4,20,MS1,C1S1,C2S2,C2S2,C3n检索男生中不学C2课程的学生姓名。nselect sname from s where s.sex=M and not exists (select*from sc where s.sno=sc.sno and cno=C1)5)空关系的测试not exists当集合为空,值为true,否则为false6)重复元组的测试n测试集合是否存在重复元组unique (子查询)如果子查询结果中没有重复元组,则返回如果子查询结果中没有重复元组,则返回tr

25、ue。n示例n找出所有只教授一门课程的老师姓名。select PNAME from PROF where unique(select PNO from PC where PC.PNO=PROF.PNO)6)重复元组的测试n找出至少选修了两门课程的学生姓名。select SNAME from S where not unique(select SNO from SC where SC.SNO=S.SNO)8、导出表的使用nSQL2允许在FROM子句中使用子查询,如果在FROM子句中使用了子查询,那么要给子查询的结果起个表名和相应的列名。n示例:在基本表SC中检索平均成绩超过80分的学生学号和平均

26、成绩。SELECT sno,avg(grade)FROM SC GROUP BY sno HAVING avg(grade)80n此查询也可以在FROM子句中写一个检索每个学生的平均成绩的子查询,并对结果起名为RESULT,然后外层查询可直接对RESULT操作。8、导出表的使用SELECT SNO,AVG_GRADE FROM(SELECT SNO,AVG(GRADE)FROM SC GROUP BY SNO)AS RESULT(SNO,AVG_GRADE)WHERE AVG_GRADE809、基本表的自然联接操作n连接操作是以两个关系为输入、将另一个关系作为结果返回n笛卡儿积、条件连接、自然

27、连接、外连接n自然连接(Natural):n连接条件是两个关系中具有公共名字的所有属性对均相等,不需要其他条件n对每个相等属性对之一进行投影(去除重复属性)nStudent Natural Join SC(Student SC)n基本表R和S的自然联接操作可用下式表示:R NATURAL INNER JOIN S9、基本表的自然联接操作示例:SELECT S.SNO,SNAME FROM S,SC WHERE S.SNO=SC.SNO AND CNO=C2SELECT SNO,SNAME FROM(S NATURAL INNER JOIN SC)WHERE CNO=C2也可以写成:小结:小结:

28、n SELECT语句是SQL的核心语句,其语句成份多样,尤其是目标类表达式和条件表达式,可以有多种可选形式.这里总结一下它们的一般格式.n SELECT语句的一般格式:n SELECTALL|DISTINCT别名n FROM别名,别名n WHEREn GROUP BY HAVINGn ORDER BY ASC|DESC;语句的执行过程(1)读取FROM子句中基本表,视图的数据,执行笛卡儿积操作;(2)选取满足WHERE子句中给出的条件表达式的元组;(3)按GROUP子句中指定列的值分组,同时提取满足HAVING子句中组条件表达式的那些组;(4)按SELECT子句中给出的列名或列表达式求值输出;

29、(5)ORDER子句对输出的目标表进行排序,可选择升序获降序.n1.1.目标表达式有以下可选格式目标表达式有以下可选格式n 1)*1)*n 2)2).*.*n 3)3)COUNT(DISTINCTCOUNT(DISTINCT|ALL*)*)n 4)4).,n 其中其中 可以是由属性列、作可以是由属性列、作用于属性列的聚集函数和常量的任意算术运用于属性列的聚集函数和常量的任意算术运算算(+(+、-、*、/)/)组成的运算式组成的运算式.n 集函数的一般格式是集函数的一般格式是:COUNTSUMAVGMAXMIN(DISTINCT|ALL)2.WHERE 字句的条件表达四有以下可选格式字句的条件表

30、达四有以下可选格式1)ANY/ALL(SELECT语句语句)2)NOTBETWEEN(SELECT语句语句)AND(SELECT语句语句)3)NOTIN(,)(SELECT语句语句)n4)4)NOTLIKENOTLIKE n5)5)IS NOT NULLIS NOT NULLn6)NOTEXISTS(SELECT6)NOTEXISTS(SELECT语句语句)7)7)ANDOR ANDORSQL语句使用举例1n1、检索学习课程号为C2的学生学号和成绩。S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C(C#,CNAME,TEACHER)SELECT SNO,GRADE FRO

31、M SC WHERE CNO=2SNO,Grade(cno=C2(SC)SQL语句使用举例2n2、检索学习课程号为C2的学生学号与姓名。S(SNO,SNAME,AGE,SEX)SC(SNO,CNO,GRADE)C(CNO,CNAME,TEACHER)SELECT S.SNO,SNAME FROM S,SC WHERE S.SNO=SC.SNO AND CNO=C2S#,SNAME(c#=C2(SC S)SQL语句使用举例2-方法2n2、检索学习课程号为C2的学生学号与姓名。SELECT SNO,SNAME FROM S WHERE SNO IN(SELECT SNO FROM SC WHERE

32、 CNO=C2)S#,SNAME(c#=C2(SC)S)SQL语句使用举例2-方法3n2、检索学习课程号为C2的学生学号与姓名。SELECT SNO,SNAME FROM S WHERE C2 IN(SELECT CNO FROM SC WHERE SNO=S.CNO)SQL语句使用举例2-方法4n2、检索学习课程号为C2的学生学号与姓名。SELECT SNO,SNAME FROM S WHERE EXISTS(SELECT*FROM SC WHERE SC.SNO=S.SNO AND CNO=C2)SQL语句使用举例33、检索选修课程名为MATHS的学生学号与姓名S(SNO,SNAME,AG

33、E,SEX)SC(SNO,CNO,GRADE)C(CNO,CNAME,TEACHER)SELECT S.SNO,SNAME FROM S,SC,C WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND CNAME=MATHSS#,SNAME(CNAME=MATHS(C SC S)SQL语句使用举例3方法23、检索选修课程名为MATHS的学生学号与姓名SELECT SNO,SNAME FROM S WHERE SNO IN(SELECT SNO FROM SC WHERE CNO IN (SELECT CNO FROM C WHERE CNAME=MATHS)SQL语句

34、使用举例44、检索选修课程为C2或C4的学生学号S(SNO,SNAME,AGE,SEX)SC(SNO,CNO,GRADE)C(CNO,CNAME,TEACHER)SELECT S.SNO FROM S,SC WHERE S.SNO=SC.SNO AND CNO=C2 OR CNO=C4 S#(c#C2 C#C4(SC)SQL语句使用举例55、检索至少选修课程号为C2和C4的学生学号S(SNO,SNAME,AGE,SEX)SC(SNO,CNO,GRADE)C(CNO,CNAME,TEACHER)SELECT X.SNO FROM SC AS X,SC AS Y WHERE X.SNO=Y.SNO

35、 AND X.CNO=C2 AND Y.CNO=C4 SQL语句使用举例6n6、检索不学C2课程的学生姓名与年龄。S(SNO,SNAME,AGE,SEX)SC(SNO,CNO,GRADE)C(CNO,CNAME,TEACHER)SELECT SNAME,AGE FROM S WHERE SNO NOT IN(SELECT SNO FROM SC WHERE CNO=C2)SNAME,AGE(S)SNAME,AGE(C#=2(SC S)SQL语句使用举例6方法2n6、检索不学C2课程的学生姓名与年龄。SELECT SNAME,AGE FROM S WHERE NOT EXISTS(SELECT*

36、FROM SC WHERE SC.SNO=S.SNO AND CNO=C2)SQL语句使用举例7n7、检索学习了全部课程的学生姓名S(SNO,SNAME,AGE,SEX)SC(SNO,CNO,GRADE)C(CNO,CNAME,TEACHER)SELECT SNO,SNAME FROM S WHERE NOT EXISTS(SELECT*FROM C WHERE NOT EXISTS(SELECT*FROM SC WHERE SC.SNO=S.SNO AND SC.SNO=C.CNO)在C表中的有课程此学生没学,为真n7、检索学习了全部课程的学生姓名S1,ZSS2,L4S3,W5C1C2C3S

37、1,C1S1,C2S2,C1S2,C2S2,C3S3,C2S3,C3SELECT SNO,SNAME FROM S WHERE NOT EXISTS(SELECT*FROM C WHERE NOT EXISTS(SELECT*FROM SC WHERE SC.SNO=S.SNO AND SC.SNO=C.CNO)取出一个学号S1,如果对于某个课程号,如C3,绿色部分为假,则蓝色部分为真,即S1有课程没学,这个学号不是最后结果。SQL语句使用举例8n8、检索所学课程包含学号S3所学课程的学生学号S(SNO,SNAME,AGE,SEX)SC(SNO,CNO,GRADE)C(CNO,CNAME,TE

38、ACHER)SELECT DISTINCT SNO FROM SC AS X WHERE NOT EXISTS(SELECT*FROM SC AS Y WHERE Y.SNO=S3 AND NOT EXISTS(SELECT*FROM SC AS Z WHERE Z.SNO=X.SNO AND Z.CNO=Y.CNO)S3学过的课程中有此学生没学的,为真3.4 SQL的数据更新SQL的数据更新包括:插入数据修改数据数据删除3.4.1 数据插入n1 1、插入单个元组插入单个元组n插入单个元组插入单个元组的的INSERTINSERT语句的格式为:语句的格式为:INSERT INSERT INTO

39、INTO (,.)2.)VALUES VALUES(,.)2.)如果某些属性列在INTO子句中没有出现,则新记录在这些列上将取空值。但必须注意的是,在表定义时说明了NOT NULL的属性列不能取空值。否则会出错。如果INTO子句中没有指明任何列名,则新插入的记录必须在每个属性列上均有值。3.4.1 数据插入n示例:一次只插入一个元组示例:一次只插入一个元组n按关系模式的属性顺序Insert Into SValues(s8,张三,21,M,JSJ)按指定的属性顺序,也可以只添加部分属性(非Null属性为必需)Insert Into S(sno,sname,age)Values(S11,李四,26

40、)3.4.1 数据插入n往表中连续插入三个元组,可以写成:nInsert Into scn(TABLE(s12,c1,89),n(s16,c2,99),n(s18,c3,80)n)3.4.1 数据插入n2、插入子查询结果 子查询不仅可以嵌套在SELECT语句中,用以构造父查询的条件,也可以嵌套在INSERT语句中,用以生成要插入的数据。插入子查询结果的INSERT语句的格式为:INSERT INTO (,.)子查询;其功能是以批量插入,一次将子查询的结果全部插入指定表中。3.4.1 数据插入n把平均成绩大于80的男学生的学号和平均成绩存入另一个基本表S_GRADE(已建立)中。首先要在数据库中

41、建立一个有两个属性列的新表,其中一列存放学号,另一列存放相应的学生平均成绩。CREATE TABLE AVG_GRADE (SNO CHAR(10),Avg_GRADE SMALLINT);3.4.1 数据插入INSERT INTO s_grade(sno,avg_grade)SELECT sno,avg(grade)FROM SC WHERE sno IN(SELECT sno FROM S WHERE sex=M)GROUP BY sno HAVING avg(grade)80把平均成绩大于80的男学生的学号和平均成绩存入另一个基本表S_GRADE(已建立)中。3.4.2 数据删除n删除语

42、句的一般格式为:DELETE FROM WHERE;n DELETE语句的功能是从指定表中删除满足WHERE子句条件的所有元组。如果省略WHERE子句,表示删除表中全部元组,但表的定义仍在字典中。也就是说,DELETE语句删除的是表中的数据,而不是关于表的定义。3.4.2 数据删除n以元组为单位删除数据n一般只对一个关系进行操作,若要从多个关系中删除元组,则必须对每个关系分别执行删除命令Delete From r Where P n从关系 r 中删除满足P的元组DeleteFrom table-name From table-list Where P 3.4.2 数据删除n删除单个元组例:删除

43、学号为例:删除学号为S11的学生的选课信息的学生的选课信息Delete From SCWhere sno=S11n删除多个元组例:删除选课而未参加考试的学生的选课信息例:删除选课而未参加考试的学生的选课信息Delete From SCWhere grade is null3.4.2 数据删除n删除整个关系中的所有数据例:删除所有学生的选课信息Delete From SCn具有两个From字句的Delete语句例:删除所有比95001年龄小的学生记录Delete From Student stu1From Student stu1,Student stu2Where stu1.sage stu2

44、.sage and stu2.sno=950013.4.2 数据删除n删除低于平均工资的老师记录。delete from PROFwhere SAL (select avg(SAL)from PROF)3.4.3 数据修改n命令update 表名 set 列名=表达式|子查询 列名=,表达式|子查询where 条件表达式指定对哪些列进行更新,以及更新后的值是什么。其功能是修改指定表中满足WHERE子句条件的元组。其中SET子句用于指定修改方法,即用的值取代相应的属性列值。如果省略WHERE子句,则表示要修改表中的所有元组。3.4.3 数据修改n针对符合条件的元组,修改其属性值示例:将S1学生转

45、入HX系Update SSet dept=HXWhere sno=S1示例:所有学生年龄加1Update SSet age=age+1例:将选修例:将选修C1课程的学生的成绩改为该课程的课程的学生的成绩改为该课程的平均成绩平均成绩Update SCSet grade=(Select avg(grade)From SCWhere cno=C1)Where cno=C1先计算先计算avg,再做再做Update3.4.3 数据修改3.4.4 对视图的更新操作n单表、原始属性构成的视图可以更新(可转换成对基本表的操作)n允许更新的视图只能定义在单表上。nselect子句中的目标列不能包含聚集函数。ns

46、elect子句中不能使用unique或distinct关键字。n不能包括group by子句。n不能包括经算术表达式计算出来的列。3.4.4 对视图的更新操作例:Update avg_gradeSet avg=100Where sno=S1Insert Into stu_csValues(00001,John,M,25,CS);Insert Into stu_csValues(00002,Johnson,M,26,IS);Update n简化用户的操作简化用户的操作n不同的用户可从不同的角度看待同一数据不同的用户可从不同的角度看待同一数据n支持一定的逻辑数据独立性支持一定的逻辑数据独立性n数据

47、的数据的安全性安全性视图的优点视图的优点SQL数据控制功能()n安全性控制n安全性控制保护数据库以防止不合法的使用所造成的数据泄露和破坏。其基本措施是存取控制存取控制。n授权命令grant 表级权限 on 表名|视图名 to 用户,用户|public with grant option表级权限包括:select,update,insert,delete,index,alter以及它们的总和all,其中对select,update可指定列名。with grant option表示获得权限的用户可以把权限再授予其它用户。SQL数据控制功能()示例ngrant select,insert on S

48、to Liming with grant optionngrant all on S to publicn回收权限revoke 表级权限 on 表名|视图名 from 用户,用户|public收回权限时,若该用户已将权限授予其它用户,则也一并收回。授权路径的起点一定是DBA。SQL数据控制功能()示例nrevoke insert on S from Limingn思考一:grant可以基于列授权,当revoke这样的权限时,结果是什么?n思考二:执行完下列语句的结果是什么?revoke all on S from publicgrant select on S to public有些支持多库的数据库系统中授权对象还可以是数据库:grant 数据库级权限 to 用户,用户|publicSQL数据控制功能()数据库级权限包括:connect:允许用户在database语句中指定数据库。resource:connect权限+建表、删除表及索引权利。dba:resource权限+授予或撤消其他用户的connect、resource、dba权限。不允许dba撤消自己的dba权限。思考:如何使dba撤消自己的dba权限?

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

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁