SQL1.docx
《SQL1.docx》由会员分享,可在线阅读,更多相关《SQL1.docx(49页珍藏版)》请在冰豆网上搜索。
SQL1
目录
第一章AS/400DB2结构化查询语言介绍
1.1SQL概念
1.1.1关系数据库和术语
1.1.2SQL语句类型
1.2SQL目标
1.2.1集合
1.2.2表、行和列
1.2.3视图
1.2.4索引
1.2.5约束
1.2.6触发器
1.2.7存储过程
1.2.8包
1.3应用程序目标
1.3.1用户源文件成员
1.3.2临时源文件成员
1.3.3程序
1.3.4包
1.3.5模块
1.3.6服务程序
第二章启动SQL
2.1启动交互SQL
2.2建立SQL集合
2.3建立和使用表
2.4使用LABELON语句
2.5往表中插入信息
2.6获取单表信息
2.7获取多表信息
2.8更改表信息
2.9删除表信息
2.10建立和使用视图
2.10.1建立单表视图
2.10.2建立多表数据合并的视图
第三章基本概念和技术
3.1使用基本SQL语句和子句
3.1.1INSERT语句
3.1.2UPDATE语句
3.1.3DELETE语句
3.1.4SELECTINTO语句
3.1.5数据检索错误
3.1.6SELECT子句
3.1.7WHERE子句
3.1.8GROUP子句
3.1.9HAVING子句
3.1.10ORDERBY子句
3.2使用NULL值
3.3使用专用寄存器
3.4使用日期、时间、时间标记
3.4.1当前日期和时间错误
3.4.2日期/时间运算
3.5使用LABLEON
3.6使用COMMITON
3.6.1获得注释
3.7在SQL中使用分类顺序
3.7.1用ORDERBY和记录选择分类排序
3.7.2ORDERBY
3.7.3记录选择
3.7.4分类顺序和视图
3.7.5分类顺序和CREATEINDEX语句
3.7.6分类顺序和约束
第四章使用游标
4.1游标的类型
4.1.1连续游标
4.1.2滚动游标
4.2使用游标举例
4.2.1第一步:
定义游标
4.2.2第二步:
打开游标
4.2.3第三步:
到达数据结束时做什么
4.2.4第四步:
用游标检索行
4.2.5第五A步:
更新当前行
4.2.6第五B步:
删除当前行
4.2.7第六步:
关闭游标
4.3使用多行FETCH语句
4.3.1使用主结构数组的多行FETCH
4.3.2使用行存储区的多行FETCH
4.4工作单元和打开游标
第五章高级编码技术
5.1高级插入技术
5.1.1用选择语句往表中插入行
5.1.2使用块插入语句
5.2避免重复行
5.3执行复杂的检索条件
5.3.1检索条件中的键字
5.4从多个表中连接数据
5.4.1内连接
5.4.2左连接
5.4.3异常连接
5.4.4交叉连接
5.4.5在一个语句中使用多个连接
5.4.6连接的注意事项
5.5用UNION键字合并子选择
5.5.1规定UNIONALL
5.6使用子查询
5.6.1相关性
5.6.2子查询和检索条件
5.6.3使用子查询
5.6.4使用UPDATE和DELETE的子查询
5.6.5使用子查询的几点说明
5.6.6相关子查询
5.6.7在UPDATE语句中使用相关子查询
5.6.8在DELETE语句中使用相关子查询
5.6.9使用相关子查询的几点说明
5.7改变表定义
5.8建立和使用视图
5.9使用索引
5.10数据库设计中使用目录
5.10.1获取表的目录信息
5.10.2获取列的目录信息
第六章数据完整性
6.1AS/400DB2检查约束
6.2AS/400DB2引用完整性
6.2.1生成有引用约束的表
6.2.2取消引用约束
6.2.3往有引用约束的表中插入数据
6.2.4更新有引用约束的表
6.2.5从有引用约束的表中删除数据
6.2.6检查未决
6.3关于视图中的WITHCHECKOPTION
6.3.1WITHCASCADEDCHECKOPTION
6.3.2WITHLOCALCHECKOPTION
6.4AS/400DB2触发器支持
6.4.1触发器样本
第七章存储过程
7.1定义外部过程
7.2定义SQL过程
7.3请求存储过程
7.3.1使用有过程定义时的CALL语句
7.3.2使用无过程定义时的CALL语句
7.3.3使用带有SQLDA的嵌入的CALL语句
7.3.4无CREATEPROCEDURE时使用动态CALL语句
7.4存储过程参数传递的规则
7.5指示器变量和存储过程
7.6返回对调用程序完成状态
7.7举例
7.7.1例1从ILEC应用中调用ILEC和PL/I过程
第八章动态SQL应用
8.1设计和运行动态SQL应用程序
8.2处理Non—SELECT语句
8.2.1动态SQL语句的CCSID
8.2.2使用PREPARE和EXECUTE语句
8.3处理SELCET语句和使用SQLDA
8.3.1固定列表的SELECT语句
8.3.2可变列表的SELECT语句
8.3.3SQL描述区(SLQDA)
8.3.4SQLDA格式
8.3.5分配SQLDA存储的SELECT语句例子
8.3.6使用游标
8.3.7使用参数标记
第九章在主语言中使用SQL的一般概念和规则
9.1在SQL语句中使用主变量
9.1.1赋值规则
9.1.2指示器变量
9.2处理SQL错误返回码
9.3用WHENEVER处理异常条件
第十章C程序中的SQL语句(略)
第十一章COBOL程序中的SQL语句(略)
第十二章PL/I程序中的SQL语句(略)
第十三章RPG/400程序中的SQL语句(略)
第十四章ILERPG/400程序中的SQL语句
14.1定义SQL通讯区
14.2定义SQL描述区
14.3嵌入SQL语句
14.3.1举例
14.3.2注释
14.3.3SQL语句的续行
14.3.4包含代码
14.3.5顺序号
14.3.6名字
14.3.7语句标号
14.3.8WHENEVER语句
14.4使用主变量
14.4.1说明主变量
14.5使用主结构
14.6使用主结构数组
14.7使用外部文件描述
14.7.1主机结构数组的外部文件描述考虑
14.8确定相同的SQL和RPG数据类型
14.8.1ILE/400变量说明及用法
14.9使用指示器变量
14.9.1举例
14.10取多行区的SQLDA例子
第十五章REXX程序中的SQL语句(略)
第十六章准备及运行有SQL语句的程序
16.1SQL预编译的基本处理
16.1.1预编译的输入
16.1.2源文件CCSID
16.1.3预编译的输出
16.2非ILE预编译命令
16.2.1编译一个非ILE程序
16.3ILE编译命令
16.3.1编译一个ILE程序
16.4解释程序编译错误
16.4.1编译期间的错误和警告信息
16.5联编应用程序
16.5.1程序引用
16.6显示预编译选项
16.7运行嵌入SQL的程序
16.7.1OS/400DDM考虑
16.7.2替换考虑
16.7.3SQL返回码
第十七章使用交互SQL
17.1交互SQL的基本功能
17.1.1启动交互SQL
17.1.2使用语句入口功能
17.1.3提示
17.1.4使用列表选择功能
17.1.5会话服务描述
17.1.6结束交互SQL
17.1.7使用已有的SQL会话
17.1.8SQL会话的恢复
17.1.9用交互SQL访问远程数据库
第十八章使用SQL语句处理器
18.1出错后语句的执行
18.2SQL语句处理器的落实控制
18.3SQL语句处理器的模式
18.4SQL语句处理器的源成员清单
第十九章AS/400DB2的数据保护
19.1安全
19.1.1权限ID
19.1.2视图
19.1.3审查
19.2数据完整性
19.2.1并发控制
19.2.2日志
19.2.3落实控制
19.2.4原子操作
19.2.5约束
19.2.6保存/重存
19.2.7破坏容差
19.2.8索引恢复
19.2.9目录完整性
19.2.10用户辅助存储池
第二十章应用程序中的SQL语句
20.1建立测试环境
20.1.1设计测试数据结构
20.2测试SQL应用程序
20.2.1程序调试段
20.2.2性能验证段
20.2.3SQL应用性能验证使用的CL命令
20.2.4性能信息
20.2.5性能信息及打开数据路径
第二十一章使用AS/400DB2预测查询管理
21.1取消查询
21.2一般实施的考虑
21.3用户应用程序实施的考虑
21.4对查询信息的缺省回答控制
21.5使用性能测试管理
21.6举例
第二十二章AS/400DB2数据管理和查询优化
22.1数据管理方法
22.1.1访问路径
22.1.2访问方法
22.2位图处理方法
22.3数据访问方法总结
22.4优化
22.4.1成本估算
22.4.2访问方案验证
22.4.3优化决策规则
22.4.4连接优化
22.4.5分组优化
22.5改善连接查询的性能
22.6有效使用SQL索引
22.7使用有分类排序的索引
22.7.1使用有选择、连接或分组的索引和分类排序
22.7.2排序
22.7.3索引例子
22.8使用VARCHAR和VARGRAPHIC数据类型的技巧
22.9从多个表中选择数据性能的改善
22.10减少打开数据库操作数目来改善性能
22.11由数据库管理分组考虑而带来的性能改善
22.12使用FETCHFORnROWS的性能改善
22.12.1SQL分块的性能改善
22.13使用INSERTnROWS的性能改善
22.14分页交互显示数据的性能改善
22.15用有效的SELECT语句的性能改善
22.16使用活动数据的性能改善
22.17使用ALWCPYDTA参数的性能改善
22.18使用优化子句的性能改善
22.19由保留游标位置的性能改善
22.19.1为非ILE程序调用的保留游标位置带来的性能改善
22.20由保留游标位置跨越ILE程序调用带来的性能改善
22.21对所有程序调用保留游标位置的一般规则
22.22SQLPREPARE语句性能的改善
22.23使用长目标名对性能的影响
22.24使用预编译选项的性能改善
22.25由结构参数传送技术产生的性能改善
22.25.1参数传送的后台信息
22.25.2结构参数传送技术的区别
22.26监控数据库查询性能
22.27控制并行处理
22.27.1控制并行处理系统权
22.27.2控制一个作业的并行处理
第二十三章解决公共数据库问题
23.1通过检索数据分页
23.2反序检索
23.3表尾位置的建立
23.4往表尾加数据
23.5从表中检索时更新数据
23.5.1约束
23.6更新先前检索的数据
23.7修改表定义
第二十四章分布式关系数据库功能
24.1AS/400DB2分布式关系数据库支持
24.2AS/400DB2分布式关系数据库样板程序
24.3SQL程序包支持
24.3.1SQL程序包中有效的SQL语句
24.3.2生成SQL程序包的考虑
24.4SQL的CCSID考虑
24.5连接管理和活动组
24.5.1连接与对话
24.5.2PGM1的源码
24.5.3PGM2的源码
24.5.4PGM3的源码
24.5.5同一个关系数据库的多个连接
24.5.6对缺省活动组的隐式连接管理
24.5.7非缺省活动组的隐式连接管理
24.6分布式支持
24.6.1确定连接类型
24.6.2连接和落实控制约束
24.6.3确定连接状态
24.6.4分布式工作单元连接考虑
24.6.5结束连接
24.7分布式工作单元
24.7.1管理分布式工作单元连接
24.7.2游标和准备语句
24.8应用请求驱动程序
24.9问题处理
第一章AS/400DB2结构化查询语言介绍
本书介绍AS/400系统中使用的DB2结构化查询语言(SQL),DB2查询管理和SQL开发工具第四版特许程序的有关内容,SQL管理关系型数据的信息,SQL语句能嵌套在高级语言中,动态地准备和运行或交互地运行。
SQL由描述用数据库中的数据做什么的语句和子句组成,以及所需条件的说明。
SQL通过DDM访问远程数据库。
这个功能将在本书第二十四章给出说明,详细内容请看分布式数据库程序设计一书。
1.1SQL概念
AS/400SQL由下列主要部分组成:
SQL运行时支持
SQL运行时从语法上解释SQL语句及运行任何一条SQL语句。
这种支持是操作系统/400特许程序的一部分,即在系统没有安装DB2查询管理和SQL开发工具特许程序的情况下,含SQL语句的应用程序也能在系统上运行。
SQL预编译器
SQL预编译支持在主语言中预编译嵌套的SQL语句。
以下是所支持的语言:
—ILEC/400*
—COBOL/400*
—ILECOBOL/400*
—AS/400PL/I*
—RPGⅢ(RPG/400*的一部分)
—ILERPG/400*
SQL主语言预编译准备的包括SQL语句的应用程序.然后主语言编译器编译已预编译过的主源程序。
详细内容,请看第十六章。
预编译器的支持是DB2查询管理和SQL开发工具特许程序的一部分。
SQL交互接口
SQL交互接口允许建立并执行SQL语句。
关于交互SQL的详细信息可在第十
七章中查到。
交互SQL是DB2查询管理器和SQL开发工具特许程序的一部分。
运行SQL语句的CL命令
RUNSQLSTM允许运行一系列SQL语句,它们存在源码文件中。
RUNSQLSTM是DB2查询管理器和SQL开发工具特许程序的一部分。
第十八章中有SQL语句运行的详细说明。
AS/400DB2查询管理
AS/400DB2查询管理提供提示驱动的交互接口。
这个接口允许生成数据、添加数据、维护数据,及在数据库上运行报表。
查询管理是DB2查询管理器和SQL开发工具特许程序的一部分。
详细内容请看《AS/400DB2查询管理》。
SQLREXX接口
SQLREXX接口允许在REXX过程中运行SQL语句。
这个接口是DB2查询管理器和SQL开发工具特许程序的一部分。
要了解在REXX过程中使用SQL语句的详细信息,请看第十五章。
SQL调用级接口
AS/400DB2支持SQL调用级接口。
它允许使用任何ILE语言的用户通过过程调用由系统提供的服务程序直接访问SQL功能。
使用SQL调用级接口,不必预编译就可以实现所有的SQL功能。
这是一个标准的过程调用;准备SQL语句,执行SQL语句,获取数据甚至可以实现访问目录、为输出列连接程序变量等高级功能。
在AS/400DB2SQL调用接口(ODBL)一书中,对所有可用功能函数及其语法有详细的描述。
QSQPRCEDAPI
这个应用程序接口(API)提供了扩展的动态SQL能力。
由SQL语句形成SQL软件包,然后由API执行。
软件包中的语句通过API存留,直到明显的删除软件包或语句。
QSQPRCED是OS/400特许程序的一部分,在《系统API参考》中有更多的QSQPRCEDAPI的信息。
QSQCHKSAPI
这个API语法检查SQL语句。
QSQCHKS是OS/400特许程序的一部分。
在《系统API参考》中有更多的QSQCHKSAPI的信息。
DB2多系统
这个操作系统的特性是允许数据跨越AS/400多个系统。
在《AS/400的DB2多系统》中有更多的说明。
DB2对称多处理
这个系统的特性是为取出那些包含并行处理的数据给出附加方法提供查询优化。
对称多处理(SMP)是在一个单系统中得到并行处理模式,这个系统有多处理器(CPU和I/O处理器),这些处理器为了一个共同的最终目标而共享内存和磁盘资源。
并行处理意味着数据库管理器能使多个(或全部)系统处理器为一个查询同时工作。
在22.27中阐述了怎样进行并行处理。
1.1.1关系数据库和术语
在关系数据模型中,所有的数据放在表中。
DB2目标做为AS/400系统的目标来生成和维护。
下表给出AS/400系统术语和SQL关系数据库术语间的相互关系。
关于数据库的详细信息在《AS/400DB2数据库程序设计》一书中可了解到。
表1-1系统术语和SQL术语的关系
系统术语
SQL术语
库:
一组相关目标并允许通过
名字查找目标。
集合:
由库、日志、日志接收器、SQL集合和可选的数据字典组成。
集合把相关目标组合在一起,并允许由名字查找目标。
物理文件:
一系列记录。
表:
一系列行和列。
记录:
一系列字段。
行:
由一些列组成表中的水平部分。
字段:
同一数据类型的有关信息的一个或
多个字符
列:
一个数据类型表当中的垂直部分。
逻辑文件:
一个或多个物理文件中字段和
记录的子集
视图:
一个或多个表的列和行的子集。
SQL包:
用来运行SQL语句的目标类型
包:
用来运行SQL语句的目标类型。
用户配置文件
授权名或授权ID
1.1.1.1SQL术语
在AS/400DB2程序设计中有两个命名约定:
系统(*SYS)和SQL(SQL)。
命名约定影响限定文件名和表名及在交互SQL显示项的方法。
对REXX是通过SETOPTION语句来选择的,所用的命名约定是由SQL命令参数选择。
系统命名(*SYS):
在系统命名约定中,文件由下列格式用库名限定:
库/文件
如果没有明显规定限定表名且在CRTSQLxxx
(1)或CRTSQLPKG命令的DFTRDBCOL参数规定了缺省的集合名,则使用缺省的集合名。
若表名未明显限定且没规定缺省集合名,限定的规则为:
下面的CREATE语句处理没有限定的目标:
—CREATETABLE—在当前库中生成表(*CURLIB)
—CREATEVIEW—在子集中第一个引用的库中生成视图
—CREATEINDEX—在建索引的表所在库或集合里生成索引
—CREATEPROCEDURE—在当前库中生成过程
所有其它的SQL语句会使SQL在库列表中检索未限定表。
缺省关系数据库集合(DFTRDBCOL)参数仅对静态SQL语句适用。
SQL命名(*SQL):
在SQL命名约定中,表由下面格式的集合名限定:
集合.表
若表名没有明显限定且在CRTSQLxxx命令中规定了DFTRDBCOL参数,则使用缺省集合名。
如果没有明显限定表名且没规定缺省集合名,那么规则为:
—对静态SQL,缺省的限定名是程序主人的用户配置文件。
—对动态SQL或交互SQL,缺省的限定名是运行语句作业的用户配置文件。
(1)这里的xxx表示嵌入SQL的主语言,它们可以是CI、CBL、CBLI、PLI、RPG、RPGI。
1.1.2SQL语句类型
SQL有四种基本语句类型:
数据定义语句(DDL)、数据操作语句(DML)、动态SQL语句和混杂语句。
SQL能处理用SQL生成的目标,也能处理AS/400外部说明的物理文件和单格式逻辑文件,且不管它们是否在SQL集合中,但不能引用程序说明文件的IDDU字典定义,程序说明文件在表中只做一列出现。
SQL数据定义语句
SQL数据操作语句
ALTERTABLE
COMMENTON
CREATECOLLECTION
CREATEINDEX
CREATEPROCEDURE
CREATESCHEMA
CREATETABLE
CREATEVIEW
DROPCOLLECTION
DROPINDEX
DROPPACKAGE
DROPPROCEDURE
DROPSCHEMA
DROPTABLE
DROPVIEW
GRANTPACKAGE
GRANTPROCEDURE
GRANTTABLE
LABELON
RENAME
REVOKEPACKAGE
REVOKEPROCEDURE
REVOKETABLE
CLOSE
COMMIT
DECLARECURSOR
DELETE
FETCH
INSERT
LOCKTABLE
OPEN
ROLLBACK
SELECTINTO
UPDATE
动态SQL语句
其他SQL语句
DESCRIBE
EXECUTE
EXECUTEIMMEDIATE
PREPARE
BEGINDECLARESECTION
CALL
CONNECT
DECLAREPROCEDURE
DECLARESTATEMENT
DECLAREVARIABLE
DESCRIBETABLE
DISCONNECT
ENDDECLARESECTION
INCLUDE
RELEASE
SETCONNECTION
SETOPTION
SETRESULTSETS
SETTRANSACTION
WHENEVER
1.2SQL目标
在AS/400系统中SQL的目标有:
集合、表、视图、SQL包、索引和目录。
SQL把这些目标做为AS/400数据库目标来生成和管理。
下面是对这些目标简短描述。
1.2.1集合
集合提供对SQL目标的逻辑分类。
集合由库、日志、日志接收器、目录和可选的数据字典组成。
表、视图、系统目标(例如程序)能在任何AS/400库中建立、移动、重存。
如果SQL集合中不包括数据字典,所存AS/400文件也能在SQL集合中生成或移动。
如果SQL集合包括数据字典,则AS/400源物理文件或一个成员的非源物理文件能在S