数据库原理sql

上传人:ning****hua 文档编号:243135513 上传时间:2024-09-16 格式:PPT 页数:103 大小:237.50KB
返回 下载 相关 举报
数据库原理sql_第1页
第1页 / 共103页
数据库原理sql_第2页
第2页 / 共103页
数据库原理sql_第3页
第3页 / 共103页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,本章内容提要,SQL,语言可以分为数据定义、数据查询、数据更新、数据控制四大部分。本章系统而详尽地讲解了,SQL,语言这四部分的内容。,进一步了解关系数据库系统的基本概念。,第三章,关系数据库标准语言,SQL,.,本章重点:,SQL,的数据定义、查询、更新、控制功能;,视图的概念及其优点。,本章难点:,SQL,的数据查询功能。,第三章,关系数据库标准语言,SQL,SQL,历史,SQL: Structured Query,Languang,1974,年,由,Boyce,和,Chamberlin,提出,1975-1979,年,在,System R,上实现,由,IBM,的,San Jose,研究室研制,由于它功能丰富受到广泛欢迎,经不断修改、扩充和完善,,SQL,语言最终发展成为关系数据库的标准语言。,第三章,关系数据库标准语言,SQL,SQL,第三章,关系数据库标准语言,SQL,标准化,有关组织,ANSI(American Natural Standard Institute),美国国家标准局,ISO(International Organization for Standardization),国际标准化组织,有关标准,SQL-86 (1986,年,10,月,ANSI,的数据库委员会,X3H2,87,年,ISO,通过),“,数据库语言,SQL,”,SQL-89,“,具有完整性增强的数据库语言,SQL,”,,,增加了对完整性约束的支持,SQL-92 (SQL-2),“,数据库语言,SQL,”,,是,SQL-89,的超集,增加了许多新特性,如新的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。,SQL-99 (SQL-3),正在讨论中的新的标准,将增加对面向对象模型的支持,意义:,自,SQL,成为国际标准语言后,各个数据库厂家纷纷推出各自的,SQL,软件或与,SQL,的接口软件,,这就使得大多数数据库均用,SQL,作为共同的数据存取语言和标准接口,使不同数据库系统之间的互操作有了共同的基础,。这个意义十分重大。,SQL,成为国际标准,对数据库以外的领域也产生了很大影响。,SQL,已成为数据库领域中的一个主流语言。,第三章,关系数据库标准语言,SQL,3.1.1 SQL,特点,SQL,语言的英语意义是结构查询语言,(,Structured Query Language,),。,实际上它的功能丰富。,SQL,功能:,数据查询(,Data QUERY,);,数据操纵(,Data MANIPULATION,);,数据定义(,Data DEFINITION,);,数据控制(,Data CONTROL,),SQL,的主要特点是,:,1.,综合统一(一体化的特点 ),2.,高度非过程化,3.,面向集合的操作方式,4.,以同一种语法结构提供两种使用方式,5.,语言简洁,易学易用,第三章,关系数据库标准语言,SQL3.1 SQL,概述,第三章,关系数据库标准语言,SQL 3.1 SQL,概述,SQL,语言的动词,SQL,功能,动词,数据查询,SELECT,数据定义,CREATE DROP ALTER,数据操纵,INSERT UPDATE DELETE,数据控制,GRANT REVOKE,3.1.2 SQL,语言的基本概念,SQL,语言支持关系数据库三级模式结构。,第三章,关系数据库标准语言,SQL 3.1 SQL,概述,SQL,视图,1,视图,2,基本表,1,基本表,2,基本表,3,基本表,4,存储文件,1,存储文件,2,外,模式,模式,内模式,SQL,的数据定义功能包括三部分,:,定义基本表,定义视图和定义索引,。,视图,是基于基本表的虚表,,索引,是依附于基本表的。因此,SQL,通常不提供修改,视图,和,索引,定义的操作。,SQL,的数据定义语句,第三章,关系数据库标准语言,SQL 3.2,数据定义,操作,对象,操作方式,创建,删除,修改,表,CREATE TABLE,DROP TABLE,ALTER TABLE,视图,CREATE VIEW,DROP VIEW,索引,CREATE INDEX,DROP INDEX,3.2.1,定义、删除、与修改基本表,一、定义基本表,语句格式为,:,CREATE TABLE ,(, ,列级完整性约束,,, ,列级完整性约束,表级完整性约束,);,功能:,定义一个基本表,同时定义与该表有关的完整性约束条件。,说明:,(1),是所要定义的基本表的名字。,(2),一个,表,可以由一个或几个属性(列)组成。,第三章,关系数据库标准语言,SQL 3.2,数据定义,DB2 SQL,支持以下数据类型,;,INTEGER,或,INT,全字长,(31 bits,精度,),的二进制整数,SMALLINT,半字长,(,精度为,15bits),的二进制整数,DECIMAL(p,q),或,DEC(p,q),压缩十进制数,共,p,位,小数点后 有,q,位,.15=p=q=0,q=0,时可省略,.,FLOAT,双字长的浮点数,CHARTER(N),或,CHAR(N),长度为,n,的定长字符串,VARCHAR(N),变长字符串,最大长度为,n,GRAPHIC,(,N,),长度为,n,的定长图形字符串,VAR GRAPHIC,(,N,),变长图形字符串,最大长度为,n,DATE,日期型,格式为,YYYY-MM-DD,TIME,时间型,格式为,HH.MM.SS,TIMESTAMP,日期加时间,第三章,关系数据库标准语言,SQL 3.2,数据定义,第三章,关系数据库标准语言,SQL 3.2,数据定义,例,1,:建立一个学生表,Student,它由学号,Sno,,,姓名,Sname,性别,Ssex,年龄,Sage,所在系,Sdept,五个属性组成。其中学号不能为空,值是唯一的,且姓名取值也唯一。,CREATE TABLE Student,(,Sno,CHAR(5) NOT NULL UNIQUE,Sname,char(8) UNIQUE,Ssex,CHAR(1),Sage SMALLINT,Sdept,CHAR(15);,系统执行上面的,CREATE TABLE,语句后,就在数据库中建立一个新的空的“学生”表,Student,并将有关“学生”表的定义及有关约束条件存放在数据字典中。,第三章,关系数据库标准语言,SQL 3.2,数据定义,例,2,:,CREATE TABLE s (,sno,char(6),not null,sname,char(8),unique,ssex,char(2) default ,男,sage,smallint,sdept,char(2),sbirthday,date,primary key (,sno,),);,列级完整性约束条件,表级完整性约束,条件,第三章,关系数据库标准语言,SQL 3.2,数据定义,3.2.1,定义、删除、与修改基本表,二、 修改基本表,语句格式为,:,ALTER TABLE ,ADD ,完整性约束,DROP |,MODIFY ,;,功能:修改指定的基本表。,ADD,子句:用于增加新列和新的完整性约束条件;,DROP,子句:用于删除指定的完整性约束条件;,MODIFY,子句:用于修改原有的列定义(列名和数据类型),说明:不论基本表中原来是否有数据,新增加的列一律为空值。,SQL,没有提供删除属性列的语句,。,第三章,关系数据库标准语言,SQL 3.2,数据定义,例,3,:,向,S,表增加:,“,入学时间,”,列,数据类型为日期型。,ALTER TABEL S ADD SCOME DATE,;,注意:新增加的属性列不能指定为,NOT NULL,。,将年龄的数据类型改为半字长整数。,ALTER TABEL S MODIFY SAGE SMALLINT,;,注意:修改原有的属性列定义有可能破坏已有数据 。,删除姓名上的唯一值约束。,alter table s drop unique(,sname,);,第三章,关系数据库标准语言,SQL 3.2,数据定义,3.2.1,定义、删除、与修改基本表,三、 删除基本表,语句,格式,为:,DROP TABLE,;,功能:删除指定的基本表,同时表中的数据和在此表上建立的索引都将自动被删除掉。建立在此表上的视图虽仍然保留,但已无法引用。,注意:执行删除操作一定要格外小心!,第三章,关系数据库标准语言,SQL 3.2,数据定义,3.2.2,建立与删除索引,在基本表上建立索引是为了加快查询速度,。,一、建立索引,语句格式为:,CREATE UNIQUECLUSTER INDEX,索引名,on,基本表名(列名,次序,,列名,次序,.,),其他参数,;,说明: 索引可以建在一列或几列上,圆括号内是索引列的顺序说明表。,(,1,)次序,指定了索引值排序的次序。可取,ASC(,升序,),或,DESC(,降序,),,缺省值为升序。,(,2,),UNIQUE,表示每一索引值只对应唯一的数据记录,(,3,),CLUSTER,表示要建立的索引是,聚簇索引,,所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。,例:,CREATE CLUSTER INDEX,Stusname,on Student(,Sname,);,此类索引可以提高查询效率,,聚簇索引可以在最常查询的列上建立,对于经常更新的列不宜建立。一个基本表上最多只能建立一个聚簇索引。,第三章,关系数据库标准语言,SQL 3.2,数据定义,例,4,为学生,-,课程数据库中的,Student,Couse,SC,三个表建立索引。其中,Student,表按学号升序建唯一索引,,Couse,表按课程号升序建唯一索引,,SC,表按学号升序和课程号降序建唯一索引。,CREATE UNIQUE INDEX,Stusno,ON Student(,Sno,);,CREATE UNIQUE INDEX,Coucno,ON,Couse,(,Cno,);,CREATE UNIQUE INDEX,Sno,ON SC(,Sno,ASC,Cno,DESC);,第三章,关系数据库标准语言,SQL 3.2,数据定义,二、删除索引,语句格式为,:,DROP INDEX,索引名,;,功能:,删除索引,同时把有关索引的描述也从数据 字典中删去。,例,5,:,DROP INDEX XSNO;,第三章,关系数据库标准语言,SQL 3.3,数据更新,SQL,的更新语句包括修改,删除和插入三类语句。,3.3.1.,插入,一,.,插入单个元组,语句格式为,:,INSERT,INTO,表名,(,字段名,字段名,.),VALUES(,常量,常量,.),;,功能:将新元组插入指定表中。,说明:,(,1,)在,INTO,中没有出现的属性列,将被置为空值;,(,2,)在表定义时说明了,NOT NULL,的属性列不能取空值;,(,3,)如果,INTO,子句没有指明任何列名,则新插入的记录必须在每个属性列上均有值。,第三章,关系数据库标准语言,SQL 3.3,数据更新,例,6,将一个新学生记录(,95020,,陈东,男,,IS,,,18,),插入到,S,表,INSERT INTO S,VALUES (95020,,,陈东,,,男,,,IS,,,18);,或,INSERT INTO S (,sno,sname,ssex,sdept,sage),VALUES (95020,,,陈东,,,男,,,IS,,,18);,空值的插入,例,7,插入一条学生选课记录,(95020,,,1),到,SC,表,INSERT INTO SC (,sno,cno,),VALUES (95020,,,1);,或,INSERT INTO SC (,sno,cno,grade),VALUES (95020,,,1, null );,第三章,关系数据库标准语言,SQL 3.3,数据更新,3.3.1.,插入,二,.,插入子查询结果,语句格式为,:,INSERT,INTO,表名,(,字段名,字段名,.),子查询;,第三章,关系数据库标准语言,SQL 3.3,数据更新,例,8,对于一个系,求学生的平均年龄,并把结果存入数据库中。,CREATE TABLE DEPTAGE,(SDEPT CHAR(15),AVGAGE SMALLINT);,INSERT,INTO DEPTAGE (SDEPT,AVGAGE),(,SELECT SD,AVG(SA),FROM S,GROUP BY SD,),;,第三章,关系数据库标准语言,SQL 3.3,数据更新,3.3.2.,修改数据,语句格式为,:,UPDATE,表名,SET,字段,=,表达式,字段,=,表达式,.,WHERE,谓词,;,功能:修改指定表中满足谓词的元组;把这些元组按,SET,子句中的表达式修改相应字段上的值。,第三章,关系数据库标准语言,SQL 3.3,数据更新,一、单记录修改,例,9.,把学生,S1,的姓名改为,WANGPING,UPDATE S,SET,SName,= WANG PING,WHERE SNO=S1;,第三章,关系数据库标准语言,SQL 3.3,数据更新,例,10.,多记录修改,.,把所有学生的年龄增加,1,岁,UPDATE S,SET Sage = Sage + 1;,第三章,关系数据库标准语言,SQL 3.3,数据更新,二、多表的修改,例,11.,把学生,S2,的学号改为,S9,UPDATE S,SET SNO=S9,WHERE SNO=S2;,UPDATE SC,SET SNO=S9,WHERE SNO=S2;,注意:修改多表数据时要保证数据库内容的一致性。,第三章,关系数据库标准语言,SQL 3.3,数据更新,三、带子查询的修改,例,12.,将计算机系全体学生的成绩置零,UPDATE SC,SET GRADE=0,WHERE CS =,(,SELECT SDEPT,FROM S,WHERE S.SNO=SC.SNO,);,第三章,关系数据库标准语言,SQL 3.3,数据更新,3.3.3.,删除数据,语句格式为,:,DELETE,FROM,表名,WHERE,谓词,;,功能:删除指定表中的数据。,说明:没有,WHERE,子句时表示删除此表中的全部记录,但此表的定义仍在数据字典中。,第三章,关系数据库标准语言,SQL 3.3,数据更新,一、 单记录删除,把学生,S9,删除,DELETE,FROM S,WHERE SNO=S9;,会产生什么问题吗?,第三章,关系数据库标准语言,SQL 3.3,数据更新,二、 多记录删除,删除所有学生选课记录,DELETE,FROM SC;,SC,成为一个空表,第三章,关系数据库标准语言,SQL 3.3,数据更新,三、 带子查询的删除,将计算机系全体学生的选课记录,DELETE,FROM SC,WHERE CS=,( SELECT SDEPT,FROM STUDENT,WHERE STUDENT.SNO=SC.SNO );,第三章,关系数据库标准语言,SQL 3.3,数据更新,3.3.4,更新操作与数据库的一致性,增加、删除、修改操作只能对一个表操作,这会带来一些问题。,如在对表更新时的数据不一致。,解决的办法,数据库系统引入了事务(,Transaction),的概念。,第三章,关系数据库标准语言,SQL 3.4,数据查询,一、,SELECT,语法,语句格式为,:,SELECT ALL|DISTINCT,目标列表达式,,目标列表达式,FROM,基本表,(,或视图,),,基本表,(,或视图,),WHERE,条件表达式,GROUP BY,列名,1HAVING,内部函数表达式,ORDER BY,列名,2ASC|DESC,UNION SELECT,;,功能:在指定的表中查询满足条件的数据,并按目标列表达式方式显示。,第三章,关系数据库标准语言,SQL 3.4,数据查询,二、,SELECT LIST (,目标列表达式,),说明:在目标列中可以出现的形式为:,(,1,) 列名,(,2,),表名,.,列名,(,3,),表名,.*,(,4,)列名,AS,新列名,(,5,)常量,(,6,)列名计算式,(+,、,-,、*、,),(,7,)选项,ALL|DISTINCT,特别注意: 函数不能嵌套使用,第三章,关系数据库标准语言,SQL 3.4,数据查询,例,1,: 指定列名,SELECT,sno,sname,FROM S;,例,2,: 列名前带表名,SELECT sc.,sno, s.,sname,cno, grade,FROM sc , s,WHERE SC.SNO=S.SNO;,例,3,: 选择所有列,SELECT *,FROM sc ;,第三章,关系数据库标准语言,SQL 3.4,数据查询,例,4,: 重新命名列名,SELECT,sno,sname,sbirthday,as birth_day,FROM s;,SELECT,sno,sname,sbirthday,as ,出生日期,FROM s;,例,5,: 使用常量,SELECT,sno,sname, age:, sage,FROM s;,第三章,关系数据库标准语言,SQL 3.4,数据查询,例,6,: 使用列名计算式,(+,、,-,、*、,),SELECT,sno,sname, Birth_Year:, 2001-sage,FROM s;,SELECT,sno,cno, grade +100 grade,FROM sc ;,第三章,关系数据库标准语言,SQL 3.4,数据查询,例,7,使用选项,ALL|DISTINCT,SELECT sc.,sno,FROM sc ;,SELECT distinct sc.,sno,FROM sc ;,第三章,关系数据库标准语言,SQL 3.4,数据查询,三、,WHERE CLAUSE,条件可以包括:,(,1,) 比较,( = , , =, , !=, ! ),(,2,) 范围,( between and , not between and ),(,3,),列表,( in , not in ),(,4,),字符匹配,(like , not like ),(,5,),空值判断,(is null , is not null ),(,6,),连接(多表,单表(表的自连接),(,7,) 嵌套查询 (子查询),第三章,关系数据库标准语言,SQL 3.4,数据查询,例:比较,( = , , =, , !=, ! ),求数学系学生的学号、姓名。,SELECT SNO,SName,FROM S,WHERE,Sdept,= MA;,求数学系年龄在岁以下的学生的学号、姓名。,SELECT SNO,SName,FROM S,WHERE,Sdept,= MA and sage =19 ;,第三章,关系数据库标准语言,SQL 3.4,数据查询,求数学系或年龄在岁以下的学生的信息。,SELECT *,FROM S,WHERE,SDept,=MA or sage =19 ;,等价形式为:,SELECT *,FROM S,WHERE,SDept,=MA,union,SELECT *,FROM S,WHERE sage =19 and sage 85;,第三章,关系数据库标准语言,SQL 3.4,数据查询,(,7,) 嵌套查询 (子查询),一个,SELECT-FROM-WHERE,语句称为一个查询块,一个查询块出现在,WHERE,子句中或,HAVING,短语中的查询称为嵌套查询,SQL,语句允许多层嵌套,特别指出:,子查询的,SELECT,语句中不能使用,ORDER BY,子句,ORDER BY,子句只能对最终查询结果排序,嵌套查询分为:,简单子查询,相关子查询,第三章,关系数据库标准语言,SQL 3.4,数据查询,例:简单子查询(带有,IN,谓词的子查询 ),查询选修了,2,号课程的学生的学号和姓名,SELECT s.,sno,sname,FROM s,WHERE,sno,in,( SELECT,sno,FROM SC,WHERE,cno,=2 );,等价于:,SELECT s.,sno,sname,FROM s,WHERE,sno,in,(s1,s3,s4,s5),;,第三章,关系数据库标准语言,SQL 3.4,数据查询,例: 查询选修了,数据库系统,课程的学生的学号和姓名,SELECT s.,sno,sname,FROM s,WHERE,sno,in,( SELECT,sno,FROM SC,WHERE,cno,in,( SELECT,cno,FROM C,WHERE,cname,=,数据库系统,);,第三章,关系数据库标准语言,SQL 3.4,数据查询,例:(带有比较运算符的子查询),查询“王明”所在系的学生的学号、姓名和系,SELECT s.,sno,sname,sdept,FROM s,WHERE,sdept,=,( SELECT,sdept,FROM S,WHERE,sname,= ,王明,);,第三章,关系数据库标准语言,SQL 3.4,数据查询,例:(带有,ANY,或,ALL,谓词的子查询),查询其它系比“,CS”,系某一学生年龄小的学生姓名和年龄,SELECT,sname,sage,FROM s,WHERE,sdept, ,cs, and sage any,( SELECT sage,FROM S WHERE,sdept,=,cs,);,第三章,关系数据库标准语言,SQL 3.4,数据查询,例:查询其它系比“,CS”,系任一学生年龄小的学生姓名和年龄,SELECT,sname,sage,FROM s,WHERE,sdept, ,cs, and sage 19;,第三章,关系数据库标准语言,SQL 3.4,数据查询,例: 统计每个学生选修课程的门数及平均成绩,SELECT,sno,count (*) as course_num,avg,(grade) as,avg,_grade,FROM sc,group by,sno,;,第三章,关系数据库标准语言,SQL 3.4,数据查询,例: 统计每门课程的选修人数及平均成绩,SELECT,cno,count (*) as student_num,avg,(grade) as,avg,_grade,FROM sc,group by,cno,;,第三章,关系数据库标准语言,SQL 3.4,数据查询,关于在,WHERE,子句中不能使用聚合函数,SELECT,sno, max(sage),FROM s,GROUP BY,sno,;,?,SELECT,sno, sage,FROM s,WHERE sage = max(sage);,第三章,关系数据库标准语言,SQL 3.4,数据查询,七、集合查询,例 查询计算机科学系的学生及年龄不大于,19,岁的学生。,SELECT * FROM Student WHERE,Sdept,=CS,UNION,SELECT * FROM Student WHERE Sage=19;,本查询实际上是求计算机科学系的所有学生与年龄不大于,19,岁的学生的并集。使用,UNION,将多个查询结果合并起来时,系统会自动去掉重复元组。注意,参加,UNION,操作的各结果表的列数必须相同;对应项的数据类型也必须相同。,第三章,关系数据库标准语言,SQL 3.4,数据查询,例 查询选修了课程,1,或者选修了课程,2,的学生。,SELECT,Sno,FROM SC WHERE,Cno,=1,UNION,SELECT,Sno,FROM SC WHERE,Cno,=2;,标准,SQL,中没有直接提供集合交操作和集合差操作,但可以用其他方法来实现。,例 查询计算机科学系的学生与年龄不大于,19,岁的学生的交集,这实际上就是查询计算机科学系中年龄不大于,19,岁的学生。,SELECT * FROM Student,WHERE,Sdept,=CS AND Sage19;,第三章,关系数据库标准语言,SQL 3.5,视图,3.5.1,定义视图,语句格式为:,CREATE VIEW,视图名,(,字段名,字段名,.),AS,子查询,WITH CHECK OPTION;,说明:,(,1,),WITH CHECK OPTION,选项表示对视图进行,UPDATE,、,INSERT,和,DELETE,操作时要保证更新、插入和删除的行必须满足视图定义的谓词条件(子查询的条件表达式)。,(,2,)子查询不允许含有,ORDER BY,子句和,DISTINCT,短语,(,3,)组成视图的属性列名要么全部指定要么全部省略,没有其它选择,.,第三章,关系数据库标准语言,SQL 3.5,视图,例,:,建立“,CS”,系的学生视图表,.,CREATE VIEW V_CS,AS ( SELECT SNO,SNAME,SAGE,SDEPT,FROM S,WHERE SDEPT=CS );,等价为:,CREATE VIEW V_CS ( SNO,SNAME,SAGE,SDEPT ),AS ( SELECT SNO,SNAME,SAGE,SDEPT,FROM S,WHERE SDEPT=CS );,第三章,关系数据库标准语言,SQL 3.5,视图,视图,V_CS,的字段名省略了,隐含为子查询中,SELECT,子句目标列中的诸字段,(SNO,SNAME,SAGE,SDEPT).,但是,在下面三种情况下必须明确指定组成视图的所有列名:,(,1,)某个目标列不是单纯的属性列名,而是集函数或列表达式,(,2,)多表连接时出现了几个同名列作为视图的字段,(,3,)需要在视图中为某个列启用新的更合适的名字,第三章,关系数据库标准语言,SQL 3.5,视图,例:,定义一个反映学生出生年份的视图,CREATE VIEW BT_S(,Sno,Sname,Sbirth,) AS,(,SELECT,Sno,Sname, 2002-Sage FROM S;,建立学生及其平均成绩视图,.,CREATE VIEW V_S_G_AVG(SNO,G_AVG),AS ( SELECT SNO,AVG(Grade),FROM SC,GROUP BY SNO ) ;,第三章,关系数据库标准语言,SQL 3.5,视图,CREATE VIEW F_STUDENT,(,SNO,,,NAME,,,AGE,),AS,(,SELECT *,FROM S,);,由于视图,F_STUDENT,是由子查询“,SELECT *”,建立的。如果以后修改了基本表,S,的结构, 则,S,表与,F_STUDENT,视图的映象关系被破坏,因而该视图就不能正确工作了。,可以通过修改了表结构后删除由该基本表导出的视图,然后重建同名视图的方法解决。,第三章,关系数据库标准语言,SQL 3.5,视图,视图不仅可以建立在单个基本表上,也可以建立在多个基本表上。,例 建立信息系选修了,1,号课程的学生的视图,CREATE VIEW IS_S1(Sno,Sname, Grade),AS,( SELECT S.,Sno,Sname, Grade,FROM S, SC,WHERE s.,Sno,=SC.,Sno,AND,Sdept,=IS AND,SC.,Cno,=1 );,第三章,关系数据库标准语言,SQL 3.5,视图,视图不仅可以建立在一个或多个基本表上,也可以建立在一个或多个已定义好的视图上, 或同时建立在基本表与视图上。,例: 建立信息系选修了,1,号课程且成绩在,90,分以上的学生的视图 。,CREATE VIEW IS_S2,AS,( SELECT,Sno,Sname, Grade,FROM IS_S1,WHERE Grade=90 );,第三章,关系数据库标准语言,SQL 3.5,视图,若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列但保留了码,我们称这些视图为,行列子集视图,。,定义视图时可以根据应用的需要,设置一些派生属性列。这些派生属性由于在基本表中并不实际存在,所以有时也称他们为,虚拟列,。带虚拟列的视图我们称为带,表达式的视图,。,还可以用带有集函数和,GROUP BY,子句的查询来定义视图。这种视图称为,分组视图,。,第三章,关系数据库标准语言,SQL 3.5,视图,比较:视图,V_CS,、,BT_S,及,V_S_G_AVG,CREATE VIEW V_CS( SNO,SNAME,SAGE,SDEPT ),AS ( SELECT SNO,SNAME,SAGE,SDEPT,FROM S,WHERE SDEPT=CS ) ;,CREATE VIEW BT_S(,Sno,Sname,Sbirth,) AS,(,SELECT,Sno,Sname, 2002-Sage FROM S );,定义,行列子集视图,定义,带,表达式的视图,第三章,关系数据库标准语言,SQL 3.5,视图,比较:视图,V_CS,、,BT_S,及,V_S_G_AVG,学号及他的平均成绩定义为一个视图,CREATE VIEW V_S_G_AVG(SNO,G_AVG),AS ( SELECT SNO,AVG(Grade),FROM SC,GROUP BY SNO ) ;,定义,分组,视图,第三章,关系数据库标准语言,SQL 3.5,视图,二、删除视图,语句格式为,:,DROP VIEW,视图名;,功能:删除视图后,视图的定义将从数据字典中删除。 但由该视图导出的其他视图定义仍在数据字典中,不过该视图已失效,要一一删除。,例:,DROP VIEW IS_S1;,在此基础上定义的视图,ISS2,失效!,第三章,关系数据库标准语言,SQL 3.5,视图,3.5.2,视图的查询,视图定义后,用户就可以象对基本表进行查询一样对视图进行查询了。,由于视图的查询上是对基本表的查询,因此基本表的变化可以反映到视图上。视图就如同窗口一样,通过视图可以看到基本表的变化,.,。通常,视图的查询的转换是直接了当的,但有时也会产生问题。,第三章,关系数据库标准语言,SQL 3.5,视图,例,:,SELECT SNO,SAGE,FROM V_CS,WHERE SAGE20;,系统执行此查询时首先进行,有效性检查,,检查查询的表、视图是否存在。 若存在,则从数据字典中取出视图的定义,把定义中的子查询和用户查询结合起来, 把它,转换成等价的对基本表的查询,.,形成一个修正的语句,这一过程称为,视图消解,。,第三章,关系数据库标准语言,SQL 3.5,视图,本例的修正后的查询语句中为:,SELECT SNO,SAGE,FROM S,WHERE SDEPT=CS AND SAGE= 90;,执行查询转换后得到一个不正确的查询语句,:,SELECT SNO,AVG(GRADE),FROM SC,WHERE AVG(GRADE)=90;,GROUP BY SNO;,第三章,关系数据库标准语言,SQL 3.5,视图,WHERE,子句中不能用库函数作为条件表达式。正确的查询语句应转换为,:,SELECT SNO,AVG(GRADE),FROM SC,GROUP BY SNO,HAVING AVG(GRADE) = 90;,但有些系统不能作这类查询转换,.,第三章,关系数据库标准语言,SQL 3.5,视图,3.5.3,视图的更新,更新视图是指通过视图插入(,INSERT,)、,删除(,DELETE,),和修改(,UPDATE,),数据。,由于视图是不实际存储数据的虚表,因此对,视图的更新,,最终要转换为对,基本表的更新,。,强调指出:,(,1,)对视图的更新最终要转换成对基本表的更新。,(,2,)视图的更新是受限的。,第三章,关系数据库标准语言,SQL 3.5,视图,一、通过视图修改数据,例,:,通过视图修改数据,UPDATE V_CS,SET SNAME=,李勇,MMMM,WHERE SNO=S1;,将转换成对基本表,S,的更新,:,UPDATE S,SET SNAME=,李勇,MMMM,WHERE SDEPT=CS AND SNO=S1;,“,CS”,系学生,第三章,关系数据库标准语言,SQL 3.5,视图,二、通过视图插入数据,例,:,通过视图插入数据,INSERT,INTO V_CS,VALUES(S12,YAN XI,19,CS);,将转换成对基本表的插入,:,INSERT,INTO S,VALUES(S12,YAN XI,19,CS);,CREATE VIEW V_CS ( SNO,SNAME,SAGE,SDEPT ),AS ( SELECT SNO,SNAME,SAGE,SDEPT,FROM S,WHERE SDEPT=CS );,第三章,关系数据库标准语言,SQL 3.5,视图,三、通过视图删除数据,DELETE,FROM V_CS,WHERE SNO =S1;,将转换成对基本表的删除:,DELETE,FROM S,WHERE SNO =S1 AND SDEPT = CS;,数据被删除,第三章,关系数据库标准语言,SQL 3.5,视图,一般地:,(1),行列子集视图是可更新的,即可执行,UPDATE,DELETE,和,INSERT,三类操作。,(2),有些视图虽然不是行列子集视图,但是从理论上讲仍是可更新的,(3),有些视图是不可更新的。,目前各个关系数据库系统一般都只允许对行列子集视图的更新,而各个系统对视图的更新还有进一步的规定。这些规定也不尽相同。,第三章,关系数据库标准语言,SQL 3.5,视图,在,DB2,中,只有从单个基本表导出的视图才允许对它进行更新操作并且有以下具体的限制,:,1.,若视图的字段是来自字段表达式或常数,则不允许对此视图执行,INSERT,UPDATE,操作,但允许执行,DELETE,操作,.,2.,若视图的字段是来自库函数,则此视图不允许更新,.,3.,基视图的定义中有,GROUP BY,子句,则此视图不允许更新,4.,若视图的定义中有,DISTINCT,任选项,则此视图不允许更新,5.,若视图的定义中有嵌套查询,并且嵌套查询的,FROM,子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。,6.,若视图是由一个以上基本表导出的则此视图不允许更新。,7.,一个不允许更新的视图上定义的视图不允许更新。,第三章,关系数据库标准语言,SQL 3.5,视图,3.5.4,视图的作用,视图的概念有很多优点,:,1.,简化了用户的操作;,2,使用户能以不同的方式看待同一数据;,3.,对重构数据库提供了一定程度的逻辑独立性;,4.,对机密数据提供了自动的安全保护功能,;,第三章,关系数据库标准语言,SQL 3.6,数据控制,由,DBMS,提供统一的数据控制功能是数据库系统的特点之一。,数据控制亦称为数据保护,包括数据的安全性控制、完整性控制、并发控制和数据库的恢复。,这里主要介绍,SQL,的安全性控制功能。,某个用户对某类数据具有何种操作权利是政策问题,不是技术问题。,第三章,关系数据
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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