第四章 中级SQL (5、2)
4.1 连接表达式
4.1.1 连接条件
using
和on
的区别在于需要连接的两个表的属性名相同的时候使用using
和on
效果一样,而属性名不同的时候必须使用on
4.1.2 外连接
- 内连接:inner join 的 inner 可以省略,简写为 join ;同时 natural inner join 即 natural join 。未匹配的元组会被省略。
- 外连接
- 左外连接和右外连接:以右外连接为例,来自右侧关系中的不匹配左侧关系的元组会被补上空值,加入到内连接的结果当中。
- 全外连接:来自左侧与右侧中不匹配的关系其元组会被补上空值后加到内连接的结果当中。
4.2 视图
4.2.1 视图定义 creat view v … as
当视图关系被访问的时候,其中的元组是通过计算查询结果而被创建出来的。因此,视图关系是被需要的时候才被创建出来。因而每次调用时都会重新计算(随实际数据变化而变化)。
视图的属性名可以被定义。
4.2.2 SQL查询中使用视图
一旦定义了一个视图,我们就可以使用视图名代替该视图生成的虚关系。
4.2.3 物化视图
4.2.4 视图更新
视图必须满足如下条件才可以进行更新(插删更):
假设在向一个视图插入数据时,关系的属性与视图关系不完全匹配,那么要么①拒绝插入操作的执行;②为属性名不同的值进行空值补入(删除多出属性)。
4.4 完整性约束
4.4.1 单个关系约束 (4.4.1~4可见3.2节内容
4.4.2 not null
4.4.3 unique
4.4.4 check
4.4.5 参照完整性(外码)
4.4.6 事物中对完整性约束的违反![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RVyvqlRC-1650206656998)(pic\image-20220417220754275.png)]](https://img-blog.csdnimg.cn/8c3ad66f0d52430cb445d3be5d883f83.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARGV4dGVy6I-M,size_20,color_FFFFFF,t_70,g_se,x_16)
4.5 SQL数据类型与模式(2、3、4、5)
4.5.1 SQL中的日期和时间类型
4.5.2 默认值default
在创建时通过default
设置默认值
4.5.3 创建索引
4.5.4 大数据类型
如图片、视频等数据需要的存储空间非常大。SQL提供大对象数据类型(clob)
和二进制数据的大对象数据类型(blob)
,log 指 Large Object。
4.5.5 用户定义类型
-
结构化数据类型(structured data type) ×
-
独特类型 distinct type
create type Dollars as numeric(12 , 2) final;
创建的新类型可以在表格创建中使用。同时在域上可以进行约束。
4.6 授权Authorization
read
授权读取数据insert
授权插入新数据update
授权更新数据delete
授权删除数据
4.6.1 权限的授予和回收 grant & revoke
- 权限授予:
grant <权限列表>
on <关系名或视图名>
to <用户/角色列表>
- 权限收回:
revoke <权限列表>
on <关系名或视图名>
to <用户/角色列表>
用户名public
指代所有用户,包括未来用户。对public授权即对所有用户授权。
默认情况下被授予权限的用户不能再对其他用户授予权限。但在授权时可以指定权限接受者进一步授予其他用户权限。
SQL可以对一个关系或者关系的属性授予权利,但不能对关系中的指定元组进行授权。
4.6.2 角色 role
在数据库中创建角色集,可以给角色授权,而每个数据库的用户被授予了一组角色。
角色可以授予用户,也可以授予其他的角色。(底层角色的权限被上层同样拥有)
性授予权利,但不能对关系中的指定元组进行授权。