一、基本数据类型
1.char与varchar,char是固定字符串长度,varchar是可变字符串长度。
2.int与smallint,smallint是int长度的一半。
3.numeric(p,d)总长度p位,小数点后d位。
4.real,double precision精度,float(n)精度至少为n位。
5.time,data,timestamp
6.default,缺省值
二、DDL与DML
DDL是数据定义语言,定义模式,DML是数据操纵语言,主要是查询。
三、SQL语句
1.创建模式:create
create table instructor
(
ID varchar(20),
name varchar(20) not null,
dept_name varchar(20) not null,
salary int,
primary key(ID)
foreign key(name) references temp
);
create table扩展:create table temp like instructor
create table temp as select * from instructor with data
2.修改数据库:insert,delete,drop,update,alter
往instructor关系中插入:insert into instructor values (10010,'smith','biology',1000);
把在instructor中满足谓词P的元组插入到instructor:insert into instructor select * from instructor where P
delete from instructor:删除所有元组但保留模式;
delete from instructor where P删除所有满足谓词P的元组
update instructor set salary=salary*1.05 where P:满足谓词P的所有员工工资涨%5
case语句:update instructor set salary= case when salary<10000 then salary*1.05 else salary*1.03 end
标量子查询可用于set子句
drop table instructor:删除关系instructor
alter table instructor add A D:增加属性A,域为D
alter table instrucotr drop A:删除属性A
3.查询语句
单关系:select * from instuctor where P ;
多关系:select * from instructor, teaches where P;
连接:
natural join=natural inner join:自然连接
连接类型 inner join left outer join right outer join full outer join
连接条件 natural on P using(A1,A2...)
注意:studnet natural join takes与studnet join takes on student.ID=takes.ID不同之处在于,左边只有一个ID,而右边有两个ID.
on与where区别:select * from student left outer join takes on studnet.ID=takes.ID与 select * from student left outer join takes on true where studnet.ID=takes.ID。student left outer join takes on true实际是student 与takes的笛卡尔积。
as更名操作,用于select和from中,old name as new name
字符串操作:%匹配多个字符,包括空串
_匹配一个字符
where s like '%uu%':匹配包含uu的字符串
escape '/'消除转义。
元组显示顺序:order by name asc(升序)dec(降序)
集合运算:union并,intersect交,except差 自动去重
说明:except all若在A中出现4个元组1,B中出现2个元组1,则结果为2个元组1.
空值:空值运算为空值,空值比较为unknown
找出空值 is null/is not null 元组中null=null为真,谓词中null=null为unknown
聚集函数:avg,max,min,count,sum
只有count(*)才计算空值元组
分组聚集:group by,要保证select中出现的属性均在group by中,聚集函数除外
having子句:作用在分组上,where子句作用在整个关系上。
嵌套子查询:(以后补档)
1.where中的嵌套子查询
(1) in/not in
(2) some/all
(3) exists/not exists
(4) unique/not unique
2.from中的嵌套子查询
3.with命名
with temp as select * from instructor
4.标量子查询
返回单个属性的单个元组是标量子查询
4.视图
1.什么是视图:不是逻辑模型的一部分,但作为虚关系对用户可见的关系。
create view temp as select * from instructor:创建temp的视图。
select * from temp:视图查询
2.什么是物化视图:存储视图关系,但是用于定义视图的实际关系改变,视图也随着改变。
3.允许视图更新条件:
(1)from子句只有一个关系
(2)select子句中只包含属性
(3)任何没有出现select子句中的属性可以取空值;即这些属性没有not null约束,也不构成主码一部分。
(4)查询不包含group by和having
4.完整性约束
not null,unique,check
5.参照完整性
5.授权
1.用户自定义类型 create type dollars as numeric(12,2) final;
create domain dollars as numeric(12,2) not null;
type与domain区别:domain可以声明约束,domain不是强类型。
2.索引,需要额外存储空间,可以避免访问整个元组,查找更方便。
3.授权: grant <权限> on <关系/视图> to <用户> with grant option(表示允许授权)
收回权限: revoke <权限> on <关系/视图> from <用户> restrict(取消级联收回)/cascade(级联收回)
角色授权
视图授权
模式授权