第三章 关系数据库标准语言SQL-2.ppt
《第三章 关系数据库标准语言SQL-2.ppt》由会员分享,可在线阅读,更多相关《第三章 关系数据库标准语言SQL-2.ppt(52页珍藏版)》请在三一文库上搜索。
1、第三章 关系数据库标准语言SQL,3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制 3.7 嵌入式SQL,3.4 数据更新,一、插入数据 二、修改数据 三、删除数据,一、插入数据,(1) 插入单个元组新元组插入指定表中。 语句格式: INSERT INTO (,) VALUES ( , ) ; INTO子句 指定要插入数据的表名及属性列 属性列的顺序可与表定义中的顺序不一致 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致 指定部分属性列:插入的元组在其余属性列上取空值 VALUES子句 提供的值的个数和值的类型
2、必须与INTO子句匹配,一、插入数据,例1 将一个新学生记录 ( 学号: 95020; 姓名: 陈冬; 性别: 男; 所在系: IS; 年龄: 18岁 ) 插入到Student表中。 INSERT INTO Student VALUES ( 95020 , 陈冬 , 男 , IS , 18) ; 例2 插入一条选课记录( 95020,1 )。 INSERT INTO SC(Sno,Cno) VALUES (95020 ,1) ; 注:新插入的记录在Grade列上取空值。,一、插入数据,(2) 插入子查询结果 语句格式: INSERT INTO ( , ) 子查询; INTO子句(与插入单条元组
3、类似) 指定要插入数据的表名及属性列 属性列的顺序可与表定义中的顺序不一致 没有指定属性列:表示要插入的是一条完整的元组 指定部分属性列:插入的元组在其余属性列上取空值 子查询 SELECT子句目标列属性的个数和类型必须与INTO子句匹配。,一、插入数据,例3 对每一个系,求学生的平均年龄,并把结果存入数据库。 第一步:建表 CREATE TABLE Deptage ( Sdept CHAR(15) , /* 系名*/ Avgage SMALLINT ) ; /*学生平均年龄*/ 第二步:插入数据 INSERT INTO Deptage( Sdept, Avgage) SELECT Sdept
4、, AVG(Sage) FROM Student GROUP BY Sdept ;,一、插入数据,DBMS在执行插入语句时会检查欲插入的元组是否会破坏表上已定义的完整性规则。如果破坏,系统会提示,且该记录不会被插入到数据库中。 实体完整性 对于插入的记录主码不为空且不可以与表中已有记录主码相同。 参照完整性 外码必须取空值或被参照关系中对应属性的值。 用户定义的完整性 对于有NOT NULL约束的属性列是否提供了非空值 对于有UNIQUE约束的属性列是否提供了非重复值 对于有值域约束的属性列所提供的属性值是否在值域范围内,二、修改数据,语句格式: UPDATE SET =, = WHERE ;
5、 功能: 修改指定表中满足WHERE子句条件的元组。 注: SET子句指定修改方式,要修改的列和修改后取值 WHERE子句 指定要修改的元组 缺省表示要修改表中的所有元组,二、修改数据,(1) 用WHERE子句指定修改单个记录 例4 将学生95001的年龄改为22岁。 UPDATE Student SET Sage = 22 WHERE Sno = 95001 ; (2) 用WHERE子句(或不用)指定修改多个记录 例5 将所有学生的年龄增加1岁。 UPDATE Student SET Sage = Sage+1; 例6 将信息系所有学生的年龄增加1岁。 UPDATE Student SET
6、Sage = Sage+1 WHERE Sdept = IS ;,二、修改数据,(3) 用子查询指定要修改的记录 例7 将计算机科学系全体学生的成绩置零。 UPDATE SC SET Grade=0 WHERE CS= ( SELECT Sdept FROM Student WHERE Student.Sno = SC.Sno) ;,二、修改数据,DBMS在执行修改语句时会检查欲修改的元组是否会破坏表上已定义的完整性规则。如果破坏,系统会提示,且该记录不会被修改。 实体完整性 对于修改的记录主码不为空且不可以与表中已有记录主码相同。 参照完整性 外码必须取空值或被参照关系中对应属性的值。 用户
7、定义的完整性 对于有NOT NULL约束的属性列是否提供了非空值 对于有UNIQUE约束的属性列是否提供了非重复值 对于有值域约束的属性列所提供的属性值是否在值域范围内,三、删除数据,语句格式: DELETE FROM WHERE ; 功能 删除指定表中满足WHERE子句条件的元组 注: WHERE子句 指定要删除的元组 缺省表示要修改表中的所有元组,三、删除数据,(1) 用WHERE子句指定删除单个记录 例8 删除学号为95019的学生记录。 DELETE FROM Student WHERE Sno = 95019 ; (2) 用WHERE子句(或不用)指定删除多个记录 例9 删除2号课程
8、的所有选课记录。 DELETE FROM SC WHERE Cno = 2 ; 例10 删除所有的学生选课记录。 DELETE FROM SC ;,三、删除数据,(3) 用子查询指定要删除的记录 例11 删除计算机科学系所有学生的选课记录。 DELETE FROM SC WHERE CS = ( SELECT Sdept FROM Student WHERE Student.Sno=SC.Sno ) ; 或 DELETE FROM SC WHERE Sno IN ( SELECT Sno FROM Student WHERE Student.Sno = CS ) ;,三、删除数据,DBMS在执
9、行删除语句时会检查所删除的元组是否会破坏表上已定义的完整性规则。如果破坏,系统会提示,且该记录不会被删除。 参照完整性 不允许删除 级联删除(用CASCADE参数指定) 例:删除学号为95019的学生记录。 DELETE FROM Student WHERE Sno = 95019 ; 则此时在SC表中依然有学号为95019的学生的选课记录,破坏了参照完整性。需要采用级联删除的方法或是用显式的SQL语句删除SC表中的数据。,3.4 数据更新,DBMS在执行插入、删除、修改语句时 必须保证数据库的完整性和一致性。 必须以事务处理的方式进行数据更新 完整性检查和保证 例:从帐户A向帐户B转帐100
10、元,使用的处理方式分为两步: (1) 从帐户A减去100元; (2) 给帐户B加上100元。 要求这两步要么不作,要么全部执行。否则会引起数据库的不一致性。需要用事务处理程序实现这一转帐操作。 例:删除某一学生记录,必须删除该学生的选课记录,需要两条显式的删除语句时,也要使用事务处理的方法实现。这种情况通常采用一种特殊的事务触发器,当删除学生记录时由触发器调用删除该学生选课记录的程序来实现。,第三章 关系数据库标准语言SQL,3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制 3.7 嵌入式SQL,3.5 视图,什么是视图(View)? 视图是
11、从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。 在数据字典中只存放视图的定义,不会出现数据冗余。 基表中的数据发生变化,从视图中查询出的数据也随之改变。 视图一经定义,就可以和基本表一样被查询和删除,并且可以在视图之上再定义新的视图。 视图的更新(增加、删除、修改)操作会受到一定的限制。 视图对应三级模式体系结构中的外模式。,一、视图定义,(1) 建立视图 语句格式: CREATE VIEW ( ,) AS WITH CHECK OPTION; CREATE VIEW 子句中的列名可以省略,此时视图的属性由子查询中SELECT目标列中的诸字段组成。但在下列情况下明确指定视图
12、的所有列名: (1) 某个目标列是集函数或列表达式 (2) 多表连接时选出了几个同名列作为视图的字段 (3) 需要在视图中为某个列启用新的更合适的名字 子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。 WITH CHECK OPTION表示对视图进行更新操作的数据必须满足视图定义的谓词条件(子查询的条件表达式)。,一、视图定义,DBMS执行CREATE VIEW语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。 例1 建立信息系学生的视图。 CREATE VIEW IS_St
13、udent AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept= IS ; 若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了码,这类视图称为行列子集视图。 上例所建立的视图即为行列子集视图。,例2 建立信息系学生的视图,并要求透过该视图进行的更新操作只涉及信息系学生。 CREATE VIEW IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept= IS WITH CHECK OPTION ; 针对此视图,当进行以下操作时, 修改操作:DBMS
14、自动加上Sdept= IS的条件 删除操作:DBMS自动加上Sdept= IS的条件 插入操作:DBMS自动检查Sdept属性值是否为IS (1) 如果不是,则拒绝该插入操作 (2) 如果没有提供Sdept属性值,则自动定义Sdept为IS,一、视图定义,例3 建立信息系选修了1号课程的学生视图。 CREATE VIEW IS_S1( Sno, Sname, Grade ) AS SELECT Student.Sno, Sname, Grade FROM Student, SC WHERE Sdept= IS AND Student.Sno=SC.Sno AND SC.Cno= 1 ; 例4
15、建立信息系选修了1号课程且成绩在90分以上的学生的视图。 CREATE VIEW IS_S2 AS SELECT Sno, Sname, Grade FROM IS_S1 WHERE Grade=90;,一、视图定义,例5 定义一个反映学生出生年份的视图。 CREATE VIEW BT_S(Sno, Sname, Sbirth) AS SELECT Sno, Sname, 2000-Sage FROM Student ; 当子查询中有由表达式构成的派生属性列(也称为虚拟列)时,必须明确定义组成视图的各个属性列名。 例6 将学生的学号及他的平均成绩定义为一个视图 CREATE VIEW S_G
16、(Sno, Gavg) AS SELECT Sno, AVG (Grade) FROM SC GROUP BY Sno ;,一、视图定义,例7 将Student表中所有女生记录定义为一个视图 CREATE VIEW F_Student1 (stdnum, name, sex, age, dept) AS SELECT * FROM Student WHERE Ssex=女; 存在问题: 修改基表Student的结构后(在非末尾增加一列),Student表与F_Student1视图的映象关系会被破坏,导致该视图不能正确工作。 处理方法: 在子查询的SELECT子句中明确指出各属性列的名称,可以避
17、免对基本表的属性列增加而破坏与视图间的映象关系,但不能解决修改列名的问题,因此对基本表修改后采用重建视图的方法。,一、视图定义,(2) 删除视图 语句格式: DROP VIEW ; 注: 该语句从数据字典中删除指定的视图定义 由该视图导出的其他视图定义仍在数据字典中,但已不能使用,必须显式删除 删除基表时,由该基表导出的所有视图定义都必须显式删除 例8 删除视图IS_S1 DROP VIEW IS_S1 ; 由于有在视图IS_S1之上建立的视图IS_S2,在IS_S1被删除后IS_S2已经无法使用,这时应该使用下列语句删除IS_S1: DROP VIEW IS_S2 ;,二、查询视图,从用户角
18、度:查询视图与查询基本表相同 DBMS实现视图查询的方法 实体化视图(View Materialization) (1) 有效性检查:检查所查询的视图是否存在 (2) 执行视图定义,将视图临时实体化,生成临时表 (3) 查询视图转换为查询临时表 (4) 查询完毕删除被实体化的视图(临时表) 视图消解法(View Resolution) (1) 进行有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义 (2) 把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询 (3) 执行修正后的查询,例1 在信息系学生的视图中找出年龄小于20岁的学生。 信息系学生
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三章 关系数据库标准语言SQL-2 第三 关系 数据库 标准 语言 SQL
链接地址:https://www.31doc.com/p-5030424.html