已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章关系数据库语言SOL,1语言功能的一体化:集数据定义DDL、数据操纵DML、数据控制DCL功能为一体。并且它不严格区分数据定义和数据操纵,在一次操作中可以使用任何语句。SQL语言具有数据定义、数据操纵和数据控制功能,这为数据库应用开发提供了良好的环境。用户在数据库行以后,可以修改模式,不影响数据库的运行。不象非关系数据库系统,修改模式需要先停止数据库运行,转储数据,修改模式,编译修改了的模式以后再重新装入数据库,使得修改模式非常不方便。2模式结构的一体化:关系模型中唯一的结构类型就是关系表,这种数据结构的单一性,使得对数据库数据的增、删、改、查询等操作都只须使用一种操作符。,3.1SQL语言的特点,3高度非过程化的语言使用SQL语言操作数据库,只须提出“做什么”无须指明“怎样做”。用户不必了解存取路径。存取路径的选择和SQL语句的具体执行由系统自己完成,从而简化了编程的复杂性,提高了数据的独立性。4面向集合的操作方式SQL语言在元组集合上进行操作,操作结果仍是元组集合。查找、插入、删除和更新都可以是对元组集合操作。5两种操作方式、统一的语法结构SQL语言既是自含式语言,又是嵌入式语言。作为自含式语言,可作为联机交互式使用,每个SQL语句可以独立完成其操作;作为嵌入式语言,SQL语句可嵌入到高级程序设计语言中使用。,6语言简洁、易学易用。SQL是结构化的查询语言,语言非常简单,完成数据定义、数据操纵和数据控制的核心功能只用了9个动词:Create;Drop;Alter;Select;Delete;Insert;Update;Grant;Revoke。SQL的语法简单,接近英语口语,因此容易学习,使用方便。SQL语言作为数据库语言,有它自己的词法和语法结构,并有其专用的语言符号,不同的系统稍有差别,主要的符号都相同。下面给出主要的语言符号:大括号:大括号中的内容为必选参数,其中可有多个选项,各选项之间用竖线分隔,用户必须选择其中的一项。方括号:方括号中的内容为可选项,用户根据需要选用。竖线|:表示参数之间或的关系。省略号:表示重复前面的语法单元。尖括号:表示下面有子句定义。方括号和省略号,n:表示同样选项可以重复1到n遍;,3.2定义关系模式,1.定义表:在SQL中,定义关系模型称为定义表,又因其所用的关键字(CREATETABLE)而称为建表。其格式为:CREATETABLE(A1,A2,An);2.属性的数据类型SQL支持几种主要的数据类型:定长字符串:标识符号为CHAR(n)。表示长度为n个字符的定长字符串。VARCHAR(n)则表示:最多有n个字符的变长字符串。字符串类型的值之间可以进行合理的强制转换。,位串:标识符号为BIT(n)。表示长度为n的位串。BITVARYING(n)表示长度最多为n的位串。整数:标识符号为INT|INTEGER。表示一般的整数。SHORTINT允许位数少一些。浮点数:标识符号为FLOAT|REAL。表示一般的浮点数。DOUBLEPRECISON表示双精度浮点数。DECIMAL(n,d)表示带小数的十进制实数。日期型数据:DATAYYYY-MM-DD表示日期;TIMEHH:MM:SS(.X)表示时间。,3.举例:例1.建立学生关系CREATETABLEStudent(StudentNoINT,StudentNameCHAR(8),AgeINT,DeptVARCHAR(20);通常要对某些属性作一定的约束,例如规定其不能为空、单值约束或者设定默认值等等。NOTNULL表示某个属性的分量值不能为空;UNIQUE表示对某个属性进行单值约束;DEFAULT用来指定某个属性的分量的默认值。例2.规定学号StudentNo不能为空,并对其进行单值约束;年龄Age,默认值是18.,CREATETABLEStudent(StudentNoINTNOTNULLUNIQUE,(单值约束)StudentNameCHAR(8),AgeINTDEFAULT18,DeptVARCHAR(20);自己练习定义三个基本表:课程(课号,课名,开课教师,总学时,学分)必修课(课号,必修专业)选课(学号,课号,成绩)4.修改关系模式修改关系模式语句的基本格式是:ALTERTABLER修改操作按修改内容的不同,修改操作可分为三种。第一种修改是向R中增加一个属性列:ALTERTABLERADDA;(A为属性名),例如:在学生关系中增加属性Sex,表示学生的性别,数据类型为长度为1的字符串,并且用M表示男学生,用F表示女学生,而且这个属性的取值默认为M。命令格式为:ALTERTABLEStudentADDSexCHAR(1)DEFAULTM;第二种修改是从R中删除一个属性列:命令格式为ALTERTABLERDROPA;例如:将年龄属性Age从Student关系模式中删除:ALTERTABLEStudentDROPAge;注意:通常不能删除一个关系的关键码。,第三种是修改某个属性的数据类型或者某种约束命令格式是:ALTERTABLERMODIFYA;例如:将学生系别属性Dept的数据类型CHAR(20)改成CHAR(10):ALTERTABLEStudentMODIFYDeptCHAR(10);,5.撤消基本表:droptable表名,3.3数据库更新,定义了一个数据库,仅仅是建立了一个仅有数据库的结构而没有库记录(元组)的“空库”,需要向库内录入各个元组的数据(记录值),形成了一个真实的数据库。对这样一个数据库,往往需要对其内部的记录进行三种基本操作,这三种基本操作是:插入往关系中插入元组(INSERT)。删除从关系中删除某些元组(DELETE)。修改修改关系中已经存在的元组中某些分量的值(UPDATE)。插入、删除、修改三种操作统称为数据库更新。1.插入:插入命令的基本格式:语句格式1:insertinto表名(列名,.,列名)values(常量,常量)命令功能:将values后面的数据插入到指定表中。当需要插入表中所有列的数据时,表名后面的列名可以缺省。,例1、在学生表中插入一个学生的数据。,Insertinto学生values(”890239”,”张文青”,“89”,“软件”)Insertinto学生(学号,姓名,专业)values(”890239”,”李文月”,“应用”),语句格式2:insertinto表名(列名,列名)子查询功能:可将利用一个子查询所得的结果,插入到表中。,注意:该命令实际是向数据库中录入库记录的命令。SQL仅此一条命令是向关系里输入数据的命令。,INSERTINTO命令只能向关系中录入一个元组,下面的命令可以把自查询得到的元组集合都插入到指定的关系里。,例2、如果91级软件专业的全体学生必须在该学期选修汇编语言课程,则将此信息填入到选课表中。,insertinto选课(学号,课号)selectdistinct学号,课号from学生,课程where年级=“91”and专业=“软件”and课名=“汇编语言”,(2)将多个元组以表的形式插入关系:,INSERTINTOStudent(TABLE(990011,李明,19,计算机系),(990015,王晓林,20,计算机系),(990111,孙芳,18,电子系);,2.删除数据:语句格式:deletefrom表名where条件功能:从指定的表中删除满足条件的行。该命令可以删除指定关系中满足选择条件的所有元组,一次可以删除一个或多个元组,甚至删除满足选择条件所有元组仅保留表的结构。,例3.从必修课表中将4号课去掉。,deletefrom必修课where课号=“4”,例4.带有子查询的删除。删除应用专业全体学生的选课记录。,(1)deletefrom选课where学号IN(select学号from学生where专业=“应用”),(2)deletefrom选课where“应用”=(select专业from学生where学生.学号=选课.学号),3.修改数据:语句格式:update表名set列名1=表达式1,列名2=表达式2.where条件功能:对由表名指定的表进行修改。,例5.在选课表中将1号课的所有成绩提高5分。,update选课set成绩=成绩+5where课号=“1”,例6.具有子查询的更新,将软件专业全体学生的2号课成绩置零。,update选课set成绩=0where课号=“2”and学号IN(select学号from学生where专业=“软件”),3.4数据库的查询,1.简单查询命令SELECTSELECT命令的一般语法格式:,SELECTALL|DISTINCTAS,AS|*FROM关系名1,关系名2,WHERE选择或连接条件表达式ORDERBYASC|DESCGROUPBY分组列名1HAVING组选条件表达式,SELECT命令的功能:该命令能够按指定条件对一个或多个关系进行查询,并产生和显示一个新的关系。,该命令包含了若干个子句,下面对这些子句作以分析说明。说明:SELECT子句:SELECT是命令的关键字,指明需要显示的查询结果即新关系中应该包括哪些属性。若新关系包含原关系中的所有属性,则用*号表示。,如若使用一个新的名字代替原有的属性名,那么可选择AS。任选项ALL|DISTINCT,若选择ALL表明查询的结果中允许重复的元组(记录),若选择DISTINCT,不允许出现重复元组。FROM子句:该子句用于说明对哪一个或哪几个关系进行查询。WHERE子句:该子句给出对指定关系查询的选择条件,若对多个关系进行查询,则应提供多个关系之间的连接条件。这个选择条件表达式可以使用6种通用的比较运算符对值进行比较运算:=(等于)、(不等于)、(大于)、=(不小于)。,可以将对某两个值的比较看作一个子条件,多个子条件之间可以用逻辑运算符AND、OR、NOT连接起来,构成一个更复杂的选择条件。,ORDERBYASC|DESC子句:该子句为可选项。用于给查询结果按指定属性排序,可以按升序(ASC)或按降序(DESC)两种方式进行排序,系统默认为升序排序。GROUPBY分组列名1该子句也为可选项,该子句给出对,指定的属性列值进行分组统计,该子句通常与HAVING配合使用,以筛选出符合条件的分组条件信息。,例1.列出全部学生的信息selec*from学生例2.列出软件专业全体学生的学号及姓名,select学号,姓名from学生where专业=“软件”,学生,例3.在关系Studen中查询计算机系年龄大于18岁的学生的学号和姓名。,SQL的查询命令是:selectStudentNo,StudentNamefromStudentwhereAge18andDept=“计算机系”该命令用关系代数来表示为:StudentNo,StudentName(Age18ANDDept=“计算机系”(Student)),常用的查询条件,例4.列出所有必修课的课号selectdistinct课号from必修课例5.求1号课成绩大于80分的学生学号及成绩,并按成绩由高到低排序,select学号,成绩from选课where课号=1and成绩=80orderby成绩desc;(升序为ASC,默认),select学号,课号from选课where成绩isnull;注意:因null不是一个具体值,它只是表示空值的一个谓词,它的一般形式是:列名isnotnull,例6.涉及空值NULL的查询,求缺少学习成绩的学生学号和课程号。,SQL的查询方式很丰富,它提供了三种谓词:between,in,like,例7可以根据显示的需要用新的名称替换原有的属性名:,命令格式为:SELECT原属性名AS新名称如:SELECTStudentNoAS学号,StudentNameAS姓名FROMStudentWHEREAge18ANDDept=“计算机系”该命令的结果,显示为:学号姓名9900011李明,例8还可以以其它的格式输出显示结果:例如,要列出学生的姓名和出生年份。,由于关系Student中只有年龄Age这个属性,无法直接显示出生年份,但是可以在SELECT子句中通过计算求得出生年份值,即SELECTStudentNameASName,2009-AgeASBirthYearFROMStudent;,该命令查询的结果为:NameBirthYear李明1981高亮亮1980,必修课,选课,课程,学生,返回,例9.查找成绩在70到80之间的学生选课得分情况。,select*from选课where成绩between70and80;与betweenand相反的也可以.,In谓词:在查找中,经常会遇到要求表的列值是某几个值中的一个。例10.列出89级和90级全体学生的学号和姓名。,select学号,姓名from学生where年级in(89,90);有时根据情况也可以用notin,Like谓词:查找时,有时需对字符串比较,有两种串匹配方式:_和%例11.列出所有90级学生的学习情况.,select*from选课where学号like“90_”,若要求列出所有姓“张”的学生的学号和姓名,自己练习写一下。,select学号,姓名from学生where姓名like“张%”;此处若用“张_”有和区别?,简单查询只涉及到一个关系,如果查询目标涉及到两个或者两个以上的关系,就要进行连接查询。由于SQL是高度非过程化语言,只要在FROM子句给出相关的关系名,便可以实现连接查询。,2.连接查询,(1).自然连接:SQL很容易实现连接的操作,只要在FROM子句中列出查询涉及到的关系名,在WHERE子句中列出自然连接的同属性名,便可以实现连接的操作和查询。,select姓名,成绩from学生,选课where学生.学号=选课.学号and课号=“1”(注:此时加了表前缀,可防止二义性,但麻烦;可用别名),例12.列出选修1号课的学生姓名及成绩,该查询的关系代数表达式是姓名,成绩(学生课号=“1”(选课),select姓名,成绩from学生s,选课cwheres.学号=c.学号and课号=“1”(2).非等值连接:(元组变量),例13.求1号课某些学生的学号及成绩,该部分学生的成绩要高于陈莉该门课程的成绩。,select学号,成绩from选课X,学生,选课YwhereX.课号=Y.课号andX.课号=1andX.成绩=Y.成绩andY.学号=学生.学号and学生.姓名=“陈莉”,Select学号,成绩from选课Where课号=1and成绩=(select成绩From选课,学生where课号=1and学生.姓名=“陈莉”and学生.学号=选课.学号),用关系名.属性名,的方法可以给出两个关系的连接条件,但有时会遇到更复杂的情况。如要对同一关系中的两个不同元组的同一属性作比较,这样就出现了二义性。为此,要用元组变量作为关系的别名,以区分同一属性的两个不同元组。,在SQL语言中也可以实现关系代数中的并、交、差运算。SQL可以将两个或多个查询结果进行并操作(UNION)、交操作(INTERSECT)和差操作(MINUS/EXCEPT)。,(select姓名from学生where专业=“软件”)intersect(select姓名from学生where年级=“90”),(3).并、交、差操作,例14.求软件专业90级学生的姓名。,这类关键字用在两个查询之间,查询常常用圆括号括起来。,例15.显示计算机系年龄大于18岁而没有选修1234号课程的学生的学号,(SELECTStudentNoFROMStudentWHEREAge18ANDDept=“计算机系”)EXCEPT(SELECTStudentNoFROMStudentCourseWHERECourseNo=1234),例16.求非软件专业的90级学生的姓名。,select姓名from学生where年级=“90”minus/EXCEPTselect姓名from学生where专业=“软件”,以上两例也可以用“and”来实现,请自己练习一下,3.组函数(聚合操作):select语句不仅可以通过where子句查找满足条件的数据,还可以通过组函数对满足条件的数据进行统计、计数等运算。标准SQL语言提供常用的5种组函数。,MAX()求(字符、日期、数值列)的最大值。COUNT()计算所选数据的行数。SUM()计算数值列的总和;AVG()计算数值列的平均值。MIN()求(字符、日期、数值列)的最小值。这些组函数一般是从一组值中计算一个汇总信息,GROUPBY子句用来定义或者划分字段的值成为多个组,它能控制和影响查询的结果。,例17.列出各门课的平均成绩、最高成绩、最低成绩和选课人数。,select课号,AVG(成绩),MAX(成绩),MIN(成绩),COUNT(学号)from选课GROUPBY课号,例18查询软件专业的学生人数。,selectcount(学号)from学生where专业=“软件”selectcount(*)from学生where专业=“软件”,例19.列出最少选修3门课程的学生姓名。,select姓名from学生where学号IN(select学号from选课GROUPBY学号havingCOUNT(*)=3),此处注意having子句和where子句的区别,例20.列出选修汇编语言的所有学生的学号.,select学号from选课where课号=(select课号from课程where课名=“汇编语言”),执行过程:首先在课程表中找出汇编语言的课号,然后再在选课表中找出课号等于垓值的元组,列出它们的学号。上题如用“and”实现,应为:,4.嵌套查询:嵌套查询就是把一个SELECT-FROM-WHERE查询语句嵌套在另一个SELECT-FROM-WHERE查询语句中,前者可以称为子查询,也叫内查询,后者相应地称为外查询。SQL对嵌套查询的处理方法是从内层向外层处理,即先处理最内层的子查询,然后把查询的结果用于其外查询的查询条件,再层层向外求解,最后得出查询结果。,(1).返回单值的子查询:,SELECT-FROM-WHERE查询语句的结果可以是一个具有若干属性的关系,并且结果关系中可以有多个元组。可以从键码值推断出对某个属性只生成单一的值。假如这样,就可以把这个查询结果当成一个普通的常量来看待,并使用在其外查询的选择条件中。,(2).返回一组值的子查询:如果某个子查询返回的值不止一个,则必须指明在where子句中应怎样使用这些返回值。通常使用谓词ANY、ALL和IN。,select学号from选课,课程where选课.课号=课程.课号and课程.课名=“汇编语言”,SQL中有些特定的运算符能作用于关系R而生成布尔值的结果。这些运算符包括:EXISTS:当且仅当R非空(至少有一个元组)时,条件EXISTSR为真。IN:当且仅当S和R中的某个值相等时,SINR为真。当且仅当S和R中的任何一个值都不相等时,SNOTINR为真。,ALL,当且仅当S与一元关系R中的每个值都满足关系时,SALLR为真;是6个比较运算符(=、=)中的任意一个。ANY,当且仅当S与一元关系R中的至少一个值满足关系时,SANYR为真。,ANY谓词的用法例21.求选修1号课的学生,这些学生的成绩比选修2号课的最低成绩要高。,select学号,成绩from选课where课号=1and成绩any(select成绩from选课where课号=2),先选出2号课的所有成绩,然后选出1号课成绩只要高于2号课其中任何一个成绩的那些学生。,EXISTS、ALL和ANY运算符都可以通过在整个表达式前面加上NOT来求反,就像其他逻辑值的表达式一样。于是,当且仅当R为空时,NOTEXISTSR为真;其他可以依此类推。注意:SANYR含义相同。,例22在学生关系中找出所有重名学生的姓名。,分析:在学生关系中查找同名的学生,采用嵌套查询的方法,需要从外查询的关系中的第一个元组与内查询关系中的每一个元组比较,查出同名而学号较大的学生,故可以用运算符ANY。,select学号,成绩from选课where课号=1and成绩all(select成绩from选课where课号=2),ALL谓词的用法:例23.求选修1号课的学生,这些学生的成绩比选修2号课的任何学生的成绩都要高。(即比2号课最高成绩还要高),查询命令:SELECT学号,姓名FROM学生ASS1WHERE学号=ALL(SELECTAVG(Score)FROMStudentCourseGROUPBYStudentNo);,例24在学生选课关系中找出平均成绩最高的学生的学号。,例26查询选修了“C+程序设计”课的学生名单:,命令:SELECT姓名FROM学生WHERE学号IN(SELECT学号FROM选课WHERE课号IN(或用=)(SELECT课号FROM课程WHERE课程名=C+程序设计);,先分析最内层:SELECT课号FROM课程WHERE课程名=C+程序设计该命令由关系课程中筛选出课程名为C+程序设计的课程号,严格地说,每门课程只有一个课程号,在此表明最内层查询的结果是课程号集合,所以中层查询的选择条件使用了IN,命令分析该查询由里向外可分为3层:最外曾是主查询,其内嵌套了2层查询。,中层子查询:SELECT学号FROM选课WHERE课号IN中层子查询是在选课关系中查找出现在内层查询结果中的课程号所对应的学号,查询结果是一个学号的集合,即选修了C+程序设计课程的学号的集合。,主查询,SELECT姓名FROM学生WHERE学号IN主查询是从学生关系中筛选出学号在选修了“C+程序设计”课程的学号的集合中学号所对应的学生姓名。,实际,很多嵌套查询是可以改写成单一的SELECT-FROM-WHERE查询语句,可以将主查询和子查询中提到的每个关系置于FROM子句中,运算符IN用WHERE子句中的等式来代替。,关系代数:姓名(课程名=“C+程序设计”(学生(选课课程)),SQL的命令查询:SELECT姓名FROM学生,选课,课程WHERE课程名=C+程序设计AND学生.学号=选课.学号AND课程.课号=选课.课号,例27.列出选修汇编语言的学生名单。,select姓名from学生where学号IN(select学号from选课where课号=(selectdistinct课号from课程where课名=“汇编语言”),如果不用多重子查询,而用and连接成复合条件为:select姓名from学生s,选课sc,课程cwhere课名=“汇编语言”andc.课号=sc.课号andsc.学号=s.学号,例28查询所有选修了课程号为1234的课程的学生姓名。,分析:此查询涉及到学生关系和选课关系,这两个关系通过公共属性学号可以连接在一起。但可以首先由学生关系中的第一个元组按学号在选课关系的课号属性中查找该生是否选修了1234课程,若有则该生的姓名被命中,依此类推。直到所有的学生均扫描完。为此,可以把在学生关系中查找某个学生是否选修了1234课程作为子查询,其查询命令为:,查询命令:SELECT姓名FROM学生WHEREEXISTS(SELECT*FROM选课WHERE学号=学生.学号AND课号=1234);,结论:当EXISTS为真时,外查询的条件满足,该学号对应的姓名即为查询结果之一。对于相关查询,外层关系有多少个元组,就要执行多少次子查询。,3.5建立和撤消索引,所谓索引(Index)就是一种为关系中的给定属性提供存取路径的数据结构。在某个属性上建立索引可以更有效地查询该属性为给定值的元组。,为了提高查询速度,在SQL语言中提供了建立索引的命令。建立索引表的基本思想是:当需要对表进行某些数据查找时,首先查找与该表有关的索引,当查到索引后,根据索引提供的信息,直接可以找到所需的数据。由于索引远远比表结构紧凑,而且所含的数据少,因此查找索引速度快。,(1)建立索引:语句格式:createuniqueindex索引名on表名(列名asc|desc,列名asc|desc),功能:建立一个索引名指定的索引。该索引是对表名指定的表上指定的列进行索引。unique用来说明该索引是否唯一索引。,例1.对学生表学号建立唯一性索引。,createuniqueindexsson学生(学号asc),一旦建立了唯一性索引,系统就不允许在学生表中出现学号值相同的行。如果插入一行学号值与表中某一行的学号值相同,则系统拒绝插入并产生错误信息。由于学生表中的学号应该是唯一的,所以可以建立唯一性索引。,建立索引可以加快检索速度。但并不意味着表的索引建的越多越好,因为维护索引结构也需要花费系统的一定开销,尤其是对那些经常有更新操作的表,其索引结构维护的代价是很大的。通常是根据需要建立索引,如果需要经常使用某列数据进行查询,则使用该列建立索引效果会很好。另外,一般数据库管理系统中,所有的索引都是自动维护的,无需用户介入。,在多个属性上建立索引:例如:电影关系的键码由名称和年份两个属性组成,我们就可以用如下语句在这两个属性上建立索引CREATEINDEXKeyIndexONMovie(title,year);,(3).索引的删除(当不再需要使用索引时,可以用命令删除索引):,语句格式:dropindex索引名on表名,功能:指明要删除索引的名字,删除该索引。on表名可以确认该索引是否是这张表上的索引。,例2.删除ss索引。,dropindexss,视图是一种特殊类型的表,它可以由一个表中选取的某些列和行组成,也可以由若干表满足一定条件的数据组成。形象地说,视图好比窗口,它所反映的是一个表或若干表的局部数据。在使用时,视图和表一样,有自己的名字以及相应的列,还有自己的元组,但视图本身并不实际存放数据,它仅仅被定义成对应表的部分数据。因此,也称视图为“虚表”。,3.6视图的建立、更新与撤销,为了保密和安全起见,数据库可以定义视图供其他用户使用,而将视图以外的数据屏蔽起来,达到对其他用户保密的目的。,1、视图的建立与删除。(1).视图的建立:语句格式:createview视图名(视图列名表)asselect语句withcheckoption功能:建立一个视图名指定的视图,其数据为select语句选择的结果。当新产生视图的列名与select命令所选择数据列的名称相同时,则可省略(视图列名表),withcheckoption也是一个选择项,当选择该项时,用户必须保证当它向视图中插入数据时,该数据必须满足视图定义中select命令所指定的条件。,例1.Createview软件学生asselect学号,姓名,年级from学生where专业=“软件”,如果在视图中取不同的列名字,如学号、学生姓名、所在年级,应如何修改?,createview应用学生(学号,学生姓名,所在专业)asselect学号,姓名,专业from学生where专业=“应用”,(2).视图的删除:,语句格式:dropview视图名,功能:将视图的定义从数据字典中删除,由此视图导出的其它视图也将自动删除;若导出此视图的基本表删除了,则此视图也将自动删除。,例2.删除上面建立的应用学生视图dropview应用学生,视图查询视图和表一样,可对它进行查询。例3.查询软件专业90级的学生姓名和学号。,select学号,姓名from软件学生where年级=“90”,由于视图的查询实质上是对基本表的查询,因此基本表的变化可以反映到视图上,视图就如同“窗口”一样,通过视图可以看到基本表动态的变化。,视图的更新由于视图是由基本表导出的,所以对视图的更新最终要转换成对基本表的更新。,系统执行此查询时,首先把它转换成等价的对基本表的查询,然后执行修正了的查询。即当查询是对视图表时,系统首先从数据字典中取出该视图的定义,然后把定义中的子查询和视图查询语句结合起来,形成一个修正的查询语句。本例修正后的查询语句为:,select学号,姓名from学生where专业=“软件”and年级=“90”,由于成绩单视图中的一个元组,是由选课表中若干行经过分组求平均值得到的,因此对成绩单视图的更新就无法转换成对选课表的更新,视图成绩单是不可更新的。,例4.将软件专业学号为“890237”的学生姓名改为“陈莹”。,update软件专业set姓名=“陈莹”where学号=“890237”,将其转换为对基本表的更新,应为:update学生set姓名=“陈莹”where学号=“890237”and专业=“软件”,在关系数据库中,并非所有视图都是可更新的,在有些情况下视图的更新不能唯一有意义地转换成对基本表的更新,因此,在对视图进行更新操作时有一定的限制和条件。下例视图即为不可更新的视图。,例5.把学生的学号及他的平均成绩定义一个成绩单视图。,createview成绩单(学号,平均成绩)asselect学号,avg(成绩)from选课groupby学号,一个视图是通过select命令对表数据进行选择而构成的。一个视图如果进行更新操作,那么对构成该视图的select命令一般有如下基本限制。(1)视图的定义只来自一个表,不能是定义在多个表上的视图。(2)select命令中不含有groupby,distinct子句、组函数。(3)需要被更新的列不是由表达式定义的。(4)表中的所有notnull列均属于该视图。其中:视图的删除操作必须满足1、2两条。视图的修改操作必须满足前3条。而视图的插入操作需要满足以上全部条件。,注意:在使用dropindex删除索引时,只能删除用户自己建立的索引,不能删除其他用户建立的索引,除非其他用户给予你删除索引的权利。,SQL数据控制功能是指控制用户对数据的存取权利。一个用户生成一个表或者在这个表上建立了视图,那么该用户就有权对这个表或视图进行一切合理的操作;同时,该用户还有权将表或视图的使用权授予其他用户。用户将使用权授予其他用户之后,还可以从其他用户那里收回其使用权。通常SQL用授权命令告知系统,系统把授权的结果存入数据字典,然后当用户提出操作数据请求时,即可根据授权情况进行检查,以决定是否执行操作请求还是拒绝。,使用权的授予grant命令是将数据的使用权授予其他用户,使其他用户共享数据的使用权,命令的语法结构:GRANT|ALLONTO|PUBLICWITHGRANTOPTION,3.7SQL数据控制功能,在上述六中操作中,update操作可以指定对哪些列进行修改。如果仅对表或视图部分列进行修改,则用update(,表示将中指定的操作权授予其他用户。,说明:包括如下操作:alter(修改表结构)delete(对表或视图删除行)insert(对表或视图增加行)index(使用createindex命令建索引)select(从表或视图显示数据)update(修改表或视图的数据),例2.将修改学生姓名和查询学生表的所有权授予所有用户.,grantupdate(姓名),selecton学生topublic,例1.将表必修课的所有使用权授予stu用户。,grantallon必修课tostu,必选项|PUBLIC,用户可以任选其一。如选,则必须给出接受使用权的用户ID;选择PUBLIC表示将使用权授予所有用户。命令中WITHGRANTOPTION是一个可选项。如果选择该项,则表示被授予使用权的用户有权再将其得到的全部或部分使用权再授予其他用户;如不选择该项,则表示被授予者无权再将使用权授予其他用户。,on后面的指出将哪个表(或视图)上的使用权授予其他用户。如果表名指出的是一个视图,那么只可授予delete、insert、select和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年餐厅厨房空气检测合同协议
- 2025年财务审计监督合同协议
- 后厨采购合同范本模板
- 2025国网黑龙江省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题及答案详解(基础+提升)
- 2025届国家管网集团高校毕业生招聘笔试历年参考题库附带答案详解(浓缩500题)有答案详解
- 2026国网湖南省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题含答案详解(轻巧夺冠)
- 2026秋季国家管网集团广西公司高校毕业生招聘考试备考题库(浓缩500题)及参考答案详解(能力提升)
- 2026秋季国家管网集团建设项目管理公司高校毕业生招聘考试参考试题(浓缩500题)附参考答案详解(完整版)
- 2026秋季国家管网集团液化天然气接收站管理公司高校毕业生招聘考试备考试题(浓缩500题)含答案详解ab卷
- 2026届国家管网集团高校毕业生招聘笔试备考试题(浓缩500题)及参考答案详解(综合题)
- 小学生上网的利与弊
- 企业基层通讯员培训课件
- 屋顶漏水维修安全协议书(2篇)
- 浙江大学-简约学术风论文答辩模板
- 乌头碱中毒急救与护理
- 临床执业医师考试所需知识试题及答案
- 《民法典》合同编实务培训课件
- 水利工程安全生产事故应急预案
- 2025年时事政治考试44题及参考答案
- 2025年浙江宁波北仑中学提前招生英语试卷真题(含答案详解)
- 智慧树知到《大话机器人(青海大学)》2025章节测试附答案
评论
0/150
提交评论