SQL---结构化查询语言,目前是关系数据库中的标准语言。其主要由DDL,DML,完整性,VIEW,事务控制,嵌入式SQL,动态SQL以及GRANT部分组成。
SQL标准:SQL-92,SQL-99,SQL-2003
DDL:
关系模式
属性的值域
完整性约束
每个关系的安全性和权限信息
磁盘上每个关系的物理存储结构
基本域类型:char,varchar,int,smallint,numeric,real,float,double,float....
create table:
create table r(A1D1,A2D2,......,AnDn)<完整性约束1>,......,<完整性约束n>,其中r为关系,Ai为关系的一个属性,Di为属性Ai的值域。
完整性约束很多,比如主码primary key(A1,A2,......Am).主码的唯一性和非空性
insert into table r values(A1,A2,......,An)
删除元组---delete from table r (只删除数据)
drop table r不只删除数据还删除DDL
alter table r add A D添加属性
alter table r drop A 删除属性
查询:
select -----project
from------笛卡尔积
where------谓词选择
select A1,A2,......,An from r1,r2,......,rn where P
去重distinct 比如select distinct A from r ,不去重 select all A from r
select * 表示所有属性,效率很低
where中可以逻辑连词and or not 比如select A from r where p1 and p2
更名:
oldname as newname
比如select A1,A2,A3 as N1,N2,N3 from r where P1 or P2
元组变量:as可以重命名元组变量,这个可以进行视觉区分,比较方便。
字符串运算:
%匹配任意字符串
_匹配任意一个字符
like 可以表达模式,比如select A1 from r where A1 like %KK_%
escape 可以定义转移字符,字符串处理有很多函数比如upper,lower等具体可查手册。
order by 让查询结果按排列顺序 desc降序,asc升序
集合运算:
union
intersect
except
聚集函数:
avg/min/max/sum/count
count(*)中不能使用distinct
having子句。如果同一个查询中同时存在where子句和having子句,SQL首先应用where子句中的谓词,满足where谓词的元组通过group by子句形成分组,having子句作用于每一个分组,符合having子句谓词的留下,不符合的丢弃。
空值:
可以用null测试,is null/is not null
is unknown/is not unknown
嵌套子查询
子查询是嵌套在另一个查询中的select-from-where表达式。in/not in
集合比较:
<some/<all等
exists测试是否存在,not exists
unique测试是否存在重复元组 not unique
复杂查询:
select-from-where 带着group by having等
with子句:可以使查询逻辑上更加清晰
视图:
隐藏那个数据的逻辑模型,只提供有限的数据能力。
create view as (SQL 复合语句)
物化视图:允许视图关系被存储,如果定义视图的实际关系改变,视图也相应修改。
视图维护:保证视图一直是最新的过程。
用其他视图定义视图
视图展开
数据库修改:
delete from r where p
insert into
转存insert into t1 select * from t2
update:
批量、单条
可更新视图:
from子句中只有一个数据库关系
select 子句中只包含关系的属性名,不包含任何表达式,聚集或distinct声明
任何没有出现在select子句中的属性可以取空值
查询中不包含有group by子句和having子句
事务:
commit/rollback
连接关系:
inner join on
left outer join on
natural inner join on
natural right join on
连接条件using
full outer join
cross join
union join