数据库原理 第三章:关系数据库标准语言 SQL

43
数数数数数 数数数 数数数数数数数数数 SQL 授授授授 授授

description

数据库原理 第三章:关系数据库标准语言 SQL. 授课教师:王哲. 复习上节课内容. 连接查询 语法结构(多表查询) 使用表的别名 表自身连接 外连接 嵌套查询 集合查询. 连接查询. 一般格式: select [all|distinct] < 目标列表达式 >[,< 目标列表达式 >]… from < 表名 1>[,< 表名 2>]… [where < 条件表达式 >] < 条件表达式 > 一般表示为: [< 表名 1>.]< 列名 1> < 比较运算符 > [< 表名 2>.]< 列名 2>. 连接查询 等值和非等值连接 - PowerPoint PPT Presentation

Transcript of 数据库原理 第三章:关系数据库标准语言 SQL

Page 1: 数据库原理  第三章:关系数据库标准语言 SQL

数据库原理 第三章:关系数据库标准语言 SQL

授课教师:王哲

Page 2: 数据库原理  第三章:关系数据库标准语言 SQL

复习上节课内容连接查询

语法结构(多表查询) 使用表的别名 表自身连接 外连接

嵌套查询集合查询

Page 3: 数据库原理  第三章:关系数据库标准语言 SQL

连接查询 一般格式:

select [all|distinct] < 目标列表达式 >[,< 目标列表达式 >]…

from < 表名 1>[,< 表名 2>]…

[where < 条件表达式 >]

< 条件表达式 > 一般表示为:[< 表名 1>.]< 列名 1> < 比较运算符 > [< 表名 2>.]< 列名 2>

Page 4: 数据库原理  第三章:关系数据库标准语言 SQL

连接查询 等值和非等值连接 使用表的别名 自身连接 以 JOIN 关键字指定的外连接

Page 5: 数据库原理  第三章:关系数据库标准语言 SQL

嵌套查询

T-SQL 允许 SELECT 多层嵌套使用,即一个子查询中还可以嵌套子子查询,用来表示复杂的查询,从而增强 SQL 的查询能力。

子查询通常与 IN 、比较运算符及 EXISTS 谓词结合使用。 带有 In 谓词的子查询 带有比较运算符的子查询 带有 EXISTS 谓词的子查询

Page 6: 数据库原理  第三章:关系数据库标准语言 SQL

集合查询 集合操作的种类

并操作 UNION

交操作 INTERSECT

差操作 EXCEPT

参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同。

Page 7: 数据库原理  第三章:关系数据库标准语言 SQL

问题:

SELECT student.sno,sname

FROM Student,sc

WHERE cno='2‘ and Student.Sno = SC.Sno

1 、查询选修课程号为 2 的学号、学生姓名; SELECT sno, sname

FROM Student,sc

WHERE cno='2'

注意:•加上表名前缀是为了避免重复字段混淆;•应将两个表中同一学生的元组连起来;

Page 8: 数据库原理  第三章:关系数据库标准语言 SQL

本节课内容认识视图视图的相关操作

创建视图 查询 更新 修改 删除

Page 9: 数据库原理  第三章:关系数据库标准语言 SQL

一、视图创建视图(使用界面及 T-SQL 语言)查询视图更新视图修改视图删除视图

Page 10: 数据库原理  第三章:关系数据库标准语言 SQL

1 、认识视图 视图是一种数据库对象,是从一个或者多个数据表或视图中导

出的虚表,视图的结构和数据是对数据表进行查询的结果; 只存放视图的定义,不存放视图对应的数据; 基表中的数据发生变化,从视图中查询出的数据也随之改变。

Page 11: 数据库原理  第三章:关系数据库标准语言 SQL

使用视图的注意事项

只能在当前数据库中创建视图; 视图的命名必须遵循标识符命名规则,不可与表同名; 如果视图中某一列是函数、数学表达式、常量或者来自

多个表的列名相同,则必须为列定义名称。 不能在临时表上创建视图也不能创建临时视图。 定义视图时的查询语句通常不允许含有 order by 子句

或是 into 等关健字。

Page 12: 数据库原理  第三章:关系数据库标准语言 SQL

2 、使用 T-SQL 语句创建视图

用 CREATE VIEW 语句创建视图,其表示形式为:

CREATE VIEW 视图名 [( 列名 1, 列名 2[,…n])]

AS < 查询语句 >

[WITH CHECK OPTION]

Page 13: 数据库原理  第三章:关系数据库标准语言 SQL

查询语句:用来创建视图的 SELECT 语句。但对 SELECT 语句有以下的限制:① 定义视图的用户必须对所参照的表或视图有查询权限,即可执行 SELECT 语句。② 不能使用 COMPUTE或 COMPUTE BY 子句。③ 不能使用 ORDER BY 子句。④ 不能使用 INTO 子句。⑤ 不能在临时表或表变量上创建视图。

WITH CHECK OPTION :指出在视图上所进行的修改都要符合查询语句所指定的限制条件,这样可以确保数据修改后仍可通过视图看到修改的数据。

Page 14: 数据库原理  第三章:关系数据库标准语言 SQL

例 2 : 创建计算机系学生基本信息视图 stu_cs;

例 1 :创建所有学生学号、姓名及年龄的信息视图 stu_info;

CREATE VIEW stu_cs

AS

SELECT sno,sname,sage,ssex from student

Where sdept=‘CS’

CREATE VIEW stu_infoAS SELECT sno,sname,sage From student

Page 15: 数据库原理  第三章:关系数据库标准语言 SQL

例 3 :创建信息系男学生基本信息视图 stu_is ,包括学生的学号、姓名及年龄 , 并要求进行修改和插入操作时仍需保证该视图只有信息系的学生 ;

CREATE VIEW stu_is

AS

SELECT sno,sname, sage from student

Where sdept = ‘IS’ and ssex=‘ 男’WITH CHECK OPTION

例 4 :创建年龄大于 20 的各学生的学号、姓名及年龄的视图 stu_age ,并保证对视图文本的修改都要符合年龄大于 20 这个条件。

CREATE VIEW stu_age

AS

SELECT sno,sname,sage from student where sage>20

WITH CHECK OPTION

Page 16: 数据库原理  第三章:关系数据库标准语言 SQL

With check option

对 Stu_IS及 stu_age 视图的更新操作: 修改操作:自动加上 Sdept= 'IS' 的条件 删除操作:自动加上 Sdept= 'IS' 的条件 插入操作:自动检查 Sdept 属性值是否为 'IS'

如果不是,则拒绝该插入操作 如果没有提供 Sdept 属性值,则自动定义 Sdept 为 'IS’

Page 17: 数据库原理  第三章:关系数据库标准语言 SQL

2 )创建基于多个基表的视图

例 1:建立信息系选修了 1 号课程的学生视图 stu_is_c1;CREATE VIEW stu_is_c1

AS

SELECT Student. Sno,Sname,Grade

FROM Student,SC

WHERE Sdept= ‘IS’ AND SC.Cno= '1'

AND Student.Sno=SC.Sno

Page 18: 数据库原理  第三章:关系数据库标准语言 SQL

CREATE VIEW stu_is_c1( 学号 , 姓名 , 成绩 )

AS

SELECT Student. Sno,Sname,Grade

FROM Student,SC

WHERE Sdept= 'IS' AND

Student.Sno=SC.Sno AND

SC.Cno= '1'

Page 19: 数据库原理  第三章:关系数据库标准语言 SQL

例 2 :创建学生选修课程详细情况视图 stu_sc ;

CREATE VIEW stu_sc

AS

SELECT s.sno,sname,ssex, sage , sdept , c.cno , cname ,grade

From student s , sc , course c

Where s.sno=sc.sno and c.cno=sc.cno

Page 20: 数据库原理  第三章:关系数据库标准语言 SQL

3 )创建基于视图的视图

例 1:建立信息系选修了 1 号课程且成绩在 90分以上的学生的视图 ;

CREATE VIEW stu_is_grade

AS

SELECT Sno, Sname, Grade

FROM stu_is

WHERE Grade>=90 ;

Page 21: 数据库原理  第三章:关系数据库标准语言 SQL

4 )创建带表达式的视图

例 1: 定义一个反映学生出生年份的视图 ;

CREATE VIEW stu_year(Sno , Sname , Sbirth)

AS

SELECT Sno , Sname ,出生年份 =2007-Sage

FROM Student

Page 22: 数据库原理  第三章:关系数据库标准语言 SQL

5 )创建分组视图

例 1:将学生的学号及其平均成绩定义为一个视图 ;

CREATE VIEW S_G(Sno, Gavg)

AS

SELECT Sno, AVG(Grade)

FROM SC

GROUP BY Sno

Page 23: 数据库原理  第三章:关系数据库标准语言 SQL

3 、查询视图

视图定义后,就可以像查询基本表那样对视图进行查询。 如果与视图相关联的表或视图被删除,则该视图将不能再使用。 使用视图查询时,若其关联的基本表中添加了新字段,则必须重新创

建或者修改视图才能查询到新字段。 查看视图的 T-SQL 定义: sp_helptext

实现视图查询的方法——视图消解法( View Resolution ) 进行有效性检查,转换成等价的对基本表的查询 执行修正后的查询

Page 24: 数据库原理  第三章:关系数据库标准语言 SQL

例 1 :查询计算机系年龄大于 20的学生;

SELECT * From stu_cs

WHERE sage>=20

视图消解转换后的查询语句为: SELECT Sno , Sname , Sage

FROM Student

WHERE Sdept= ‘CS' AND Sage>=20

Page 25: 数据库原理  第三章:关系数据库标准语言 SQL

例 2 :查询选修了 1 号课程的信息系学生;

SELECT * FROM stu_is_c1

视图消解转换后的查询语句为: SELECT Student.Sno , Sname

FROM Student , SC

WHERE Student.Sno =SC.Sno AND SC.Cno= '1‘ AND

sdept=‘CS’

Page 26: 数据库原理  第三章:关系数据库标准语言 SQL

4 、更新视图

更新视图是指通过视图来插入( Insert )、修改( update )和删除( delete )数据;

由于视图是虚表,因此对视图的更新最终要转换为对基本表的更新;

为了防止用户对不属于视图范围内的基本表数据进行操作,可在定义视图时加上 with check option 子句。

Page 27: 数据库原理  第三章:关系数据库标准语言 SQL

在关系数据库中,并不是所有的视图都是可更新的,因为有些视图的更新并不能有意义地转换成相应表的查询。

所以要通过视图更新表数据,必须保证视图是可更新视图。 对视图进行更新操作时,还要注意基本表对数据的各种约束和规

则要求。

Page 28: 数据库原理  第三章:关系数据库标准语言 SQL

可更新视图的条件

创建视图的 select 语句中没有聚合函数,且没有top、 group by、 having及 distinct 关键字;

创建视图的 select 语句的各列必须来自于基表(视图)的列,不能是表达式;

视图定义必须是一个简单的 SELECT 语句,不能带连接、集合操作。即 SELECT 语句的 FROM 子句中不能出现多个表,也不能有 JOIN、 EXCEPT、 UNION、 INTERSECT ;

Page 29: 数据库原理  第三章:关系数据库标准语言 SQL

对于视图: stu_info 、 stu_cs、 stu_is 、 stu_age

、 stu_is_c1 、 stu_sc 、 stu_is_grade、 stu_year

、 S_G、 stu_nv 中完全不可更新视图有: stu_sc 、 stu_year、 S_G

Page 30: 数据库原理  第三章:关系数据库标准语言 SQL

1 )在视图中插入数据使用 insert 语句通过视图向基本表插入数据。由于视图不一定包括表中的所有字段,所以在插入记录时

可能会遇到问题。视图中那些没有出现的字段无法显式插入数据,假如这些

字段不接受系统指派的 null 值,那么插入操作将失败。

Page 31: 数据库原理  第三章:关系数据库标准语言 SQL

例 1: 向视图 stu_info 中插入一个新的学生记录,学号为200515006 ,姓名为王无,年龄为 20 ;Insert into stu_info

Values('200515006','王无 ',20)

等价于:Insert into student( sno, sname, sage )Values('200515026','王无 ',20)

Page 32: 数据库原理  第三章:关系数据库标准语言 SQL

例 2: 向视图 stu_is 中插入一个新的学生记录,学号为200515027 ,姓名为王唔,年龄为 20 ;Insert into stu_is

Values(‘200515027’,‘王唔 ',20)

等价于:

Insert into student( sno, sname, sage, ssex,sdep

t )Values(‘200515026’,‘王无’ ,20 ,‘男’ ,‘IS’)

Page 33: 数据库原理  第三章:关系数据库标准语言 SQL

例 3: 向视图 stu_is_c1 中插入一个新的学生记录,学号为200515027 ,姓名为王唔,成绩为 60 ;Insert into stu_is_c1

Values(‘200515027’,‘王唔 ',60)

“系统将发出错误信息: 视图或函数 stu_is_c1不可更新,因为修改会影响多个基表”。在表 sc中,只有成绩而主键课程号 cno不确定,显然不能把数据插入 sc表中。

Page 34: 数据库原理  第三章:关系数据库标准语言 SQL

例 4: 向视图 S_G 中插入一个新的学生记录,学号为200515027 ,平均成绩为 60 ;Insert into S_G Values(‘200515027’ , 60)

“系统将发出错误信息: ‘视图或函数 e_view’ 不可更新,因为它包含聚合函数。

Page 35: 数据库原理  第三章:关系数据库标准语言 SQL

2 )通过视图更新数据

使用 UPDATE语句可以通过视图修改基本表的数据。例 1 :将视图 stu_info中学号为“ 200515001”的学生姓名改为“张

山”update stu_info

set sname='张山 '

where sno='200515001‘

等价于:update student

set sname='张山 '

where sno='200515001‘

Page 36: 数据库原理  第三章:关系数据库标准语言 SQL

例 2 :将视图 stu_is中学号为“ 200515004”的学生姓名改为“张珊”update stu_is

set sname=‘张珊 '

where sno='200515004‘

等价于:update student

set sname=‘张珊 '

where sno=‘200515004‘ and sdept=‘IS’ and ssex=‘男’

Page 37: 数据库原理  第三章:关系数据库标准语言 SQL

若更新视图时只影响其中一个表,同时新数据值中含有主键字,系统将接受这个修改操作。

例 3 :将视图 stu_is_c1 中学号为“ 200515006”的学生成绩改为 75;Update stu_is_c1

Set grade=75

Where sno='200515006‘

等价于:Update sc

Set grade=75

Where sno='200515006‘ and cno=‘1’

Page 38: 数据库原理  第三章:关系数据库标准语言 SQL

3 )通过视图删除数据使用 DELETE 语句可以通过视图删除基本表的数据。但对于依赖于多个基本表的视图,不能使用 DELETE 语句。例 1 :删除视图 stu_is 中学号为“ 200515020” 的学生记录

DELETE

FROM stu_is

WHERE Sno= ' 200215020 ‘

等价于:DELETE

FROM Student

WHERE Sno= ‘ 200215020 ’ AND Sdept= ‘IS‘ AND ssex=‘ 男’

Page 39: 数据库原理  第三章:关系数据库标准语言 SQL

5 、修改视图

格式:ALTER VIEW view_name [(column[,...n])]

AS

select_statement

[ WITH CHECK OPTION ]

Page 40: 数据库原理  第三章:关系数据库标准语言 SQL

例 1 :将 stu_info 视图修改为只包含学生学号、姓名。Alter view stu_info

AS

Select sno, sname from student

例 2 :将 stu_is 视图修改为只包含信息系学生学号、姓名及年龄。 Alter

view stu_is

AS

Select sno, sname, sage from student

Where sdept =‘IS’

Page 41: 数据库原理  第三章:关系数据库标准语言 SQL

6 、删除视图删除视图的 T-SQL 语句是 DROP VIEW ,格式为:

DROP VIEW { view } [ , …n ]

例 1 :同时删除视图 stu_is和 s_g 。drop view stu_is , s_g

Page 42: 数据库原理  第三章:关系数据库标准语言 SQL

视图的优点( P125 ):

1. 视图能够简化用户的操作; 2. 视图使用户能以多种角度看待同一数据; 3. 视图对重构数据库提供了一定程度的逻辑独立性; 4. 视图能够对机密数据提供安全保护; 5. 适当的利用视图可以更清晰的表达查询。

Page 43: 数据库原理  第三章:关系数据库标准语言 SQL

总结

本次课学习内容管理视图

创建、查询、更新、编辑及删除