
Oracle Database 10 SQL开发指南
《Oracle Database 10 SQL开发指南》是2005年4月清华大学出版社出版的图书,作者是彭辉。
基本介绍
- 书名:Oracle Database 10 SQL开发指南
- 作者:彭辉
- ISBN:9787302104872
- 定价:59.80元
- 出版社:清华大学出版社
- 出版时间:2005年04月01日
- 装帧:平装
- 开本:16开
内容简介
本书全面深入地论述了如何使用结构化查询语言(SQL)语句来访问Oracle资料库,以及使用PL/SQL(ProceduralLanguage/SQL)来编写包含SQL语句的程式。本书由Oracle前产品经理JasonPrice亲笔撰写,基于新推出的SQL2003规範,详细介绍了OracleDatabase10g的新特性和功能。全书内容系统、权威,能帮助读者快速掌握SQL的核心知识。
目录
第1章简介 1
1.1关係资料库简介 1
1.2结构化查询语言(SQL)简介 2
1.3使用SQL*Plus 3
1.3.1启动Windows版本的SQL*Plus 4
1.3.2启动命令行版本的SQL*Plus 4
1.4使用SQL*Plus执行SELECT语句 5
1.5SQL*PlusWorksheet 6
1.6创建store模式 7
1.6.1运行SQL*Plus脚本创建store模式 7
1.6.2用来创建store模式的DDL语句 8
1.7添加、修改、删除行 15
1.7.1向表中添加行 15
1.7.2修改表中的现有行 16
1.7.3从表中删除行 17
1.8Oracle10g的新数据类型BINARY_FLOAT和BINARY_DOUBLE 17
1.8.1BINARY_FLOAT和BINARY_DOUBLE的优点 17
1.8.2在表中使用BINARY_FLOAT和BINARY_DOUBLE 18
1.8.3特殊值 18
1.9退出SQL*Plus 19
1.10OraclePL/SQL简介 19
1.11小结 20
第2章从资料库表中检索信息 23
2.1对单表执行SELECT语句 23
2.2选择一个表中的所有列 24
2.3理解行标识符 25
2.4执行算术运算 25
2.4.1日期运算 26
2.4.2列运算 27
2.5使用列别名 28
2.6使用串连操作合併列的输出结果 29
2.7理解空值 29
2.8禁止显式重複行 31
2.9使用WHERE子句过滤行 32
2.9.1使用比较操作符 32
2.9.2使用SQL操作符 34
2.9.3使用逻辑操作符 36
2.9.4理解操作符的优先权 37
2.10使用ORDERBY子句对行进行排序 37
2.11执行使用两个表的SELECT语句 39
2.12使用表别名 41
2.13笛卡尔积 41
2.14执行使用多于两个表的SELECT语句 42
2.15理解连线条件和连线类型 43
2.15.1理解不等连线 43
2.15.2理解外连线 44
2.15.3理解自连线 47
2.16使用SQL/92语法执行连线 48
2.16.1使用SQL/92标準语法执行两个表的内连线 48
2.16.2使用USING关键字简化连线 49
2.16.3使用SQL/92执行多于两个以上表的内连线 50
2.16.4使用SQL/92执行多列的内连线 50
2.16.5使用SQL/92执行外连线 50
2.16.6使用SQL/92执行自连线 52
2.16.7使用SQL/92执行交叉连线 52
2.17小结 53
第3章使用简单函式 55
3.1使用单行函式 56
3.1.1字元函式 56
3.1.2数字函式 64
3.1.3转换函式 69
3.1.4正则表达式函式 74
3.2使用聚合函式 78
3.2.1AVG()函式 79
3.2.2COUNT()函式 80
3.2.3MAX()和MIN()函式 80
3.2.4STDDEV()函式 81
3.2.5SUM()函式 81
3.2.6VARIANCE()函式 82
3.3对行进行分组 82
3.3.1使用GROUPBY子句对行进行分组 82
3.3.2调用聚合函式的错误用法 85
3.3.3使用HAVING子句过滤行分组 86
3.3.4组合使用WHERE和GROUPBY子句 86
3.3.5组合使用WHERE、GROUPBY和HAVING子句 87
3.4小结 88
第4章日期和时间的存储与处理 89
4.1几个简单的存储和检索日期的例子 89
4.2使用TO_CHAR()和TO_DATE()转换时间值 91
4.2.1使用TO_CHAR()将时间值转换为字元串 91
4.2.2使用TO_DATE()将字元串转换为时间值 95
4.3设定默认的日期格式 98
4.4Oracle对2位年份的处理 99
4.4.1使用YY格式 99
4.4.2使用RR格式 99
4.5使用时间值函式 101
4.5.1ADD_MONTHS()函式 101
4.5.2LAST_DAY()函式 102
4.5.3MONTHS_BETWEEN() 102
4.5.4NEXT_DAY()函式 103
4.5.5ROUND()函式 103
4.5.6SYSDATE()函式 104
4.5.7TRUNC()函式 104
4.6理解时区 105
4.6.1与时区有关的函式 106
4.6.2资料库时区和会话时区 106
4.6.3获取时区的时差 107
4.6.4获取时区名 107
4.6.5将时间值从一个时区转换为另一个时区 108
4.7使用时间戳 108
4.7.1使用TIMESTAMP类型 108
4.7.2与时间戳有关的函式 112
4.8使用时间间隔 116
4.8.1使用INTERVALYEARTOMONTH类型 117
4.8.2使用INTERVALDAYTOSECOND类型 119
4.8.3与时间间隔有关的函式 121
4.9小结 122
第5章使用SQL*Plus 123
5.1查看錶结构 123
5.2编辑SQL语句 124
5.3保存、检索并运行档案 126
5.4格式化列 128
5.5设定页面大小 130
5.6设定行大小 131
5.7清除列格式 131
5.8使用变数 132
5.8.1临时变数 132
5.8.2已定义变数 135
5.9创建简单报表 137
5.9.1在脚本中使用临时变数 137
5.9.2在脚本中使用已定义变数 137
5.9.3向脚本中的变数传递值 138
5.9.4添加页眉和页脚 139
5.9.5计算小计 140
5.10自动生成SQL语句 141
5.11小结 142
第6章子查询 143
6.1子查询的类型 143
6.2编写单行子查询 144
6.2.1在WHERE子句中使用子查询 144
6.2.2在HAVING子句中使用子查询 145
6.2.3在FROM子句中使用子查询(内联视图) 146
6.2.4可能碰到的两个错误 147
6.3编写多行子查询 148
6.3.1在多行子查询中使用IN操作符 148
6.3.2在多行子查询中使用ANY操作符 149
6.3.3在多行子查询中使用ALL操作符 149
6.4编写多列子查询 150
6.5编写关联子查询 150
6.5.1关联子查询的例子 150
6.5.2在关联子查询中使用EXISTS和NOTEXISTS 151
6.6编写嵌套子查询 153
6.7编写包含子查询的UPDATE和DELETE语句 155
6.7.1编写包含子查询的UPDATE语句 155
6.7.2编写包含子查询的DELETE语句 155
6.8小结 156
第7章高级查询 157
7.1使用集合操作符 158
7.1.1示例表 158
7.1.2使用UNIONALL操作符 159
7.1.3使用UNION操作符 160
7.1.4使用INTERSECT操作符 161
7.1.5使用MINUS操作符 161
7.1.6组合使用集合操作符 162
7.2使用TRANSLATE()函式 163
7.3使用DECODE()函式 164
7.4使用CASE表达式 166
7.4.1使用简单CASE表达式 166
7.4.2使用搜寻CASE表达式 167
7.5层次化查询 168
7.5.1示例数据 168
7.5.2使用CONNECTBY和STARTWITH子句 170
7.5.3使用伪列LEVEL 171
7.5.4格式化层次化查询的结果 171
7.5.5从非根节点开始遍历 172
7.5.6在STARTWITH子句中使用子查询 173
7.5.7从下向上遍历树 173
7.5.8从层次查询中删除节点和分支 174
7.5.9在层次化查询中加入其他条件 175
7.6使用扩展的GROUPBY子句 175
7.7使用ROLLUP子句 177
7.7.1使用CUBE子句 179
7.7.2使用GROUPING()函式 181
7.7.3使用GROUPINGSETS子句 183
7.7.4使用GROUPING_ID()函式 184
7.7.5在GROUPBY子句中多次使用一个列 186
7.7.6使用GROUP_ID()函式 186
7.8使用分析函式 187
7.8.1示例表 188
7.8.2使用评级函式 189
7.8.3使用反百分点函式 195
7.8.4使用视窗函式 196
7.8.5使用报表函式 201
7.8.6使用LAG()和LEAD()函式 203
7.8.7使用FIRST和LAST函式 204
7.8.8使用线性回归函式 204
7.8.9使用假想评级与分布函式 205
7.9使用MODEL子句 206
7.9.1示例MODEL子句 206
7.9.2用位置标记和符号标记访问数据单元 208
7.9.3用BETWEEN和AND返回特定範围内的数据单元 208
7.9.4用ANY和ISANY访问所有的数据单元 209
7.9.5用CURRENTV()获取某个维度的当前值 209
7.9.6用FOR循环访问数据单元 210
7.9.7处理空值和缺失值 212
7.9.8更新已有的单元 214
7.10小结 215
第8章修改表的内容 217
8.1使用INSERT语句添加行 217
8.1.1忽略列的列表 218
8.1.2为列指定空值 219
8.1.3在列值中使用单引号和双引号 219
8.1.4从一个表向另外一个表複製行 219
8.2使用UPDATE语句修改行 220
8.3使用DELETE语句删除行 221
8.4资料库的完整性 222
8.4.1主键约束 222
8.4.2外键约束 222
8.5使用默认值 223
8.6使用MERGE合併行 225
8.7资料库事务 227
8.7.1事务的提交和回滚 227
8.7.2事务的开始与结束 228
8.7.3保存点 229
8.7.4事务的ACID特性 230
8.7.5并发事务 230
8.7.6事务锁 232
8.7.7事务隔离级别 232
8.7.8SERIALIZABLE事务隔离性级别的一个例子 233
8.8查询闪回 234
8.8.1使用闪回的授权 234
8.8.2时间查询闪回 234
8.8.3系统变更号查询闪回 236
8.9小结 237
第9章资料库安全性 239
9.1用户 239
9.1.1创建用户 240
9.1.2修改用户密码 241
9.1.3删除用户 241
9.2系统特权 241
9.2.1向用户授予系统特权 242
9.2.2检查授予用户的系统特权 243
9.2.3使用系统特权 244
9.2.4撤销用户的系统特权 244
9.3对象特权 244
9.3.1向用户授予对象特权 245
9.3.2检查已授予的对象特权 245
9.3.3检查已接受的对象特权 247
9.3.4使用对象特权 249
9.3.5同名对象 249
9.3.6公共同名对象 250
9.3.7撤销用户的对象特权 251
9.4角色 251
9.4.1创建角色 251
9.4.2为角色授权 252
9.4.3将角色授予用户 252
9.4.4检查授予用户的角色 253
9.4.5检查授予角色的系统特权 254
9.4.6检查授予角色的对象特权 254
9.4.7使用授予角色的特权 256
9.4.8默认角色 256
9.4.9撤销角色 257
9.4.10从角色中撤销特权 257
9.4.11删除角色 257
9.5小结 257
第10章创建表、序列、索引和视图 259
10.1表 259
10.1.1创建表 260
10.1.2获得有关表的信息 261
10.1.3获得表中列的信息 262
10.1.4修改表 263
10.1.5重命名表 271
10.1.6向表添加注释 271
10.1.7截断表 272
10.1.8删除表 272
10.2序列 272
10.2.1创建序列 272
10.2.2获取有关序列的信息 274
10.2.3使用序列 275
10.2.4使用序列填充主键 276
10.2.5修改序列 277
10.2.6删除序列 278
10.3索引 278
10.3.1创建索引 278
10.3.2创建基于函式的索引 279
10.3.3获取有关索引的信息 280
10.3.4获取列索引的信息 281
10.3.5修改索引 281
10.3.6删除索引 281
10.4视图 282
10.4.1创建并使用视图 282
10.4.2修改视图 289
10.4.3删除视图 289
10.5小结 290
第11章PL/SQL编程简介 291
11.1块结构 292
11.2变数和类型 293
11.3条件逻辑 294
11.4循环 294
11.4.1简单循环 295
11.4.2WHILE循环 295
11.4.3FOR循环 295
11.5游标 296
11.5.1步骤1:声明用于保存列值的变数 296
11.5.2步骤2:声明游标 297
11.5.3步骤3:打开游标 297
11.5.4步骤4:从游标中取得记录 297
11.5.5步骤5:关闭游标 298
11.5.6完整的实例:product_cursor.sql 298
11.5.7游标与FOR循环 300
11.6异常 301
11.6.1ZERO_DIVIDE异常 302
11.6.2DUP_VAL_ON_INDEX异常 303
11.6.3INVALID_NUMBER异常 303
11.6.4OTHERS异常 303
11.7过程 304
11.7.1创建过程 304
11.7.2调用过程 307
11.7.3获取有关过程的信息 307
11.7.4删除过程 308
11.7.5查看过程中的错误 308
11.8函式 309
11.8.1创建函式 309
11.8.2调用函式 310
11.8.3获取有关函式的信息 310
11.8.4删除函式 311
11.9包 311
11.9.1创建包规範 311
11.9.2创建包体 312
11.9.3调用包中的函式和过程 313
11.9.4获取有关包中函式和过程的信息 314
11.9.5删除包 314
11.10触发器 314
11.10.1触发器运行的时机 314
11.10.2设定示例触发器 315
11.10.3创建触发器 315
11.10.4激活触发器 316
11.10.5获取有关触发器的信息 317
11.10.6禁用和启用触发器 319
11.10.7删除触发器 319
11.11小结 319
第12章资料库对象 321
12.1对象简介 321
12.2创建对象类型 322
12.3使用DESCRIBE获取有关对象类型的信息 324
12.4用对象类型定义列对象和对象表 325
12.5对products表执行DML操作 325
12.5.1将记录插入到products表中 326
12.5.2从products表中查询记录 326
12.5.3修改products表中的记录 327
12.5.4从products表中删除记录 327
12.6对object_products表执行DML 327
12.6.1向object_products表中插入记录 328
12.6.2从object_products表中选择记录 328
12.6.3更新object_products表中的记录 328
12.6.4从object_products表中删除记录 329
12.7对object_customers表执行DML 329
12.7.1向object_customers表中插入记录 329
12.7.2从object_customers表中查询记录 329
12.8对purchases表执行DML 330
12.8.1向purchases表中插入记录 331
12.8.2从purchases表中选择记录 331
12.8.3更新purchases表中的记录 332
12.9在PL/SQL中使用对象 332
12.10类型继承 334
12.11NOTINSTANTIABLE对象类型 335
12.12用户自定义的构造函式 336
12.13小结 339
第13章集合 341
13.1集合简介 341
13.2变长数组 342
13.2.1创建变长数组类型 342
13.2.2使用变长数组类型定义表列 343
13.2.3获得变长数组信息 343
13.2.4填充变长数组元素 344
13.2.5查找变长数组元素 345
13.2.6更改变长数组元素 345
13.3嵌套表 345
13.3.1创建嵌套表类型 346
13.3.2使用嵌套表类型定义表列 346
13.3.3获得嵌套表信息 346
13.3.4填充嵌套表元素 348
13.3.5查找嵌套表元素 348
13.3.6更改嵌套表元素 348
13.4多级集合类型 349
13.5在PL/SQL中使用集合 351
13.5.1操作变长数组 351
13.5.2操作嵌套表 353
13.5.3集合方法 355
13.6Oracle10g对集合的改进 362
13.6.1关联数组 362
13.6.2更改元素类型的大小或精度 363
13.6.3增加变长数组的元素数目 363
13.6.4在临时表中使用变长数组 363
13.6.5为嵌套表的存储表使用不同的表空间 364
13.6.6对嵌套表的ANSI支持 364
13.7小结 372
第14章大对象 373
14.1大对象(LOB)简介 373
14.2示例档案 374
14.3理解大对象类型 374
14.4创建包含大对象的表 375
14.5在SQL中使用大对象 376
14.5.1使用CLOB和BLOB 376
14.5.2使用BFILE 377
14.6在PL/SQL中使用大对象 379
14.6.1READ() 380
14.6.2WRITE() 383
14.6.3APPEND() 384
14.6.4CLOSE() 386
14.6.5COMPARE() 386
14.6.6COPY() 388
14.6.7CREATETEMPORARY() 390
14.6.8ERASE() 391
14.6.9FILECLOSE() 392
14.6.10FILECLOSEALL() 393
14.6.11FILEEXISTS() 393
14.6.12FILEGETNAME() 394
14.6.13FILEISOPEN() 394
14.6.14FILEOPEN() 395
14.6.15FREETEMPORARY() 396
14.6.16GETCHUNKSIZE() 396
14.6.17GET_STORAGE_LIMIT() 397
14.6.18GETLENGTH() 397
14.6.19INSTR() 397
14.6.20ISOPEN() 400
14.6.21ISTEMPORARY() 400
14.6.22LOADFROMFILE() 401
14.6.23LOADBLOBFROMFILE() 404
14.6.24LOADCLOBFROMFILE() 405
14.6.25OPEN() 405
14.6.26SUBSTR() 406
14.6.27TRIM() 407
14.6.28WRITEAPPEND() 408
14.7理解LONG和LONGRAW类型 408
14.7.1示例表 409
14.7.2使用LONG和LONGRAW列 409
14.8Oracle10g对大对象的增强 410
14.8.1CLOB和NCLOB对象之间的隐式转换 410
14.8.2在触发器中使用LOB时:new属性的用法 411
14.9小结 412
第15章使用Java运行SQL 413
15.1準备工作 414
15.2配置计算机 414
15.2.1设定ORACLE_HOME环境变数 414
15.2.2设定JAVA_HOME环境变数 415
15.2.3设定PATH环境变数 415
15.2.4设定CLASSPATH环境变数 416
15.2.5设定LD_LIBRARAY_PATH环境变数 416
15.3OracleJDBC驱动程式 416
15.3.1Thin驱动程式 417
15.3.2OCI驱动器 417
15.3.3伺服器端内部驱动器 417
15.3.4伺服器端Thin驱动器 417
15.4导入JDBC包 417
15.5注册OracleJDBC驱动程式 418
15.6打开资料库连线 418
15.6.1使用DriverManager类的getConnection()方法连线资料库 418
15.6.2使用Oracle数据源连线资料库 420
15.7创建JDBCStatement对象 422
15.8从资料库检索列 423
15.8.1步骤1:创建和填充ResultSet对象 423
15.8.2步骤2:从ResultSet对象中读取列值 424
15.8.3步骤3:关闭ResultSet对象 426
15.9向资料库添加行 426
15.10更改资料库的行 427
15.11删除资料库的行 427
15.12处理数字 428
15.13处理资料库Null值 429
15.14控制资料库事务 430
15.15执行DDL语句 431
15.16处理异常 432
15.17关闭JDBC对象 433
15.18示例程式:BasicExample1.java 434
15.18.1编译BasicExample1 439
15.18.2运行BasicExample1 439
15.19预备SQL语句 441
15.20OracleJDBC扩展 446
15.20.1oracle.sql包 446
15.20.2oracle.jdbc包 450
15.20.3示例程式:BasicExample3.java 453
15.21小结 456
第16章SQL最佳化 457
16.1SQL最佳化简介 457
16.2使用WHERE子句过滤行 458
16.3使用表连线而不是多个查询 458
16.4执行连线时使用完全限定的列引用 459
16.5使用CASE表达式而不是多个查询 460
16.6添加表索引 461
16.7使用WHERE而不是HAVING 461
16.8使用UNIONALL而不是UNION 462
16.9使用EXISTS而不是IN 464
16.10使用EXISTS而不是DISTINCT 464
16.11使用绑定变数 465
16.11.1不相同的SQL语句 465
16.11.2使用绑定变数定义相同SQL语句 466
16.11.3列出和输出绑定变数 467
16.11.4使用绑定变数存储PL/SQL函式的返回值 467
16.11.5使用绑定变数存储REFCURSOR的行 467
16.12比较执行查询的成本 468
16.12.1检查执行计画 468
16.12.2比较执行计画 473
16.13为最佳化器传递提示 474
16.14其他最佳化工具 474
16.14.1Statspack包 474
16.14.2OracleEnterpriseManagerDiagnosticsPack 475
16.14.3自动资料库诊断监控 475
16.15小结 475
附录AOracle数据类型 477
A.1OracleSQL类型 477
A.2OraclePL/SQL类型 479