《精通Oracle Database 12c SQL & PL/SQL编程 3版》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:(美)普赖斯著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2014
  • ISBN:9787302365983
  • 页数:590 页
图书介绍:本书深入浅出、全面细致地讲解了如何读取和修改数据库信息,如何使用SQL*Plus和SQL Developer,如何使用数据库对象,如何编写PL/SQL程序等内容。随着对本书学习的深入,读者将循序渐进地掌握最新的SQL特性和工具、性能优化技术、高级查询、Java支持以及XML应用。

第1章 简介 1

1.1 关系数据库简介 1

1.2 SQL简介 2

1.3 使用SQL*Plus 4

1.3.1 启动SQL*Plus 4

1.3.2 从命令行启动SQL*Plus 4

1.3.3 使用SQL*Plus执行SELECT语句 5

1.4 使用SQL Developer 6

1.5 创建store模式 8

1.5.1 检查脚本 8

1.5.2 运行脚本 10

1.5.3 用来创建store模式的DDL语句 11

1.6 添加、修改和删除行 17

1.6.1 向表中添加行 17

1.6.2 修改表中的现有行 19

1.6.3 从表中删除行 20

1.7 连接数据库和断开连接 20

1.8 退出SQL*Plus 20

1.9 Oracle PL/SQL简介 21

1.10 小结 22

第2章 从数据库表中检索信息 23

2.1 对单表执行SELECT语句 24

2.2 选择一个表中的所有列 24

2.3 使用WHERE子句限定行 25

2.4 行标识符 25

2.5 行号 26

2.6 执行算术运算 26

2.6.1 执行日期运算 27

2.6.2 列运算 28

2.6.3 算术运算操作符的优先级 29

2.7 使用列别名 29

2.8 使用连接操作合并列的输出结果 30

2.9 空值 31

2.10 禁止显示重复行 32

2.11 比较值 33

2.11.1 使用不等于操作符 33

2.11.2 使用大于操作符 34

2.11.3 使用小于或等于操作符 34

2.11.4 使用ANY操作符 34

2.11.5 使用ALL操作符 35

2.12 使用SQL操作符 35

2.12.1 使用LIKE操作符 36

2.12.2 使用IN操作符 37

2.12.3 使用BETWEEN操作符 38

2.13 使用逻辑操作符 38

2.13.1 使用AND操作符 38

2.13.2 使用OR操作符 39

2.14 逻辑操作符的优先级 39

2.15 使用ORDER BY子句对行进行排序 40

2.16 执行使用两个表的SELECT语句 41

2.17 使用表别名 43

2.18 笛卡尔积 43

2.19 执行使用多于两个表的SELECT语句 44

2.20 连接条件和连接类型 45

2.20.1 不等连接 46

2.20.2 外连接 46

2.20.3 自连接 50

2.21 使用SQL/92语法执行连接 51

2.21.1 使用SQL/92标准语法执行两个表的内连接 51

2.21.2 使用USING关键字简化连接 51

2.21.3 使用SQL/92执行多于两个表的内连接 52

2.21.4 使用SQL/92执行多列的内连接 53

2.21.5 使用SQL/92执行外连接 53

2.21.6 使用SQL/92执行自连接 55

2.21.7 使用SQL/92执行交叉连接 55

2.22 小结 55

第3章 使用SQL*PIus 57

3.1 查看表的结构 58

3.2 编辑SQL语句 58

3.3 保存、检索并运行文件 60

3.4 格式化列 63

3.5 设置页面大小 65

3.6 设置行大小 66

3.7 清除列的格式 67

3.8 使用变量 67

3.8.1 临时变量 67

3.8.2 已定义变量 70

3.9 创建简单报表 73

3.9.1 在脚本中使用临时变量 73

3.9.2 在脚本中使用已定义变量 73

3.9.3 向脚本中的变量传递值 74

3.9.4 添加页眉和页脚 75

3.9.5 计算小计 76

3.10 从SQL*Plus获取帮助信息 78

3.11 自动生成SQL语句 79

3.12 断开数据库连接并退出SQL*Plus 79

3.13 小结 79

第4章 使用简单函数 81

4.1 使用单行函数 82

4.1.1 字符函数 82

4.1.2 数值函数 91

4.1.3 转换函数 96

4.1.4 正则表达式函数 106

4.2 使用聚合函数 112

4.2.1 AVG() 113

4.2.2 COUNT() 114

4.2.3 MAX()和MIN() 114

4.2.4 STDDEV() 115

4.2.5 SUM() 115

4.2.6 VARIANCE() 115

4.3 对行进行分组 116

4.3.1 使用GROUP BY子句对行进行分组 116

4.3.2 调用聚合函数的错误用法 119

4.3.3 使用HAVING子句过滤行组 120

4.3.4 组合使用WHERE和GROUP BY子句 120

4.3.5 组合使用WHERE、GROUP BY和HAVING子句 121

4.4 小结 122

第5章 日期和时间的存储与处理 123

5.1 几个简单的存储和检索日期的例子 123

5.2 使用TO_CHAR()和TO_DATE()转换时间值 125

5.2.1 使用TO_CHAR()将时间值转换为字符串 125

5.2.2 使用TO_DATEO()将字符串转换为时间值 130

5.3 设置默认的日期格式 132

5.4 Oracle对两位年份的处理 133

5.4.1 使用YY格式 133

5.4.2 使用RR格式 134

5.5 使用时间值函数 135

5.5.1 ADD_MONTHS() 136

5.5.2 LAST_DAY() 137

5.5.3 MONTHS_BETWEEN() 137

5.5.4 NEXT_DAY() 138

5.5.5 ROUND() 138

5.5.6 SYSDATE 139

5.5.7 TRUNC() 139

5.6 使用时区 140

5.6.1 与时区有关的函数 140

5.6.2 数据库时区和会话时区 141

5.6.3 获取时区的时差 142

5.6.4 获取时区名 142

5.6.5 将时间值从一个时区转换为另一个时区 143

5.7 使用时间戳 143

5.7.1 使用时间戳类型 143

5.7.2 与时间戳有关的函数 147

5.8 使用时间间隔 152

5.8.1 使用INTERVAL YEAR TO MONTH类型 153

5.8.2 使用INTERVAL DAY TO SECOND类型 155

5.8.3 与时间间隔有关的函数 157

5.9 小结 158

第6章 子查询 159

6.1 子查询的类型 159

6.2 编写单行子查询 160

6.2.1 在WHERE子句中使用子查询 160

6.2.2 使用其他单行操作符 161

6.2.3 在HAVING子句中使用子查询 161

6.2.4 在FROM子句中使用子查询(内联视图) 162

6.2.5 可能碰到的错误 163

6.3 编写多行子查询 164

6.3.1 在多行子查询中使用操作符 165

6.3.2 在多行子查询中使用ANY操作符 165

6.3.3 在多行子查询中使用ALL操作符 166

6.4 编写多列子查询 166

6.5 编写关联子查询 167

6.5.1 关联子查询的例子 167

6.5.2 在关联子查询中使用EXISTS 和NOT EXISTS 168

6.6 编写嵌套子查询 170

6.7 编写包含子查询的UPDATE和DELETE语句 172

6.7.1 编写包含子查询的UPDATE语句 172

6.7.2 编写包含子查询的DELETE语句 172

6.8 使用子查询因子化 173

6.9 小结 174

第7章 高级查询 175

7.1 使用集合操作符 176

7.1.1 示例表 176

7.1.2 使用UNIONALL操作符 177

7.1.3 使用UNION操作符 178

7.1.4 使用INTERSECT操作符 179

7.1.5 使用MINUS操作符 179

7.1.6 组合使用集合操作符 180

7.2 使用TRANSLATE()函数 182

7.3 使用DECODE()函数 183

7.4 使用CASE表达式 185

7.4.1 使用简单CASE表达式 185

7.4.2 使用搜索CASE表达式 186

7.5 层次化查询 187

7.5.1 示例数据 187

7.5.2 使用CONNECTBY和START WITH子句 189

7.5.3 使用伪列LEVEL 190

7.5.4 格式化层次化查询的结果 190

7.5.5 从非根节点开始遍历 191

7.5.6 在START WITH子句中使用子查询 192

7.5.7 从下向上遍历树 192

7.5.8 从层次化查询中删除节点和分支 193

7.5.9 在层次化查询中加入其他条件 194

7.5.10 使用递归子查询因子化查询分层数据 194

7.6 使用ROLLUP和CUBE子句 198

7.6.1 示例表 199

7.6.2 使用ROLLUP子句 200

7.6.3 使用CUBE子句 203

7.6.4 使用GROUPING()函数 204

7.6.5 使用GROUPING SETS子句 207

7.6.6 使用GROUPING ID函数 207

7.6.7 在GROUP BY子句中多次使用某个列 209

7.6.8 使用GROUP ID()函数 210

7.7 使用CROSS APPLY和OUTER APPLY 211

7.7.1 CROSS APPLY 212

7.7.2 OUTER APPLY 212

7.8 使用LATERAL 213

7.9 小结 214

第8章 分析数据 215

8.1 使用分析函数 215

8.1.1 示例表 216

8.1.2 使用评级函数 217

8.1.3 使用反百分位函数 223

8.1.4 使用窗口函数 224

8.1.5 使用报表函数 230

8.1.6 使用LAG()和LEAD函数 233

8.1.7 使用FIRST和LAST函数 234

8.1.8 使用线性回归函数 234

8.1.9 使用假想评级与分布函数 235

8.2 使用MODEL子句 236

8.2.1 MODEL子句示例 236

8.2.2 用位置标记和符号标记访问数据单元 238

8.2.3 用BETWEEN和AND返回特定范围内的数据单元 239

8.2.4 用ANY和IS ANY访问所有的数据单元 239

8.2.5 用CURRENTV()函数获取某个维度的当前值 239

8.2.6 用FOR循环访问数据单元 240

8.2.7 处理空值和缺失值 242

8.2.8 更新已有的单元 244

8.3 使用PIVOT和UNPIVOT子句 245

8.3.1 PIVOT子句的简单示例 245

8.3.2 转换多个列 246

8.3.3 在转换中使用多个聚合函数 247

8.3.4 使用UNPIVOT子句 248

8.4 执行Top-N查询 249

8.4.1 使用 FETCH FIRST子句 250

8.4.2 使用OFFSET子句 250

8.4.3 使用PERCENT子句 251

8.4.4 使用WITH TIES子句 252

8.5 在数据中发现模式 252

8.5.1 在all sales2表中发现V形数据模式 253

8.5.2 在all sales3表中发现W型数据模式 256

8.5.3 在all sales3表中发现V形数据模式 257

8.6 小结 258

第9章 修改表的内容 259

9.1 使用INSERT语句添加行 260

9.1.1 省略列的列表 261

9.1.2 为列指定空值 261

9.1.3 在列值中使用单引号和双引号 261

9.1.4 从一个表向另一个表复制行 262

9.2 使用UPDATE语句修改行 262

9.3 使用RETURNING子句返回聚合函数的计算结果 263

9.4 使用DELETE语句删除行 264

9.5 数据库的完整性 264

9.5.1 主键约束 264

9.5.2 外键约束 265

9.6 使用默认值 266

9.7 使用MERGE合并行 267

9.8 数据库事务 269

9.8.1 事务的提交和回滚 269

9.8.2 事务的开始与结束 270

9.8.3 保存点 271

9.8.4 事务的ACID特性 272

9.8.5 并发事务 273

9.8.6 事务锁 274

9.8.7 事务隔离级别 274

9.8.8 SERIALIZABLE事务隔离级别的一个例子 275

9.9 查询闪回 276

9.9.1 授权使用闪回 276

9.9.2 时间查询闪回 277

9.9.3 SCN查询闪回 278

9.10 小结 280

第10章 用户、特权和角色 281

10.1 用户 282

10.1.1 创建用户 282

10.1.2 修改用户密码 283

10.1.3 删除用户 283

10.2 系统特权 284

10.2.1 向用户授予系统特权 284

10.2.2 检查授予用户的系统特权 285

10.2.3 使用系统特权 286

10.2.4 撤消用户的系统特权 286

10.3 对象特权 287

10.3.1 向用户授予对象特权 287

10.3.2 检查已授予的对象特权 288

10.3.3 检查已接受的对象特权 289

10.3.4 使用对象特权 291

10.3.5 创建同义词 291

10.3.6 创建公共同义词 292

10.3.7 撤消用户的对象特权 293

10.4 角色 293

10.4.1 创建角色 293

10.4.2 为角色授权 294

10.4.3 将角色授予用户 294

10.4.4 检查授予用户的角色 294

10.4.5 检查授予角色的系统特权 296

10.4.6 检查授予角色的对象特权 296

10.4.7 使用已授予角色的特权 298

10.4.8 启用和禁用角色 299

10.4.9 撤消角色 300

10.4.1 0从角色中撤消特权 300

10.4.1 1删除角色 300

10.5 审计 300

10.5.1 执行审计需要的特权 300

10.5.2 审计示例 301

10.5.3 审计跟踪视图 302

10.6 小结 303

第11章 创建表、序列、索引和视图 305

11.1 表 305

11.1.1 创建表 306

11.1.2 获得有关表的信息 307

11.1.3 获得表中列的信息 308

11.1.4 修改表 308

11.1.5 重命名表 317

11.1.6 向表中添加注释 317

11.1.7 截断表 318

11.1.8 删除表 318

11.1.9 使用BINARY_FLOAT和BINARY_DOUBLE数据类型 319

11.1.10 使用DEFAULT ON NULL列 320

11.1.11 在表中使用可见及不可见列 321

11.2 序列 323

11.2.1 创建序列 324

11.2.2 获取有关序列的信息 325

11.2.3 使用序列 326

11.2.4 使用序列填充主键 328

11.2.5 使用序列指定默认列值 329

11.2.6 使用标识列 329

11.2.7 修改序列 330

11.2.8 删除序列 330

11.3 索引 331

11.3.1 创建B-树索引 331

11.3.2 创建基于函数的索引 332

11.3.3 获取有关索引的信息 333

11.3.4 获取列索引的信息 333

11.3.5 修改索引 334

11.3.6 删除索引 334

11.3.7 创建位图索引 334

11.4 视图 335

11.4.1 创建并使用视图 336

11.4.2 修改视图 343

11.4.3 删除视图 343

11.4.4 在视图中使用可见列和不可见列 343

11.5 闪回数据归档 344

11.6 小结 347

第12章 PL/SQL编程简介 349

12.1 块结构 350

12.2 变量和类型 351

12.3 条件逻辑 352

12.4 循环 352

12.4.1 简单循环 353

12.4.2 WHILE循环 354

12.4.3 FOR循环 354

12.5 游标 355

12.5.1 步骤(1):声明用于保存列值的变量 355

12.5.2 步骤(2):声明游标 355

12.5.3 步骤(3):打开游标 356

12.5.4 步骤(4):从游标中取得行 356

12.5.5 步骤(5):关闭游标 357

12.5.6 完整的示例:product_cursor.sql 357

12.5.7 游标与FOR循环 358

12.5.8 OPEN-FOR语句 359

12.5.9 无约束游标 361

12.6 异常 362

12.6.1 ZERO DIVIDE异常 364

12.6.2 DUP_VAL_ON_INDEX异常 365

12.6.3 INVALID_NUMBER异常 365

12.6.4 OTHERS异常 365

12.7 过程 366

12.7.1 创建过程 366

12.7.2 调用过程 368

12.7.3 获取有关过程的信息 369

12.7.4 删除过程 370

12.7.5 查看过程中的错误 370

12.8 函数 371

12.8.1 创建函数 371

12.8.2 调用函数 372

12.8.3 获取有关函数的信息 373

12.8.4 删除函数 373

12.9 包 373

12.9.1 创建包的规范 373

12.9.2 创建包体 374

12.9.3 调用包中的函数和过程 375

12.9.4 获取有关包中函数和过程的信息 376

12.9.5 删除包 376

12.10 触发器 377

12.10.1 触发器启动的时机 377

12.10.2 设置示例触发器 377

12.10.3 创建触发器 377

12.10.4 启动触发器 379

12.10.5 获取有关触发器的信息 380

12.10.6 禁用和启用触发器 382

12.10.7 删除触发器 382

12.11 其他PL/SQL特性 382

12.11.1 SIMPLE_INTEGER类型 382

12.11.2 在PL/SQL中使用序列 383

12.11.3 PL/SQL本地机器代码生成 384

12.11.4 WITH子句 385

12.12 小结 386

第13章 数据库对象 387

13.1 对象简介 387

13.2 创建对象类型 388

13.3 使用DESCRIBE获取有关对象类型的信息 390

13.4 在数据库表中使用对象类型 391

13.4.1 列对象 391

13.4.2 对象表 394

13.4.3 对象标识符和对象引用 397

13.4.4 比较对象值 399

13.5 在PL/SQL中使用对象 402

13.5.1 get_products()函数 403

13.5.2 display_product()过程 403

13.5.3 insert_product()过程 404

13.5.4 update_product price()过程 405

13.5.5 get_product()函数 406

13.5.6 update_product()过程 406

13.5.7 get_product_ref()函数 407

13.5.8 delete product()过程 408

13.5.9 product_lifecycle()过程 408

13.5.1 0 product_lifecycle2()过程 409

13.6 类型继承 410

13.6.1 运行脚本以创建第2个对象模式 411

13.6.2 继承属性 411

13.7 用子类型对象代替超类型对象 413

13.7.1 SQL例子 413

13.7.2 PL/SQL示例 414

13.7.3 NOT SUBSTITUTABLE对象 415

13.8 其他有用的对象函数 416

13.8.1 IS OF()函数 416

13.8.2 TREAT()函数 419

13.8.3 SYS_TYPEID()函数 423

13.9 NOT INSTANTIABLE对象类型 424

13.10 用户自定义的构造函数 425

13.11 重载方法 429

13.12 通用调用 430

13.12.1 运行脚本以创建第3个对象模式 431

13.12.2 继承属性 431

13.13 小结 432

第14章 集合 435

14.1 集合简介 435

14.2 创建集合类型 436

14.2.1 创建变长数组类型 436

14.2.2 创建嵌套表类型 437

14.3 使用集合类型定义表列 437

14.3.1 使用变长数组类型定义表列 437

14.3.2 使用嵌套表类型定义表列 438

14.4 获取集合信息 438

14.4.1 获取变长数组信息 438

14.4.2 获得嵌套表信息 439

14.5 填充集合元素 441

14.5.1 填充变长数组元素 441

14.5.2 填充嵌套表元素 441

14.6 检索集合元素 442

14.6.1 检索变长数组元素 442

14.6.2 检索嵌套表元素 443

14.7 使用TABLE()函数将集合视为一系列行 443

14.7.1 将TABLE()函数应用于变长数组 444

14.7.2 将TABLE()函数应用于嵌套表 445

14.8 更改集合元素 445

14.8.1 更改变长数组元素 445

14.8.2 更改嵌套表元素 446

14.9 使用映射方法比较嵌套表的内容 447

14.10 使用CAST()函数将集合从一种类型转换为另一种类型 449

14.10.1 使用CAST()函数将变长数组转换为嵌套表 449

14.10.2 使用CAST()函数将嵌套表转换为变长数组 450

14.11 在PL/SQL中使用集合 451

14.11.1 操作变长数组 451

14.11.2 操作嵌套表 453

14.11.3 PL/SQL集合方法 455

14.12 创建和使用多级集合 464

14.12.1 运行脚本创建第二个集合模式 464

14.12.2 使用多级集合 464

14.13 Oracle Database 10g对集合的增强 467

14.13.1 运行脚本以创建第三个集合模式 467

14.13.2 关联数组 467

14.13.3 更改元素类型的大小 468

14.13.4 增加变长数组中元素的数目 469

14.13.5 在临时表中使用变长数组 469

14.13.6 为嵌套表的存储表使用不同的表空间 469

14.13.7 嵌套表对ANSI的支持 470

14.14 小结 478

第15章 大对象 479

15.1 大对象(LOB)简介 480

15.2 示例文件 480

15.3 理解大对象类型 480

15.4 创建包含大对象的表 481

15.5 在SQL中使用大对象 483

15.5.1 使用CLOB和BLOB对象 483

15.5.2 使用BFILE对象 485

15.6 在PL/SQL中使用大对象 486

15.6.1 APPEND()方法 489

15.6.2 CLOSE()方法 489

15.6.3 COMPARE()方法 489

15.6.4 COPY()方法 491

15.6.5 CREATETEMPORARY()方法 492

15.6.6 ERASE()方法 492

15.6.7 FILECLOSE()方法 493

15.6.8 FILECLOSEALL()方法 493

15.6.9 FILEEXISTS()方法 494

15.6.10 FILEGETNAME()方法 494

15.6.11 FILEISOPEN()方法 495

15.6.12 FILEOPEN()方法 495

15.6.13 FREETEMPORARY()方法 496

15.6.14 GETCHUNKSIZE()方法 496

15.6.15 GETLENGTH()方法 497

15.6.16 GET_STORAGE_LIMIT()方法 497

15.6.17 INSTR()方法 498

15.6.18 ISOPEN()方法 499

15.6.19 ISTEMPORARY()方法 499

15.6.20 LOADFROMFILE()方法 500

15.6.21 LOADBLOBFROMFILE()方法 501

15.6.22 LOADCLOBFROMFILE()方法 502

15.6.23 OPEN()方法 503

15.6.24 READ()方法 503

15.6.25 SUBSTR()方法 504

15.6.26 TRIM()方法 505

15.6.27 WRITE()方法 506

15.6.28 WRITEAPPEND()方法 507

15.6.29 PL/SQL示例过程 507

15.7 LONG和LONG RAW类型 524

15.7.1 示例表 524

15.7.2 向LONG和LONG RAW列添加数据 525

15.7.3 将LONG和LONG RAW列转换为LOB 525

15.8 Oracle Database 10g对大对象的增强 526

15.8.1 CLOB和NCLOB对象之间的隐式转换 527

15.8.2 在触发器中使用LOB时:new属性的用法 528

15.9 Oracle Database 11g对大对象的增强 528

15.9.1 加密LOB数据 528

15.9.2 压缩LOB数据 532

15.9.3 删除LOB重复数据 533

15.10 Oracle Databese 12c对大对象的增强 533

15.11 小结 534

第16章 SQL优化 535

16.1 SQL优化简介 535

16.2 使用WHERE子句过滤行 536

16.3 使用表连接而不是多个查询 536

16.4 执行连接时使用完全限定的列引用 537

16.5 使用CASE表达式而不是多个查询 538

16.6 添加表索引 539

16.6.1 何时创建B-树索引 539

16.6.2 何时创建位图索引 540

16.7 使用WHERE而不是HAVING 540

16.8 使用UNION ALL而不是UNION 541

16.9 使用EXISTS而不是IN 542

16.10 使用EXISTS而不是DISTINCT 543

16.11 使用GROUPING SETS而不是CUBE 543

16.12 使用绑定变量 543

16.12.1 不相同的SQL语句 544

16.12.2 使用绑定变量定义相同的SQL语句 544

16.12.3 列出和输出绑定变量 545

16.12.4 使用绑定变量存储PL/SQL函数的返回值 545

16.12.5 使用绑定变量存储来自REFCURSOR的返回值 546

16.13 比较执行查询的成本 546

16.13.1 检查执行计划 547

16.13.2 比较执行计划 552

16.14 为优化器传递提示 553

16.15 其他优化工具 554

16.15.1 Oracle Enterprise Manager 555

16.15.2 Automatic Database Diagnostic Monitor 555

16.16 小结 556

第17章 XML和Oracle数据库 557

17.1 XML简介 557

17.2 从关系数据生成XML 558

17.2.1 XMLELEMENT()函数 558

17.2.2 XMLATTRIBUTES()函数 561

17.2.3 XMLFOREST()函数 562

17.2.4 XMLAGG()函数 563

17.2.5 XMLCOLATTVAL()函数 565

17.2.6 XMLCONCAT()函数 566

17.2.7 XMLPARSE()函数 566

17.2.8 XMLPI()函数 567

17.2.9 XMLCOMMENT()函数 567

17.2.10 XMLSEQUENCE()函数 568

17.2.11 XMLSERIALIZE()函数 569

17.2.12 PL/SQL示例:将XML数据写入文件 569

17.2.13 XMLQUERY()函数 571

17.3 将XML保存到数据库中 575

17.3.1 示例XML文件 575

17.3.2 创建示例XML模式 576

17.3.3 从示例XML模式检索信息 577

17.3.4 更新示例XML模式中的信息 582

17.4 小结 585

附录 Oracle数据类型 587