第三章 关系数据库语言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 存储过程