SQL基础
1 数据定义
SQL的DDL不仅可以定义一组关系,还可以定义每个关系的信息,包括:
·每个关系的模式;
·每个属性的值域;
·完整性约束;
·每个关系维持的索引集合;
·每个关系的安全性和权限信息;
·磁盘上每个关系的物理存储结构。
这里只讨论基本模式定义和基本域值。
1.1 基本域类型
SQL支持的域类型包括:
·char(n):固定长度的字符串,用户指定长度n。也可以用全称character
·varchar(n):可变长度的字符串,用户指定最大长度n。等价于全称character varying
·int:整形。等价于integer
·smallint:小整形
·numeric(p,d):定点数,精度由用户指定
·real,double precision:浮点数与双精度浮点数,精度与机器有关
·float(n):精度至少为n位的浮点数
1.2 基本模式定义
<1>create table 用于定义SQL关系,即创建一个表:
|
create table r(A1 D1, A2 D2,…,An Dn, <完整性约束1>, … <完整性约束k>) |
r表示关系名(表名),A表示关系r的一个属性名,D位对应的域类型,下面接完整性约束。举例:
|
create table test(use_id int, name varchar(20), age int, primary key(use_id)); |
结果:
primary key (A1, A2,…,Aj):声明表示属性A1,A2,…,Aj构成该关系的主码。主码属性必须非空且唯一。
<2>insert 插入数据到关系中:
|
insert into r values(v1, v2,…,vn) |
<3>delete 从关系中删除元组
delete from r
<4>drop table 删除关系(表)
drop table r
<5>alter table 改变关系的属性
|
alter table r add A D |
向关系r中添加属性A,其属性域为D。已有元组的该属性默认为null
|
alter table r drop A |
从关系r中移除属性A
<6>update 更新
|
update r set p where q |
2 SQL查询的基本结构
SQL表达式基本结构包括三个子句:select、where、from
其基本表达式为:
|
select A1,A2,…,An from r1,r2,…,rm where p |
2.2 更名运算
为关系或者属性进行重新命名,使用as命令:
旧名 as 新名
|
select use_id as user_id, name from test; |
2.3 字符串运算
字符串匹配:
·百分号(%):匹配任意子串;
·下划线(_):匹配任意一个字符。
SQL用like来表达模式:
|
select * from test where name like '%s%'; |
此外,SQL使用escape关键词来定义转义字符。
2.4 排列元组的显示次序
使用关键词order by
|
select * from test order by use_id |
后接asc表示升序排列(默认为升序排列),后接desc表示降序,即
|
select * from test order by use_id desc |
3 集合运算
SQL使用union、intersect、except来进行集合运算中的并、交和差运算。注意,这三种运算都是默认去除重复的,想要保留重复就需要使用union all、intersect all、except all
|
select * from test union all select * from test; |
4 聚集函数
聚集函数就是对多个值进行计算,得到单一值。SQL支持的5个聚集函数为:
·平均值:avg
·最小值:min
·最大值:max
·总和:sum
·计数:count
SQL使用distinct关键词进行去除重复操作;使用group by关键词进行元组的分组;使用having关键词进行约束;
5 嵌套子查询
使用in关键词进行嵌套子查询
|
select A11, A12,..,A1n from r1 where p in (select…子查询) |
此外SQL语句还定义了not in关键词,表示不在子查询范围内
SQL使用some和all来进行集合的比较
例如:
检查是否为空,使用关键词exists,不为空则返回true,举例:
检查是否有重复,使用关键词unique,没有重复则返回true,举例:
6 视图
视图可以视为对查询表达式的封装,使用create view关键词;

浙公网安备 33010602011771号