第三章 关系数据库语言SQL
3.1 SQL语言概述
数据库语言:非完备语言
过程化/非过程化
SQL (Structured Query Language)
1974:IBM-Boyce, Chamberlin提出SEQUEL(Structured English Query Language)
1981:IBM 关系数据库SQL/DS
1986:ANSI美国标准;ISO:SQL-86
1989:SQL-89
1992:SQL-92,SQL2
SQL支持ANSI/X3/SPARC DBMS三层模式结构
SQL组成:
数据定义语言(Data Definition Language)DDL
查询语言(Query Language)QL
数据操纵语言(Data Manipulation Language)DML
数据控制语言(Data Control Language)DCL
3.2 数据定义语言
3.2.1基本数据类型
INT,DEC,FLOAT,CHAR(VAR),BIT(VAR),DATE,TIME…
3.2.2基表的定义
语法
P58图
例
3.2.3基表的修改
增加列
ALTER TABLE <表名>
删除基表
DROP TABLE
增加主键
列的限制
撤销(全部)主键
补充定义外键
{RESTRICT | CASCADE | SET NULL}
撤销外键定义
定义、撤销别名
3.2.4索引的建立和删除
3.3 查询语言
关系代数→Select From Where
基本语法,P62图
3.3.1简单查询
*,DISTINCT,’ ’,ORDER BY,BETWEEN,IN,LIKE,IS…
3.3.2连接查询(多表查询)
3.3.3嵌套查询
3.3.4函数
标量函数,聚集函数
标量函数
时间,字符,类型转换,数学…
聚集函数
COUNT(),SUM(),AVG(),MAX(),MIN()
P64图3-4(h)
例:
3.3.5集合
并(UNION),交(INTERSECT),差(EXCEPT),IN,SOME、ALL、ANY
3.4 数据操纵语言
3.4.1 INSERT
INSERT INTO <表名> [(列名[,列名]…)]
VALUES (常量[,常量]…)
INSERT INTO <表名> [(列名[,列名]…)]
子查询
有引用约束时的INSERT顺序
3.4.2 DELETE
DELETE FROM <表名>
[WHERE <条件表达式>]
3.4.3 UPDATE
UPDATE <表名>
SET <列名>=<值表达式>[,<列名>=<值表达式>]…
[WHERE <条件表达式>]
3.5 视图
由基表、其他视图导出的虚表
3.5.1视图的定义、撤消
CREATE VIEW <视图名> [(列名[,列名]…)]
AS <子查询>
[WITH CHECK OPTION]
DROP VIEW <视图名>
3.5.2视图的查询
3.5.3视图的更新
视图更新的限制:
“行列子集”视图
多表连接
聚集函数/GROUP BY
3.5.4视图的优点
数据逻辑独立性
简化用户观点
数据库安全
3.6 嵌入式SQL
数据库语言,宿主语言
交互式SQL(interactive SQL)嵌入式SQL(embedded SQL)
嵌入式SQL需要解决的问题
编译
宿主语言与DBMS的通信
数据处理方式
数据类型转换
3.6.1表示
区分SQL语句与主语言
前缀:EXEC SQL
结束:COBOL-END_EXEC C语言-;
SQL与主语言的通信
状态信息(SQLCA)
宿主变量
多元组处理(游标)
嵌入式SQL例:
EXEC SQL INCLUDE SQLCA; 定义SQL通信区
EXEC SQL BEGIN DECLARE SECTION; 宿主变量说明开始
Char sno[3];
Char cno[5];
Int grade;
EXEC SQL END DECLARE SECTION; 宿主变量说明结束
main( )
{
游标使用/应用程序/SQL语句…
}
3.6.2不使用游标的SQL语句
说明性语句
EXEC SQL BEGIN DECLARE SECTION
数据定义语句
EXEC SQL CREATE student(…)
数据控制语句
查询结果为单元组的SELECT语句
INTO <宿主变量><指示变量>,<宿主变量><指示变量>…
部分UPDATE和DELETE语句
INSERT语句
3.6.3使用游标的SQL语句
游标的使用方法:
(1)说明游标
EXEC SQL DECLARE <游标名> CURSOR FOR <…>
(2)打开游标
EXEC SQL OPEN <游标名>
(3)读取数据
EXEC SQL FETCH <游标名>
INTO <宿主变量><指示变量>,<宿主变量><指示变量>…
(4)关闭游标
EXEC SQL CLOSE <游标名>
使用游标的SQL语句
(1)结果为多元组的SELECT语句
例(附件3)
(2)CURRENT 形式的UPDATE/DELETE语句
例(附件4)
3.7 动态SQL
嵌入式SQL(静态SQL)
3.7.1直接执行的动态SQL
EXEC SQL EXECUTE IMMEDIATE
P77 例
3.7.2具有动态参数的动态SQL
占位器(place holder)
P77 例 EXEC SQL PREPARE
3.7.3查询类动态SQL
使用游标
P78例
3.8 存储过程