第四章:中级SQL
4.1链接
1.内连接:舍弃不匹配的元组
左外连接:内连接+左边失配的元组(缺少的右边关系属性用null)
右外连接:内连接+右边失配的元组(缺少的左边关系属性用null)
全外连接:内连接 + 左边失配的元组(缺少的右边关系属性用null)+ 右边失配的元组(缺少的左边关系属性用null)
2.①在表名后面加外连接操作符(*)或(+)指定非主体表
②非主体表有一“万能”的虚行,该行全部由空值组成
③虚行可以和主体表中所有不满足连接条件的元组进行连接
④由于虚行各列全部是空值,因此与虚行连接的结果中,来自非主体表的属性值全部是空值
4.2视图
1.创建视图
2.视图的属性名缺省为子查询结果中的属性名,也可以显式指明,在下列情况下,必须指明视图的所有列名:
①某个目标列是聚集函数或者目标列表达式
②多表连接时,选出了几个同名列作为视图的列名
③需要在视图中为某个列启用新的更合适的名字
④目标列是*
3.对于视图:
①视图不会要求分配存储空间,视图中也不会包含实际的数据。
②视图只保存视图定义,视图中的数据是从基表中获取。
③视图中的数据在视图被引用时动态的生成。
4.对视图的更新:
①允许对行列子集视图进行更新
②对其他类型视图的更新不同系统有不同限制
③select子句中的目标列不能包含聚集函数
④select子句中不能使用unique或distinct关键字
⑤不能包括group by子句
⑥不能包括经算术表达式计算出来的列
5.使用视图作为查询对象,尽量减少视图更新
6.物化视图:
物化视图(MATERIALIZED VIEW)即实体化视图,它确实存放有物理数据。物化视图包含定义视图的查询时所选择的基表中的行。
①使用物化视图的目的是为了提高查询性能,是以空间换时间的一种有效手段,更少的物理读/写,更少的cpu时间,更快的响应速度;
②物化视图对应用透明;
③物化视图需要占用存储空间;
④当基表发生变化时,物化视图也应当刷新。
⑤规模较大的报表适合使用物化视图来提高查询性能。
4.3完整性约束
1.主码值不允许空,也不允许出现重复
2.如果关系R2的外部码Fk与关系R1的主码Pk相对应,则R2中的每一个元组的Fk值或者等于R1 中某个元组的Pk 值,或者为空值
3.外码定义方式:
4.删除基本关系元组:
5.修改基本关系主码:
6.对约束的命名、撤消和添加
示例
alter table S drop constraint S_PK
alter table SC add constraint SC_CHECK
check(sno in select sno from S)
4.4SQL的数据类型与模式
1.date:日期,包括年(四位)、月和日
time: 时间,包括小时, 分和秒
timestamp : date 和 time 的组合
interval:时间段
Clob (Character Large Object,字符数据的大对象数据类型)将字符大对象 (Character Large Object) 存储为数据库表某一行中的一个列值。
Blob (Binary Large Object二进制数据的大对象数据类型)
BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件
当查询结果是一个大对象时,返回的是指向这个大对象的指针
2.用户定义的类型
3.域定义(感觉 有点少用)
4.5授权
1.权限的转授和回收:允许用户把已获得的权限转授给其他用户,也可以把已授给其他用户的权限再回收上来
2.授权命令
3.
4.回收权限
5.支持多库的数据库系统中授权对象可以是数据库
数据库级权限包括:
connect:允许用户在database语句中指定数据库
resource:connect权限+建表、删除表及索引权利
dba:resource权限 + 授予或撤消其他用户的connect、resource、dba权限
END