数据库系统概论——第三章 关系数据库标准语言SQL(四)

数据库系统概论——第三章 关系数据库标准语言SQL(四)

一、数据更新
1. 插入数据

两种插入数据方式
(1)插入元组
(2)插入子查询结果:可以一次插入多个元组

(1)插入元组

into子句:
(1)指定要插入数据的表名及属性列
(2)指定列的顺序可与表定义中的顺序不一致
(3)没有指定属性列:表示要插入的是一条完整的元组,属性列与表定义中的顺序一致
(4)指定部分属性列:插入的元组在其余属性列上取空值

values子句
(1)提供的值必须与into子句匹配
1)值的个数
2)值的类型

eg:将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。

(2)插入子查询结果

into子句
子查询:select 子句目标列必须与into子句匹配

eg: 对每一个系,求学生的平均年龄,并把结果存入数据库

(1)建表

(2)插入数据

关系dbms在执行插入语句时会检查所插入元组是否破坏表上已定义的完整性规则
(1)实体完整性
(2)参照完整性
(3)用户定义完整性
①not null 约束
②unique约束
③值域约束

2. 修改数据

修改指定表中满足where子句条件的元组
set子句给出<表达式>的值用于取代相应的属性列
如果省略where子句,表示修改表中的所有元组

三种修改方式
(1)修改某一个元组的值
(2)修改多个元组的值
(3)带子查询的修改语句

eg:将计算机科学系全体学生的成绩置零

关系dbms在执行修改语句时会检查所插入元组是否破坏表上已定义的完整性规则
(1)实体完整性
(2)参照完整性
(3)用户定义完整性
①not null 约束
②unique约束
③值域约束

3. 删除数据

WHERE子句
(1)指定要删除的元组
(2)缺省表示要删除表中的全部元组,表的定义仍在字典中

三种删除方式
(1)删除某一个元组的值
(2)删除多个元组的值
(3)带子查询的删除语句

eg:删除计算机科学系所有学生的选课记录。

二、空值的处理

空值就是“不知道”或“不存在”或“无意义”的值
一般有以下几种情况:
(1)该属性应该是一个值,但目前不知道它的具体值
(2)该属性不应该有值
(3)由于某种原因不便于填写

空值是一个很特殊的值,含有不确定性。对关系运算带来特殊的问题,需要做特殊的处理。

空值的产生
[例 ]向SC表中插入一个元组,学生号是”201215126”,课程号是”1”,成绩为空。
[例] 将Student表中学生号为”201215200”的学生所属的系改为空值。
UPDATE Student
SET Sdept = NULL
WHERE Sno=‘201215200’;

空值的判断
判断一个属性的值是否为空值,用IS NULL或IS NOT NULL来表示。
【例】从Student表中找出漏填了数据的学生信息
SELECT *
FROM Student
WHERE Sname IS NULL OR Ssex IS NULL OR Sage IS NULL OR Sdept IS NULL;

  1. 属性定义(或者域定义)中
    (1)有not null约束条件不能取空值
    (2)加了unique限制的属性不能取空值
    (3)码属性不能取空值

2. 空值的算数运算、比较运算和逻辑运算
(1)空值与另一个值(包括另一个空值)的算术运算的结果为空值
(2)空值与另一个值(包括另一个空值)的比较运算的结果为UNKNOWN。
(3)有UNKNOWN后,传统二值(TRUE,FALSE)逻辑就扩展成了三值逻辑

true and unknown :unknown false and unknown:false ture or unknown:true false or unknown:unknown

三、视图

视图的特点:
(1)虚表,是从一个或几个基本表(或视图)导出的表
(2)值存放视图的定义,不存放视图对应的数据
(3)基表中的数据发生变化,从视图中查询出的数据也随之改变

1. 定义视图
(1)建立视图

(1)With check option
对视图进行UPDATE,INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
(2)子查询可以是任意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,则决定具体系统的实现。
(3)组成视图的属性列名:①全部省略②全部指定
(4)关系数据库管理系统执行CREATE VIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句。
(5)在对视图查询时,按视图的定义从基本表中将数据查出。

eg:建立信息系学生的视图

eg:建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生 。

定义IS_Student视图时加上了WITH CHECK OPTION子句,对该视图进行插入、修改和删除操作时,RDBMS会自动加上Sdept='IS’的条件。

行列子集视图:若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,我们称这类视图为行列子集视图。

在这里插入图片描述
(2)删除视图

(1)该语句从数据字典中删除指定的视图定义
(2)如果该视图上还导出了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除
(3)删除基表时,由该基表导出的所有视图定义都必须显式地使用DROP VIEW语句删除

视图bt_s由视图is_s1导出
那么:drop view is_s1 ;拒绝执行
必须使用级联删除 即 drop view is_s1 cascade;

2. 查询视图

用户角度:查询视图与查询基本表相同
关系dbms实现视图查询的方法
(1)视图消解法(View Resolution)
①进行有效性检查
②转换成等价的对基本表的查询
③执行修正后的查询

视图消解法的局限
有些情况下,视图消解法不能生成正确的查询。

3. 更新视图

(1)更新视图,实际上就是对相应基本表的更新
(2)更新视图的限制:一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应的基本表的更新
(3)允许对行列子集视图进行更新
(4)对其他类型视图的更新不同系统有不同限制

一个不允许更新的视图上定义的视图也不允许更新

4. 视图的作用

(1)视图能够简化用户的操作

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

5. 小结

(1)SQL可以分为数据定义、数据查询、数据更新、数据控制四大部分 (2)SQL是关系数据库语言的工业标准。大部分数据库管理系统产品都能支持SQL92,但是许多数据库系统只支持SQL99、SQL2008和SQL2011的部分特征,至今尚没有一个数据库系统能够完全支持SQL99以上的标准。