2MUCH

软考-中级数据库系统分析师-03 SQL

2023-05-13


概述

SQL的基本组成:

表操作

表创建

1、实体完整性约束

2、参照完整性约束

3、属性值约束

表修改/删除

alter table xxx add/drop/modify

drop table xxx

索引

索引位于内模式(物理层面)。

create [unique][cluster] index xxx
on table(col1[次序(默认asc|desc)],col2[次序])

cluster:聚簇索引,索引项的顺序与表中记录的物理顺序一致的索引组织

视图

create view 视图名(列表名)
as select 查询子句
[with check option]

规则:

数据操作

select

select [all|distinct] 目标列表达式
from 表名或视图名,表名或视图名
where 条件表达式
group by col1 [having 条件表达式]
order by col2 [asc|desc]

注意:as可以给列和表名重命名,as可省略

子查询(嵌套查询)

例如:

select cno, cname from c
where not exists (select * from sc where sc.cno = c.cno)

聚集函数

count([distinct|all] *)
min
max
avg
any 任何一个即可
all
...

image.png

分组查询 group by

如查询每个学生的平均成绩:

select sno, avg(grade)
from sc
group by sno;

分组查询的条件:having 子句

字符串操作

like进行匹配,%匹配任意长度字符串,_匹配任意一个字符

注意:如果模式中包含特殊字符(如%, _, \),使用escape进行转义: like 'ab\%cd%' secape'\'

集合操作

外连接

insert into

insert into table values (...)
insert into table (col1,col2) values (val, val2)

delete

delete vs. drop : 前者只删除数据,关系模式仍然存在

update

update table set col=new_val where ...

授权与触发器

授权grant

grant 权限 on table/database/view 表名/数据库名/视图名
to user1, user2 / public(所有人)
[with grant option] (表示权限给A后,A可以再把这个权限给其他人)

所有权限:all privileges

收回权限revoke

revoke 权限 on ...
from user1, ... / public
[restrict | cascade]

restrict: 只收回指定的用户的权限; cascade:还收回该用户赋予的其他用户的权限

触发器

特点:

需要指定:

语句:

create trigger trigger_name [before|after]
[delete | insert | update of col_name] -- 触发事件
on table_name
[referencing 临时视图名]
[for each row | for each statement(默认方式)]
[when <触发条件>]
begin
	触发动作
end [触发器名称]

image.png

规则:触发事件发生,触发器被激活。检查触发条件,若满足,则执行触发动作。否则,啥都不做。

image.png

image.png

嵌入式sql与存储过程

嵌入式sql

定义:将sql语句嵌入到某种高级语言中的方式,通常采用预编译的方法 EXEC SQL <SQL语言>

向主语言传递SQL语句执行状态信息的方式: SQLCA,即SQL通信区,系统默认的全局变量

主变量(共享变量):主语言通过主变量向sql语句提供参数,用DECLARE说明。在sql中,为了和属性名区分,需要在前面加: (有的可能是@)

image.png

游标

定义游标:

EXEC SQL DECLARE name CURSOR FOR
<select语句>

这只是说明性语句,此时select并不执行

打开游标:

exec sql open name;

游标可以理解为指针

推进游标:

exec sql fetch name into value_name;

游标推进一行,将游标指向的行的值取出,送到共享变量中

关闭游标:

exec sql close name;

image.png

存储过程(procedure)

定义:是一组为了完成特定功能的sql语句集合,经编译后存储在数据库中,用户指定存储过程的名称并给出参数来执行。类似函数。可以接受输入和输出参数。执行比单个的sql语句块更快。需要注意:没有共享变量的概念。

create procedure procedure_name (in|out|in out para1 type1, ...)
[as]
begin
	<SQL语句>
end

参数类型:

image.png

补充知识