周末无事水文章,期末备考的总结资料
第四章 中级SQL
4.1 连接表达式
4.1.1 连接条件
select *
from student
join takes on student.ID = takes.ID;
4.1.2 外连接
- 连接操作的扩展,可避免信息丢失
- 分类
–左外连接(left outer join):保留在左外连接运算之前(左边)的关系中的元组
*例子:
–右外连接(right outer join):保留在右外连接运算之后(右边)的关系中的元组select * from course natural left outer join prereq
*例子:
–全外连接(full outer join):都保留select * from course natural right outer join prereq
*例子:select * from course natural full outer join prereq
4.1.3 连接类型和条件
- 内连接(常规连接):
inner join
或join
4.2 视图
- 目的:出于安全考虑,可能需要向用户隐藏特定的数据
- 实现:SQL允许通过查询来定义“虚关系”,它在概念上包含查询结果。虚关系并不预先计算并存储,而是在使用虚关系的时候才通过执行查询被计算出来
4.2.1 视图定义
create view faculty as
select ID, name, dept_name
from instructor
4.2.2 SQL查询中使用视图
4.2.3 物化视图(materialized view)
- 限定:如果用于定义视图的实际关系改变,视图也跟着改变
- 保持物化视图一直在最新状态的过程称为物化视图维护(materialized view maintenance)
4.2.4 视图更新
- 如果定义视图的查询满足下列条件,则称SQL视图是可更新的(updatable)
–from子句中只有一个数据库关系
–select子句中只包含关系的属性名,不包含任何表达式、聚集或distinct声明
–任何没有出现在select子句中的属性可以取空值;即这些属性上没有not null约束,也不构成主码的一部分
–查询中不含有group by或having子句
4.3 事务(Transaction)
- 由查询和(或)更新语句的序列组成
- 下列SQL语句之一会结束一个事务:
–Commit work:提交当前事务,也就是将该事务所做的更新在数据库中持久保存
–Rollback work:回滚当前事务,即撤销该事务中所有SQL语句对数据库的更新
4.4 完整性约束(Integrity Constraints)
- 作用:保证授权用户对数据库所做的修改不会破坏数据的一致性
4.4.1 单个关系上的约束
not null
、unique
、check(<谓词>)
4.4.2 not null约束
- 作用:禁止空值
- 用法:
name varchar(20) not null
4.4.3 unique约束
- 作用:指出括号内的属性形成一个候选码,即在关系中没有两个元组能在所有列出的属性上取值相同
- 用法:
unique ( A1, A2, …, Am)
4.4.4 check子句
- 作用:指定一个谓词P,关系中的每个元组都必须满足谓词P
create table course(
course_id varchar (8),
semester varchar (6),
check (semester in ('Fall', 'Winter', 'Spring', 'Summer'))
);
4.4.5 参照完整性(Referential Integrity)
- 保证在一个关系中给定属性集上的取值也在另一个关系的特点属性集的取值中出现
- 若有
on delete cascade
,如果删除表中的元组导致了此参照完整性约束被违反,则删除并不被系统拒绝,而是作“级联”删除
4.4.6 事务中对完整性约束的违反
4.4.7 复杂check条件与断言
- 断言(assertion):希望数据库总能满足的一个条件
–形式:create assertion <assertion-name> check <predicate>
;
4.5 SQL的数据类型与模式
4.5.1 SQL中的日期和时间类型
- date:日期,年月日
- time:时分秒
- timestamp:date + time
4.5.2 默认值
create table student(
ID varchar(5),
Name varchar(20) not null,
Dept_name varchar(20),
Tot_cred numeric (3, 0) default 0
);
4.5.3 创建索引
create index studentID_index on student(ID)
4.5.4 大对象类型
4.5.5 用户定义的类型
create type Dollars as numeric (12,2) final
4.5.6 create table的扩展
create table A like B --创建一个与B具有相同模式的新表A
4.5.7 模式、目录与环境
4.6 授权
- 类型:增、删、查、改
4.6.1 权限的授予与回收
- 授予:
grant select on department to Amit, Satoshi;
- 回收:
revoke select on department to Amit, Satoshi;
4.6.2 角色
- 一类身份的标识,可把它的权限赋予给用户
create role instructor; grant instructor to Amit;
4.6.3 视图的授权
grant select on geo_instructor to geo_staff