可以使用 join…using 子句指定自然连接需要匹配的条件
on条件允许在参与有连接的关系的关系上设置通用谓词,该谓词的写法与where子句谓词类似
在on语句后写具体的条件
select * from student join takes on student.ID = takes.ID;
外连接运算与自然连接运算类似,只不过通过在结果中创建空值的方式,保留了在连接中丢失的元组
三种形式的外连接
select * from student natural left outer join takes;
SQL把常规连接叫内连接,使用inner join关键字
此外就是外连接,使用outer join关键字
create view view_name[(列名,列名,...)] as (查询表达式)
使用create view可以创建视图,列名为可选项,用户可以指定也可以不指定
删除视图
drop view view_name
视图中不会被分配空间,视图中也不会包含实际的数据,视图只保存视图的定义,视图中的数据是从基表中获取的。
视图的数据在视图被引用时动态生成
视图的查询与普通表的查询类似,这里不再赘述
在特定的数据库中,允许存储视图关系。如果用于定义视图的基本表中的数据有变化,那么该视图也需要变化
保持物化视图一直处于最新状态的过程被称为视图维护
视图更新可能存在问题,比如在插入数据时,如果视图的属性列少于基本表,那么可能会出现以下两种情况
因为存在种种问题,因此有的时候不支持对视图的更新,不同的数据库版本对视图更新的限制也不相同
事务由查询语句(select)和更新语句(update)构成,当一条SQL语句被执行,就隐式地开启了一个事务
当事务执行遇到错误时,回滚是有效的,一旦事务执行了commit,就不能通过rollback撤销了
在第三章的笔记中已经有了,这里不再赘述
可以为属性设置默认值
create table s
(
sex char(1) default '1',
sno char(5)
)
create index studentID_index on studuent(ID);
在student表上的ID属性列创建了索引,名为studentID_index
在数据库中,使用Blob或Clob存放数据量较大的对象
CLOB:字符数据的大对象类型
BLOB:二进制数据的大对象数据类型
创建自定义类型的语法
create type 类型名 数据类型
create type person_name char(20)
用户自定义类型的使用
create table S
(
a1 char(10),
a2 person_name
);
SQL提供了drop type和alter type子句来删除或修改以前创建过的类型
一般来说,数据库会给不同的用户设定不同的权限
比如授权某用户只能读取数据,只能插入数据,不能删除等等
授权的语法格式
grant 表级权限 on 关系名或视图名 to 用户/角色列表
例:
grant select on student to admin,Mike,Jack
grant update(budget) on department to Mike
撤销,收回权限
使用revoke关键字收回权限
revoke select on student to admin,Mike,Jack
角色:为了指明一类人应有的授权,提出了角色概念。
在数据库中建立角色集,并授予每个角色一定的权限,然后将角色分配给用户。
#创建角色并给角色相关的权限,最后将角色赋给对应的用户
create role teller;
grant select on account to teller;
grant insert,delete on customer to teller;
grant teller to Jack;