第三章关系数据库语言SQL 3.1S0L语言概述 数据库语言:非完备语言 过程化/非过程化 SQL(Structured Query Language) 1974:BM一 Boyce, Chamber lin提出 SEQUEL( Structured English Query Language) 1981:IBM关系数据库 SQLDS 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数据定义语言 321基本数据类型 INT, DEC, FLoat, CHAR (VAR), BIT(VAR, DATE, TIME 322基表的定义 语法 P58图 例 323基表的修改 1增加列 ALTER TABLE 2删除基表 DROPTABLE 3增加主键 列的限制
第三章 关系数据库语言 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 基表的修改 1.增加列 ALTER TABLE 2.删除基表 DROP TABLE 3.增加主键 列的限制
4撤销(全部)主键 5补充定义外键 ( RESTRICT CASCADE NULLI 6撤销外键定义 7定义、撒销别名 324索引的建立和删除 3.3查询语言 关系代数→ Select from where 基本语法,P62图 331简单查询 * distinct,,,, ORDERBY, BETWeeN, IN, LIKE, IS 332连接查询(多表查询) 3.33嵌套查询 334函数 标量函数,聚集函数 1标量函数 时间,字符,类型转换,数学 2聚集函数 COUNTO, SUMO, AVGO, MAXO, MINO P64图3-4(h) 例 335集合 并(UNON),交( INTERSECT),差( EXCEPT),IN,SOME、ALL、 ANY 3.4数据操纵语言 3.4.1 INSERT >| NSERTINTO INSERT|NTO<表各[列名,列名 子查询 有引用约束时的 INSERT顺序 3.4.2 DELETE
4.撤销(全部)主键 5.补充定义外键 {RESTRICT | CASCADE | SET NULL} 6.撤销外键定义 7.定义、撤销别名 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 函数 标量函数,聚集函数 1.标量函数 时间,字符,类型转换,数学… 2.聚集函数 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联(列名,列名1 AS [WITH CHECK OPTION] DROP VIEW 352视图的查询 353视图的更新 视图更新的限制: “行列子集”视图 多表连接 聚集函数 GROUPBY 354视图的优点 (1)数据逻辑独立性 (2)简化用户观点 (3)数据库安全 3.6嵌入式SQL 数据库语言,宿主语言 交互式SQL( interactive SQL)嵌入式SQL( embedded SQL) 嵌入式SQL需要解决的问题 (1)编译 (2)宿主语言与DBMS的通信 (3)数据处理方式 (4)数据类型转换
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 视图的优点 (1) 数据逻辑独立性 (2) 简化用户观点 (3) 数据库安全 3.6 嵌入式 SQL 数据库语言,宿主语言 交互式 SQL(interactive SQL)嵌入式 SQL(embedded SQL) 嵌入式 SQL 需要解决的问题 (1) 编译 (2) 宿主语言与 DBMS 的通信 (3) 数据处理方式 (4) 数据类型转换
36表示 1.区分SQL语句与主语言 前缀: EXEC SQL 结束: COBOL一 END EXEC C语言 2SQL与主语言的通信 状态信息( SQLCA) 宿主变量 3多元组处理(游标) 嵌入式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语句 362不使用游标的SQL语句 1说明性语句 EXEC SQL BEGIN DECLARE SECTION 2数据定义语句 EXEC SQL CREATE Student(.) 3数据控制语句 4查询结果为单元组的 SELECT语句 INTO,<宿主变量<指示变量 5部分 UPDATE和 DELETE语句 6. INSERT语句 363使用游标的SOL语句 1游标的使用方法 (1)说明游标
3.6.1 表示 1.区分 SQL 语句与主语言 前缀:EXEC SQL 结束:COBOL-END_EXEC C 语言-; 2.SQL 与主语言的通信 ➢ 状态信息(SQLCA) ➢ 宿主变量 3.多元组处理(游标) 嵌入式 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 语句 1.说明性语句 EXEC SQL BEGIN DECLARE SECTION 2.数据定义语句 EXEC SQL CREATE student(…) 3.数据控制语句 4.查询结果为单元组的 SELECT 语句 INTO ,… 5.部分 UPDATE 和 DELETE 语句 6.INSERT 语句 3.6.3 使用游标的 SQL 语句 1.游标的使用方法: (1)说明游标
EXEC SQL DECLARE (2)打开游标 EXEC SQLOPEN<游标各 (3)读取数据 EXEC SQL FETCH<游标各 INTO<宿主变量<指示变量,<宿主变量<指示变量 (4)关闭游标 EXEC SQL CLOSE<游标各 2使用游标的SQL语句 (1)结果为多元组的 SELECT语句 例(附件3) (2) CURRENT形式的 UPDATE/DELETE语句 例(附件4) 3.7动态SQL 嵌入式SQL(静态SQL) 371直接执行的动态SOL EXEC SQLEXECUTE IMMEDIATE P77例 372具有动态参数的动态SQL 占位器( place holder P77例 EXEC SQL PREPARE 373查询类动态SOL 使用游标 P78例 38存储过程
EXEC SQL DECLARE CURSOR FOR (2)打开游标 EXEC SQL OPEN (3)读取数据 EXEC SQL FETCH INTO ,… (4)关闭游标 EXEC SQL CLOSE 2.使用游标的 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 存储过程