首页 第3章SQL语言课件

第3章SQL语言课件

举报
开通vip

第3章SQL语言课件第3章SQL语言本章概要SQL是结构化查询语言(StructuredQueryLanguage)的缩写,其功能包括数据查询、数据操纵、数据定义和数据控制四个部分。SQL语言简洁、方便实用、功能齐全,已成为目前应用最广的关系数据库语言。2.1SQL语言的基本概念与特点一、主要特点SQL语言类似于英语的自然语言,简洁易用。SQL语言是一种非过程语言,即用户只要提出“干什么”即可,不必管具体操作过程,也不必了解数据的存取路径,只要指明所需的数据即可。SQL语言是一种面向集合的语言,每个命令的操作对象是一个或多个关系,结果...

第3章SQL语言课件
第3章SQL语言本章概要SQL是结构化查询语言(StructuredQueryLanguage)的缩写,其功能包括数据查询、数据操纵、数据定义和数据控制四个部分。SQL语言简洁、方便实用、功能齐全,已成为目前应用最广的关系数据库语言。2.1SQL语言的基本概念与特点一、主要特点SQL语言类似于英语的自然语言,简洁易用。SQL语言是一种非过程语言,即用户只要提出“干什么”即可,不必管具体操作过程,也不必了解数据的存取路径,只要指明所需的数据即可。SQL语言是一种面向集合的语言,每个命令的操作对象是一个或多个关系,结果也是一个关系。SQL语言既是自含式语言,又是嵌入式语言。可独立使用,也可嵌入到宿主语言中。自含式语言可以独立使用交互命令,适用于终端用户、应用程序员和DBA;嵌入式语言使其嵌入在高级语言中使用,供应用程序员开发应用程序。二、基本概念基本 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf (BASETABLE):是独立存在的表,不是由其它的表导出的表。一个关系对应一个基本表,一个或多个基本表对应一个存储文件。视图(VIEW):是一个虚拟的表,是从一个或几个基本表导出的表。它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。5.SQL语言具有:数据查询(QUERY)数据定义(DEFINITION)数据操纵(MANIPULATION)数据控制(CONTROL)四种语言一体化的功能。2.2SQL数据定义SQL语言使用数据定义语言(DATADEFINITIONLANGUAGE,简称DDL)实现其数据定义功能,可对数据库用户、基本表、视图、索引进行定义和撤消。SELECT语句的格式:SELECT[ALL|DISTINCT][TOPN[PERCENT][WITHTIES]]列名1[AS别名1][,列名2[AS别名2]…][INTO新表名]FROM表名1[[AS]表1别名][INNER|RIGHT|FULL|OUTER][OUTER]JOIN表名2[[AS]表2别名]ON条件查询的结果是仍是一个表。SELECT语句的执行过程是:根据WHERE子句的检索条件,从FROM子句指定的基本表或视图中选取满足条件的元组,再按照SELECT子句中指定的列,投影得到结果表。如果有GROUP子句,则将查询结果按照<列名1>相同的值进行分组。如果GROUP子句后有HAVING短语,则只输出满足HAVING条件的元组。如果有ORDER子句,查询结果还要按照<列名2>的值进行排序。例1查询全体学生的学号、姓名和年龄。SELECTSNO,SN,AGEFROMS例2查询学生的全部信息。SELECT*FROMS用‘*’表示S表的全部列名,而不必逐一列出。例3查询选修了课程的学生号。SELECTDISTINCTSNOFROMSC查询结果中的重复行被去掉另外,利用投影查询可控制列名的顺序,并可通过指定别名改变查询结果的列标题的名字。例4查询全体学生的姓名、学号和年龄。SELECTSNAMENAME,SNO,AGEFROMS其中,NAME为SNAME的别名2.3.2 条件查询当要在表中找出满足某些条件的行时,则需使用WHERE子句指定查询条件。WHERE子句中,条件通常通过三部分来描述:1.    列名;2.    比较运算符;3.    列名、常数。运算符含义=,>,<,>=,<=,!=比较大小多重条件AND,ORBETWEENAND确定范围IN确定集合LIKE字符匹配ISNULL空值表3.8常用的比较运算符2.3.2.1比较大小例5查询选修课程号为‘C1’的学生的学号和成绩。SELECTSNO,SCOREFROMSCWHERECNO=’C1’例6查询成绩高于85分的学生的学号、课程号和成绩。SELECTSNO,CNO,SCOREFROMSCWHERESCORE>852.3.2.3确定范围例8查询工资在1000至1500之间的教师的教师号、姓名及职称。SELECTTNO,TN,PROFFROMTWHERESALBETWEEN1000AND1500等价于SELECTTNO,TN,PROFFROMTWHERESAL>=1000ANDSAL<=1500例9查询工资不在1000至1500之间的教师的教师号、姓名及职称。SELECTTNO,TN,PROFFROMTWHERESALNOTBETWEEN1000AND15002.2.2.4确定集合利用“IN”操作可以查询属性值属于指定集合的元组。例10查询选修C1或C2的学生的学号、课程号和成绩。SELECTSNO,CNO,SCOREFROMSCWHERECNOIN(‘C1’,‘C2’)此语句也可以使用逻辑运算符“OR”实现。2.3.2.5部分匹配查询上例均属于完全匹配查询,当不知道完全精确的値时,用户还可以使用LIKE或NOTLIKE进行部分匹配查询(也称模糊查询)。LIKE定义的一般格式为:<属性名>LIKE<字符串常量>属性名必须为字符型,字符串常量的字符可以包含如下两个特殊符号:%:表示任意知长度的字符串;_:表示任意单个字符。例12查询所有姓张的教师的教师号和姓名。SELECTTNO,TNFROMTWHERETNLIKE‘张%’例13查询姓名中第二个汉字是“力”的教师号和姓名。SELECTTNO,TNFROMTWHERETNLIKE‘__力%’注:一个汉字占两个字符。2.3.2.6    空值查询某个字段没有值称之为具有空值(NULL)。通常没有为一个列输入值时,该列的值就是空值。空值不同于零和空格,它不占任何存储空间。例如,某些学生选课后没有参加考试,有选课记录,但没有考试成绩,考试成绩为空值,这与参加考试,成绩为零分的不同。例14查询没有考试成绩的学生的学号和相应的课程号。SELECTSNO,CNOFROMSCWHERESCOREISNULL注意:这里的空值条件为ISNULL,不能写成SCORE=NULL。2.2.2   常用库函数及统计汇总查询SQL提供了许多库函数,增强了基本检索能力。常用的库函数,如表3.2所示函数名称功能AVG按列计算平均值SUM按列计算值的总和MAX求一列中的最大值MIN求一列中的最小值COUNT按列值计个数例15求学号为S1学生的总分和平均分。SELECTSUM(SCORE)ASTotalScore,AVG(SCORE)ASAveScoreFROMSCWHERE(SNO='S1')注意:函数SUM和AVG只能对数值型字段进行计算。例16求选修C1号课程的最高分、最低分及之间相差的分数SELECTMAX(SCORE)ASMaxScore,MIN(SCORE)ASMinScore,MAX(SCORE)-MIN(SCORE)ASDiffFROMSCWHERE(CNO='C1')例17求计算机系学生的总数SELECTCOUNT(SNO)FROMSWHEREDEPT='计算机'例20利用特殊函数COUNT(*)求计算机系学生的总数SELECTCOUNT(*)FROMSWHEREDEPT=‘计算机’COUNT(*)用来统计元组的个数不消除重复行,不允许使用DISTINCT关键字。2.3.3 分组查询GROUPBY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。例22查询各位教师的教师号及其任课的门数。SELECTTNO,COUNT(*)ASC_NUMFROMTCGROUPBYTNOGROUPBY子句按TNO的值分组,所有具有相同TNO的元组为一组,对每一组使用函数COUNT进行计算,统计出各位教师任课的门数。当在一个SQL查询中同时使用WHERE子句,GROUPBY子句和HAVING子句时,其顺序是WHERE-GROUPBY-HAVING。WHERE与HAVING子句的根本区别在于作用对象不同。WHERE子句作用于基本表或视图,从中选择满足条件的元组;HAVING子句作用于组,选择满足条件的组,必须用于GROUPBY子句之后,但GROUPBY子句可没有HAVING子句。2.3.5查询的排序当需要对查询结果排序时,应该使用ORDERBY子句ORDERBY子句必须出现在其他子句之后排序方式可以指定,DESC为降序,ASC为升序,缺省时为升序例24查询选修C1的学生学号和成绩,并按成绩降序排列。SELECTSNO,SCOREFROMSCWHERECNO='C1'ORDERBYSCOREDESC例25查询选修C2、C3、C4或C5课程的学号、课程号和成绩,查询结果按学号升序排列,学号相同再按成绩降序排列。SELECTSNO,CNO,SCOREFROMSCWHERECNOIN('C2','C3','C4','C5')ORDERBYSNO,SCOREDESC例26求选课在三门以上且各门课程均及格的学生的学号及其总成绩,查询结果按总成绩降序列出。SELECTSNO,SUM(SCORE)ASTotalScoreFROMSCWHERESCORE>=60GROUPBYSNOHAVINGCOUNT(*)>=3ORDERBYSUM(SCORE)DESC此语句为分组排序,执行过程如下:1.(FROM)取出整个SC2.(WHERE)筛选SCORE>=60的元组3.(GROUPBY)将选出的元组按SNO分组4.(HAVING)筛选选课三门以上的分组5.(SELECT)以剩下的组中提取学号和总成绩6.(ORDERBY)将选取结果排序ORDERBYSUM(SCORE)DESC可以改写成ORDERBY2DESC2代表查询结果的第二列。2.3.6数据表连接及连接查询数据表之间的联系是通过表的字段值来体现的,这种字段称为连接字段。连接操作的目的就是通过加在连接字段的条件将多个表连接起来,以便从多个表中查询数据。前面的查询都是针对一个表进行的,当查询同时涉及两个以上的表时,称为连接查询。表的连接 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 有两种:方法1:表之间满足一定的条件的行进行连接,此时FROM子句中指明进行连接的表名,WHERE子句指明连接的列名及其连接条件。方法2:利用关键字JOIN进行连接。具体分为以下几种:INNERJOIN:显示符合条件的记录,此为默认值;LEFT(OUTER)JOIN:显示符合条件的数据行以及左边表中不符合条件的数据行,此时右边数据行会以NULL来显示,此称为左连接;RIGHT(OUTER)JOIN:显示符合条件的数据行以及右边表中不符合条件的数据行,此时左边数据行会以NULL来显示,此称为右连接;FULL(OUTER)JOIN:显示符合条件的数据行以及左边表和右边表中不符合条件的数据行,此时缺乏数据的数据行会以NULL来显示;CROSSJOIN:会将一个表的每一笔数据和另一表的每笔数据匹配成新的数据行。当将JOIN关键词放于FROM子句中时,应有关键词ON与之相对应,以表明连接的条件。2.3.6.1等值连接与非等值连接例27查询刘伟老师所讲授的课程。方法1:SELECTT.TNO,TN,CNOFROMT,TCWHERE(T.TNO=TC.TNO)AND(TN=‘刘伟’)这里,TN=‘刘伟’为查询条件,而T.TNO=TC.TNO为连接条件,TNO为连接字段。连接条件的一般格式为:[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>其中,比较运算符主要有:=、>、<、>=、<=、!=。当比较运算符为“=“时,称为等值连接,其他情况为非等值连接。引用列名TNO时要加上表名前缀,是因为两个表中的列名相同,必须用表名前缀来确切说明所指列属于哪个表,以避免二义性。如果列名是唯一的,比如TN,就不必须加前缀。上面的操作是将T表中的TNO和TC表中的TNO相等的行连接,同时选取TN为“刘伟“的行,然后再在TN,CNO列上投影,这是连接、选取和投影的操作组合。方法2:SELECTT.TNO,TN,CNOFROMTINNERJOINTCONT.TNO=TC.TNOANDT.TN='刘伟'方法3:SELECTR2.TNO,R2.TN,R1.CNOFROM(SELECTTNO,CNOFROMTC)ASR1INNERJOIN(SELECTTNO,TNFROMTWHERETN='刘伟')ASR2ONR1.TNO=R2.TNO例28查询所有选课学生的学号、姓名、选课名称及成绩。SELECTS.SNO,SN,CN,SCOREFROMS,C,SCWHERES.SNO=SC.SNOANDSC.CNO=C.CNO本例涉及三个表,WHERE子句中有两个连接条件。当有两个以上的表进行连接时,称为多表连接。2.3.6.2 自身连接当一个表与其自已进行连接操作时,称为表的自身连接。例29查询所有比刘伟工资高的教师姓名、性别、工资和刘伟的工资。要查询的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 均在同一表T中,可以将表T分别取两个别名,一个是X,一个是Y。将X,Y中满足比刘伟工资高的行连接起来。这实际上是同一表T的自身连接。方法1:SELECTX.TN,X.SALASSAL_a,Y.SALASSAL_bFROMTASX,TASYWHEREX.SAL>Y.SALANDY.TN='刘伟'方法2:SELECTX.TN,X.SAL,Y.SALFROMTASXINNERJOINTASYONX.SAL>Y.SALANDY.TN='刘伟'方法3:SELECTR1.TN,R1.SAL,R2.SALFROM(SELECTTN,SALFROMT)ASR1INNERJOIN(SELECTSALFROMTWHERETN='刘伟')ASR2ONR1.SAL>R2.SAL例30检索所有学生姓名,年龄和选课名称。方法1:SELECTSN,AGE,CNFROMS,C,SCWHERES.SNO=SC.SNOANDSC.CNO=C.CNO方法2:SELECTR3.SNO,R3.SN,R3.AGE,R4.CNFROM(SELECTSNO,SN,AGEFROMS)ASR3INNERJOIN(SELECTR2.SNO,R1.CNFROM(SELECTCNO,CNFROMC)ASR1INNERJOIN(SELECTSNO,CNOFROMSC)ASR2ONR1.CNO=R2.CNO)ASR4ONR3.SNO=R4.SNO2.3.6.3外连接在上面的连接操作中,不满足连接条件的元组不能作为查询结果输出。如例28的查询结果只包括有选课记录的学生,而不会有吴丽同学的信息。若将例28改成:例31查询所有学生的学号、姓名、选课名称及成绩。(没有选课的同学的选课信息显示为空)则应写成如下的SQL语句。SELECTS.SNO,SN,CN,SCOREFROMSLEFTOUTERJOINSCONS.SNO=SC.SNOLEFTOUTERJOINCONC.CNO=SC.CNO则查询结果只包括所有的学生,没有选课的吴丽同学的选课信息显示为空。2.3.7子查询在WHERE子句中包含一个形如SELECT-FROM-WHERE的查询块,此查询块称为子查询或嵌套查询,包含子查询的语句称为父查询或外部查询。嵌套查询可以将一系列简单查询构成复杂查询,增强查询能力。子查询的嵌套层次最多可达到255层,以层层嵌套的方式构造查询充分体现了SQL“结构化”的特点。嵌套查询在执行时由里向外处理,每个子查询是在上一级外部查询处理之前完成,父查询要用到子查询的结果。2.3.7.1 返回一个值的子查询当子查询的返回值只有一个时,可以使用比较运算符(=,>,<,>=,<=,!=)将父查询和子查询连接起来。例32查询与刘伟教师职称相同的教师号、姓名。SELECTTNO,TNFROMTWHEREPROF=(SELECTPROFFROMTWHERETN='刘伟')此查询相当于分成两个查询块来执行。先执行子查询:SELECTPROFFROMTWHERETN=’刘伟’子查询向主查询只返回一个值,即刘伟教师的职称“讲师”,然后以此作为父查询的条件,相当于再执行父查询,查询所有职称为“讲师”的教师号、姓名。SELECTTNO,TNFROMTWHEREPROF=’讲师’2.3.7.2返回一组值的子查询如果子查询的返回值不止一个,而是一个集合时,则不能直接使用比较运算符,可以在比较运算符和子查询之间插入ANY或ALL。其具体含义详见以下各例。1.使用ANY例33查询讲授课程号为C5的教师姓名。SELECTTNFROMTWHERETNO=ANY(SELECTTNOFROMTCWHERECNO='C5')先执行子查询,找到讲授课程号为C5的教师号,为一组值构成的集合(T2,T3,T5);再执行父查询,其中ANY的含义为任意一个,查询教师号为T2、T3、T5的教师的姓名。该例也可以使用前面所讲的连接操作来实现:SELECTTNFROMT,TCWHERET.TNO=TC.TNOANDTC.CNO='C5‘可见,对于同一查询可使用子查询和连接两种方法来解决,可根据习惯任意选用。例34查询其他系中比计算机系某一教师工资高的教师的姓名和工资。SELECTTN,SALFROMTWHERESAL>ANY(SELECTSALFROMTWHEREDEPT='计算机')ANDDEPT!='计算机'/*注意:此行是父查询中的条件*/先执行子查询,找到计算机系中所有教师的工资集合(1500,900);再执行父查询,查询所有不是计算机系且工资高于1500或900的教师姓名和工资。此查询也可以写成:SELECTTN,SALFROMTWHERESAL>(SELECTMIN(SAL)FROMTWHEREDEPT='计算机')ANDDEPT!=‘计算机’先执行子查询,利用库函数MIN找到计算机系中所有教师的最低工资——900;再执行父查询,查询所有不是计算机系且工资高于900的教师。2.使用IN可以使用IN代替“=ANY”。例35(题目同33)SELECTTNFROMTWHERETNOIN(SELECTTNOFROMTCWHERECNO='C5')3.使用ALLALL的含义为全部。例36查询其他系中比计算机系所有教师工资都高的教师的姓名和工资。SELECTTN,SALFROMTWHERESAL>ALL(SELECTSALFROMTWHEREDEPT='计算机')ANDDEPT!=‘计算机’子查询找到计算机系中所有教师的工资集合(1500,900);父查询找到所有不是计算机系且工资高于1500的教师姓名和工资。此查询也可以写成:SELECTTN,SALFROMTWHERESAL>(SELECTMAX(SAL)FROMTWHEREDEPT='计算机')ANDDEPT!=‘计算机’库函数MAX的作用是找到计算机系中所有教师的最高工资1500。例37查询不讲授课程号为C5的教师姓名。SELECTDISTINCTTNFROMTWHERE'C5'!=ALL(SELECTCNOFROMTCWHERETNO=T.TNO)!=ALL的含义为不等于子查询结果中的任何一个值,也可使用NOTIN代替!=ALL。子查询包含普通子查询和相关子查询。前面所讲的子查询均为普通子查询,而本例中子查询的查询条件引用了父查询表中的属性值(T表的TNO值),我们把这类查询称为相关子查询。二者的执行方式不同:普通子查询的执行顺序是:首先执行子查询,然后把子查询的结果作为父查询的查询条件的值。普通子查询只执行一次,而父查询所涉及的所有记录行都与其查询结果进行比较以确定查询结果集合。相关子查询的执行顺序是:首先选取父查询表中的第一行记录,内部的子查询利用此行中相关的属性值进行查询,然后父查询根据子查询返回的结果判断此行是否满足查询条件。如果满足条件,则把该行放入父查询的查询结果集合中。重复执行这一过程,直到处理完父查询表中的每一行数据。由此可以看出,相关子查询的执行次数是由父查询表的行数决定的。如上例表T中每的一行即每个教师记录都要执行一次子查询以确定该教师是否讲授C5这门课,当C5不是教师的任一门课时,则该教师被选取。以下几例均为相关子查询。4.使用EXISTSEXISTS表示存在量词,带有EXISTS的子查询不返回任何实际数据,它只得到逻辑值“真”或“假”。当子查询的的查询结果集合为非空时,外层的WHERE子句返回真值,否则返回假值。NOTEXISTS与此相反。含有IN的查询通常可用EXISTS表示,但反过来不一定。例38(题目同33)略SELECTTNFROMTWHEREEXISTS(SELECT*FROMTCWHERETNO=T.TNOANDCNO='C5')当子查询TC表存在一行记录满足其WHERE子句中的条件时,则父查询便得到一个TN值,重复执行以上过程,直到得出最后结果。例39查询选修所有课程的学生姓名SELECTSNFROMSWHERENOTEXISTS(SELECT*FROMCWHERENOTEXISTS(SELECT*FROMSCWHERESNO=S.SNOANDCNO=C.CNO))选出这样一些学生名单,在SC表中不存在他们没有选修课程的记录。2.4SQL数据更新SQL语言的数据更新语句DML主要包括插入数据、修改数据和删除数据三种语句。2.4.1插入数据记录插入数据是把新的记录插入到一个存在的表中。插入数据使用语句INSERTINTO,可分为以下几种情况。2.4.1.1插入一行新记录语法格式为:INSERTINTO<表名>[(<列名1>[,<列名2>…])]VALUES(<值>)其中,<表名>是指要插入新记录的表<列名>是可选项,指定待添加数据的列VALUES子句指定待添加数据的具体值。列名的排列顺序不一定要和表定义时的顺序一致。但当指定列名表时VALUES子句值的排列顺序必须和列名表中的列名排列顺序一致,个数相等,数据类型一一对应。例60在S表中插入一条学生记录(学号:S7;姓名:郑冬;性别:女;年龄:21;系别:计算机)。INSERTINTOSVALUES('s7','郑冬','女',21,'计算机')注意:必须用逗号将各个数据分开,字符型数据要用单引号括起来。INTO子句中没有指定列名,则新插入的记录必须在每个属性列上均有值,且VALUES子句中值的排列顺序要和表中各属性列的排列顺序一致。2.4.1.2插入一行的部分数据值例61在SC表中插入一条选课记录(’S7’,’C1’)。INSERTINTOSC(SNO,CNO)VALUES('s7',‘c1')将VALUES子句中的值按照INTO子句中指定列名的顺序插入到表中对于INTO子句中没有出现的列,则新插入的记录在这些列上将取空值,如上例的SCORE即赋空值。但在表定义时有NOTNULL约束的属性列不能取空值。2.4.1.3插入多行记录用于表间的拷贝,将一个表中的数据抽取数行插入另一表中,可以通过子查询来实现。插入数据的命令语法格式为:INSERTINTO<表名>[(<列名1>[,<列名2>…])]子查询例62求出各系教师的平均工资,把结果存放在新表AVGSAL中。首先建立新表AVGSAL,用来存放系名和各系的平均工资CREATETABLEAVGSAL(DEPARTMENTVARCHAR(20),AVGSALSMALLINT)然后利用子查询求出T表中各系的平均工资,把结果存放在新表AVGSAL中。INSERTINTOAVGSALSELECTDEPT,AVG(SAL)FROMTGROUPBYDEPT2.4.2  修改数据记录SQL语言可以使用UPDATE语句对表中的一行或多行记录的某些列值进行修改,其语法格式为:UPDATE<表名>SET<列名>=<表达式>[,<列名>=<表达式>]…[WHERE<条件>]其中:<表名>是指要修改的表SET子句给出要修改的列及其修改后的值WHERE子句指定待修改的记录应当满足的条件,WHERE子句省略时,则修改表中的所有记录。2.4.2.1修改一行例63把刘伟教师转到信息系。UPDATETSETDEPT='信息'WHERETN='刘伟'2.4.2.2修改多行例64将所有学生年龄增加1岁UPDATESSETAGE=AGE+1例65把教师表中工资小于等于1000元的讲师的工资提高20%。UPDATETSETSAL=1.2*SALWHEREPROF='讲师'ANDSAL<=10002.4.2.3用子查询选择要修改的行例66把讲授C5课程的教师的岗位津贴增加100元。UPDATETSETCOMN=COMN+100WHERETNOIN(SELECTT.TNOFROMT,TCWHERET.TNO=TC.TNOANDTC.CNO='C5')子查询的作用是得到讲授C5课程的教师号。2.4.2.4用子查询提供要修改的值例67把所有教师的工资提高到平均工资的1.2倍UPDATETSETSAL=(SELECT1.2*AVG(SAL)FROMT)子查询的作用是得到所有教师的平均工资。2.4.3删除数据记录使用DELETE语句可以删除表中的一行或多行记录,其语法格式为:DELETEFROM<表名>[WHERE<条件>]其中,<表名>是指要删除数据的表。WHERE子句指定待删除的记录应当满足的条件,WHERE子句省略时,则删除表中的所有记录。2.4.3.1删除一行记录例68删除刘伟教师的记录。DELETEFROMTWHERETN=’刘伟’2.4.3.2删除多行记录例69删除所有教师的授课记录DELETEFROMTC执行此语句后,TC表即为一个空表,但其定义仍存在数据字典中。2.4.3.3利用子查询选择要删除的行例70删除刘伟教师授课的记录。DELETEFROMTCWHERETNO=(SELECTTNOFROMTWHERETN=’刘伟’)2.5视图视图是虚表,其数据不存储,其记录来自基本表,只在数据库中存储其定义。视图在概念上与基本表等同,用户可以在视图上再定义视图,可以对视图进行查询.删除.更新等操作。2.5.1定义和删除视图2.5.1.1定义视图定义视图使用语句CREATEVIEW,其语法格式为:CREATEVIEW<视图名>[(<视图列表>)]AS<子查询>其中,<视图列表>为可选项,省略时,视图的列名由子查询的结果决定。以下两种情况下,视图列名不可省略:1.视图由多个表连接得到,在不同的表中存在同名列,则需指定列名;2.当视图的列名为表达式或库函数的计算结果时,而不是单纯的属性名时,则需指明列名。在子查询中不许使用ORDERBY子句和DISTINCT短语,如果需要排序,则可在视图定义后,对视图查询时再进行排序。例71创建一个计算机系教师情况的视图SUB_T。CREATEVIEWSUB_TASSELECTTNO,TN,PROFFROMTWHEREDEPT='计算机'其中:视图名字为SUB_T,省略了视图列表。视图由子查询中的三列TNO,TN,PROF组成。视图创建后,对视图SUB_T的数据的访问只限制在计算机系内,且只能访问TNO,TN,PROF三列的内容,从而达到了数据保密的目的。视图创建后,只在数据字典中存放视图的定义,而其中的子查询SELECT语句并不执行。只有当用户对视图进行操作时,才按照视图的定义将数据从基本表中取出。例72创建一学生情况视图S_SC_C(包括学号、姓名、课程名及成绩)。CREATEVIEWS_SC_C(SNO,SN,CN,SCORE)ASSELECTS.SNO,SN,CN,SCOREFROMS,C,SCWHERES.SNO=SC.SNOANDSC.CNO=C.CNO此视图由三个表连接得到,在S表和SC表中均存在SNO列,则需指定视图列名。例73创建一学生平均成绩视图S_AVGCREATEVIEWS_AVG(SNO,AVG)ASSELECTSNO,AVG(SCORE)FROMSCGROUPBYSNO此视图的列名之一AVG为库函数的计算结果,则在定义时需指明列名。2.5.1.2删除视图视图定义后可随时删除,删除视图的语法格式为:DROPVIEW<视图名>例74删除计算机系教师情况的视图SUB_T。DROPVIEWSUB_T视图删除后,只会删除该视图在数据字典中的定义,而与该视图有关的基本表中的数据不会受任何影响,由此视图导出的其他视图的定义不会删除,但已无任何意义。用户应该把这些视图删除。2.5.2查询视图视图定义后,对视图的查询操作如同对基本表的查询操作一样。例75 查找视图SUB_T中职称为教授的教师号和姓名。SELECTTNO,TNFROMSUB_TWHEREPROF='教授'此查询的执行过程是系统首先从数据字典中找到SUB_T的定义,然后把此定义和用户的查询结合起来,转换成等价的对基本表T的查询,这一转换过程称为视图消解(ViewResolution),相当于执行以下查询:SELECTTNO,TNFROMTWHEREDEPT=’计算机’ ANDPROF=’教授’由上例可以看出,当对一个基本表进行复杂的查询时,可以先对基本表建立一个视图,然后只需对此视图进行查询,这样就不必再键入复杂的查询语句,而将一个复杂的查询转换成一个简单的查询,从而简化了查询操作。2.5.3更新视图由于视图是一张虚表,所以对视图的更新,最终实际上是转换成对基本表的更新。其更新操作包括插入、修改和删除数据,其语法格式如同对基本表的更新操作一样。有些更新在理论上是不可能的,有些实现起来比较困难,以下仅考虑可以更新的视图。2.5.3.1插入(INSERT)例2.76向计算机系教师视图SUB_T中插入一条记录(教师号:T6;姓名:李丹;职称:副教授)。INSERTINTOSUB_TVALUES('T6','李丹','副教授')系统在执行此语句时,首先从数据字典中找到SUB_T的定义,然后把此定义和插入操作结合起来,转换成等价的对基本表T的插入。相当于执行以下操作:INSERTINTOTVALUES(‘T6’,’李丹’,’副教授’,’计算机’)2.5.3.2修改(UPDATE)例2.77将计算机系教师视图SUB_T中刘伟的职称改为“副教授“。UPDATESUB_TSETPROF='副教授'WHERETN=‘刘伟’转换成对基本表的修改操作:UPDATETSETPROF=’副教授’WHERETN=’刘伟’ANDDEPT=’计算机’2.5.3.3删除(DELETE)例2.78删除计算机系教师视图SUB_T中刘伟教师的记录。DELETEFROMSUB_TWHERETN=’刘伟’转换成对基本表的删除操作:DELETEFROMTWHERETN=’刘伟’ANDDEPT=’计算机’由于视图中的数据不是存放在视图中的,即视图没有相应的存储空间,对视图的一切操作最终都要转换成对基本表的操作,这样看来使操作更加复杂,那么为什么还要使用视图呢?使用视图有如下几个优点:1.利于数据保密,对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。例如,对教师表创建了计算机系视图,本系教师只能使用此视图,而无法访问其他系教师的数据。2.简化查询操作,为复杂的查询建立一个视图,用户不必键入复杂的查询语句,只需针对此视图做简单的查询即可。如例2.75。3.保证数据的逻辑独立性。对于视图的操作,比如查询,只依赖于视图的定义。当构成视图的基本表要修改时,只需修改视图定义中的子查询部分。而基于视图的查询不用改变。这就是第一章介绍过的外模式与模式之间的独立性,即数据的逻辑独立性。小结本章详细介绍了SQL语言的使用方法。在讲解SQL语言的同时,进一步介绍了关系数据库的有关概念,如索引和视图的概念及其作用。SQL语言具有数据定义、数据查询、数据更新、数据控制四大功能。其全部功能可以用表2.3的9个动词概括出来。表2.3SQL语言的动词SQL功能动词数据定义CREATE,DROP,ALTER数据查询SELECT数据操纵INSERT,UPDATE,DELETE数据控制GRANT,REVOKE其中:其数据查询功能最为丰富和复杂,也非常重要,初学者掌握起来有一定的困难,应反复上机加强练习。
本文档为【第3章SQL语言课件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥28.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
于于
暂无简介~
格式:ppt
大小:1MB
软件:PowerPoint
页数:84
分类:医药卫生
上传时间:2022-09-20
浏览量:1