內容簡介
《精通Oracle SQL(第 2版)》語言精煉、風趣,所涵蓋的內容涉及SQL核心、SQL執行、分析函式、聯結、測試與質量保證等,並提供大量實用性建議,且總結出方方面面的“技巧悼疊棵仔”,幫助讀者在閱讀過程中快速消化所看內容。新版針對Oracle 12c進行了大幅修訂,以反映技術的**新發展動態。
《精通Oracle SQL(第 2版)》旨在為Oracle資料庫開發人員、DBA和架構師提供參考。
圖書目錄
第 1章 SQL核心 1
1.1 SQL語言 1
1.2 資料庫的接匪協嘗放口 2
1.3 SQL*Plus回顧 3
1.3.1 連線到資料庫 3
1.3.2 配置SQL*Plus環境 4
1.3.3 執行命令 6
1.4 5個核心的SQL語句 8
1.5 SELECT語句 8
1.5.1 FROM子句 妹歸應10
1.5.2 WHERE子句 11
1.5.3 GROUP BY子句 11
1.5.4 HAVING子句 12
1.5.5 SELECT列表 13
1.5.6 ORDER BY子句 13
1.6 INSERT語句 14
1.6.1 單表插入 14
1.6.2 多表插入 15
1.7 UPDATE語句 17
1.8 DELETE語句 20
1.9 MERGE語句 22
1.10 小結 24
第 2章 SQL執行 25
2.1 Oracle架構基礎 25
2.2 SGA共享池 26
2.3 庫高速快取 27
2.4 完全相同的語句 28
2.5 SGA緩衝區快取 31
2.6 查詢轉換 34
2.6.1 查詢塊 匙漿婚35
2.6.2 視圖合併 37
2.6.3 子查詢解嵌套 41
2.6.4 聯結消除 43
2.6.5 排序消除 45
2.6.6 謂詞推進 46
2.6.7 使用物化視圖進行查詢重寫 48
2.7 確定執行計畫 50
2.8 執行計畫並取得數據行 54
2.9 SQL執行——總覽 56
2.10 小結 57
第3章 訪問和聯結方法 58
3.1 全掃描訪問方法 58
3.1.1 如何選擇全掃描操作 59
3.1.2 全掃描與捨棄 62
3.1.3 全掃描與多塊讀取 63
3.1.4 全掃描與高水位線 63
3.2 索引掃描訪問方法 68
3.2.1 索引結構 69
3.2.2 索引掃描類型 71
3.2.3 索引**掃描 75
3.2.4 索引範圍掃描 76
3.2.5 索引全掃描 77
3.2.6 索引跳躍掃描 80
3.2.7 索引快速全掃描 81
3.3 聯結方法 82
3.3.1 嵌套循環聯結 83
3.3.2 排序—合併聯結 85
3.3.3 散列聯結 86
3.3.4 笛卡兒聯結 89
3.3.5 外聯結 90
3.4 小結 95
第4章 SQL是關於集合的 96
4.1 以面向集合的思維方式來思考 96
4.1.1 從面向過程轉變為基於集合的思維方式 97
4.1.2 面向過程與基於集合的思維方式:例子 100
4.2 集合運算 102
4.2.1 UNION和UNION ALL 103
4.2.2 MINUS 106
4.2.3 INTERSECT 107
4.3 集合與空值 108
4.3.1 空值與非直觀結果 108
4.3.2 空值與集合運算 111
4.3.3 空值與GROUP BY和ORDER BY 112
4.3.4 空乃糠辯值與聚合函式 114
4.4 小結 114
第5章 提局歸出問題 115
5.1 問出好的問題 115
5.2 提問的目的 116
5.3 問題的種類 116
5.4 問題的問題 118
5.5 數據的問題 120
5.6 建立邏輯表達式 125
5.7 小結 130
第6章 SQL執行計畫 131
6.1 解釋計畫 131
6.1.1 使用解釋計畫 131
6.1.2 PLAN_TABLE 133
6.1.3 分解計畫 135
6.1.4 導致解釋計畫未達目的的原因 136
6.1.5 閱讀計畫 139
6.1.6 訪問凝射霉和篩選謂語 140
6.1.7 使計畫便於閱讀 141
6.2 執行計畫 142
6.2.1 查看**近生成的SQL語句 142
6.2.2 查看相關執行計畫 142
6.2.3 收集執行計畫統計信息 144
6.2.4 標識SQL語句以便以後取回計畫 146
6.2.5 深入理解DBMS_XPLAN 149
6.2.6 使用SQL監控報告 154
6.2.7 使用計畫信息解決問題 157
6.3 小結 166
第7章 **分組 167
7.1 基本的GROUP BY用法 167
7.2 HAVING子句 170
7.3 GROUP BY的“新”功能 172
7.4 GROUP BY的CUBE擴展 172
7.5 CUBE的實際套用 178
7.6 用GROUPING()函式排除空值 184
7.7 用GROUPING()擴展報告 185
7.8 用GROUPING_ID()擴展報告 186
7.9 GROUPING SETS與ROLLUP() 190
7.10 GROUP BY局限性 192
7.11 小結 195
第8章 分析函式 196
8.1 概覽 196
8.2 示例數據 197
8.3 分析函式剖析 197
8.4 函式列表 198
8.5 聚合函式 199
8.5.1 跨越整個分區的聚合函式 200
8.5.2 細粒度視窗聲明 201
8.5.3 默認視窗聲明 201
8.6 lead和lag 201
8.6.1 語法和排序 202
8.6.2 例1:從前一行中返回一個值 202
8.6.3 理解數據行的位移 203
8.6.4 例2:從下一行中返回一個值 203
8.7 first_value和last_value 204
8.7.1 例子:使用first_value計算**大值 205
8.7.2 例子:使用last_value計算**小值 206
8.8 其他分析函式 206
8.8.1 nth_value 206
8.8.2 rank 208
8.8.3 dense_rank 209
8.8.4 row_number 210
8.8.5 ratio_to_report 211
8.8.6 percent_rank 212
8.8.7 percentile_cont 213
8.8.8 percentile_disc 215
8.8.9 NTILE 216
8.8.10 stddev 217
8.8.11 listagg 218
8.9 性能調優 219
8.9.1 執行計畫 220
8.9.2 謂詞 220
8.9.3 索引 221
8.10 **話題 222
8.10.1 動態SQL 222
8.10.2 嵌套分析函式 224
8.10.3 並行 224
8.10.4 PGA大小 225
8.11 組織行為 225
8.12 小結 226
第9章 MODEL子句 227
9.1 電子表格 228
9.2 使用MODEL子句實現跨行引用 228
9.2.1 示例數據 228
9.2.2 剖析MODEL子句 229
9.2.3 規則 230
9.3 位置和符號引用 231
9.3.1 位置標記 231
9.3.2 符號標記 232
9.3.3 FOR循環 233
9.4 返回更新後的行 234
9.5 求解順序 235
9.5.1 行求解順序 235
9.5.2 規則求解順序 237
9.6 聚合 239
9.7 疊代 240
9.7.1 示例 240
9.7.2 PRESENTV與空值 241
9.8 查找表 242
9.9 空值 244
9.10 使用MODEL子句進行性能調優 245
9.10.1 執行計畫 245
9.10.2 謂詞推進 248
9.10.3 物化視圖 250
9.10.4 並行 251
9.10.5 MODEL子句執行中的分區 252
9.10.6 索引 253
9.11 子查詢因子化 254
9.12 小結 255
第 10章 子查詢因子化 256
10.1 標準用法 256
10.2 用WITH定義PL/SQL函式 259
10.3 SQL最佳化 261
10.3.1 測試執行計畫 261
10.3.2 測試查詢改變的影響 265
10.3.3 尋找其他最佳化機會 268
10.3.4 將子查詢因子化套用到PL/SQL中 272
10.4 遞歸子查詢 275
10.4.1 CONNECT BY示例 275
10.4.2 RSF示例 277
10.4.3 RSF的限制條件 278
10.4.4 與CONNECT BY的不同點 278
10.5 複製CONNECT BY的功能 279
10.5.1 LEVEL偽列 280
10.5.2 SYS_CONNECT_BY_PATH函式 281
10.5.3 CONNECT_BY_ROOT運算符 283
10.5.4 CONNECT_BY_ISCYCLE偽列和NOCYCLE參數 285
10.5.5 CONNECT_BY_ISLEAF偽列 288
10.6 小結 292
第 11章 半聯結和反聯結 294
11.1 半聯結 294
11.2 半聯結執行計畫 302
11.3 控制半聯結執行計畫 307
11.3.1 使用提示控制半聯結執行計畫 307
11.3.2 在實例級控制半聯結執行計畫 309
11.4 半聯結限制條件 311
11.5 半聯結必要條件 313
11.6 反聯結 314
11.7 反聯結執行計畫 318
11.8 控制反聯結執行計畫 327
11.8.1 使用提示控制反聯結執行計畫 327
11.8.2 在實例級控制反聯結執行計畫 328
11.9 反聯結限制條件 331
11.10 反聯結必要條件 334
11.11 小結 334
第 12章 索引 335
12.1 理解索引 336
12.1.1 什麼時候使用索引 336
12.1.2 列的選擇 338
12.1.3 空值問題 339
12.2 索引結構類型 340
12.2.1 B-樹索引 340
12.2.2 點陣圖索引 341
12.2.3 索引組織表 342
12.3 分區索引 344
12.3.1 局部索引 344
12.3.2 全局索引 346
12.3.3 散列分區與範圍分區 347
12.4 與套用特點相匹配的解決方案 350
12.4.1 壓縮索引 350
12.4.2 基於函式的索引 352
12.4.3 反轉鍵索引 354
12.4.4 降序索引 355
12.5 管理問題的解決方案 356
12.5.1 不可見索引 356
12.5.2 虛擬索引 358
12.5.3 點陣圖聯結索引 358
12.6 小結 360
第 13章 SELECT以外的內容 361
13.1 INSERT 361
13.1.1 直接路徑插入 361
13.1.2 多表插入 363
13.1.3 條件插入 365
13.1.4 DML錯誤日誌 365
13.2 UPDATE 371
13.2.1 CTAS與UPDATE的差別 371
13.2.2 INSERT APPEND與UPDATE的差別 374
13.3 DELETE 377
13.4 MERGE 380
13.4.1 語法和用法 380
13.4.2 性能比較 384
13.5 小結 385
第 14章 事務處理 387
14.1 什麼是事務 387
14.2 事務的ACID屬性 388
14.3 事務隔離級別 389
14.4 多版本讀一致性 391
14.5 事務控制語句 392
14.5.1 Commit(提交) 392
14.5.2 Savepoint(保存點) 392
14.5.3 Rollback(回滾) 392
14.5.4 Set Transaction(設定事務) 392
14.5.5 Set Constraints(設定約束) 393
14.6 將運算分組為事務 393
14.7 訂單錄入模式 394
14.8 活動事務 400
14.9 使用保存點 401
14.10 序列化事務 404
14.11 隔離事務 407
14.12 自治事務 410
14.13 小結 414
第 15章 測試與質量保證 415
15.1 測試用例 416
15.2 測試方法 417
15.2.1 單元測試 418
15.2.2 回歸測試 421
15.2.3 模式修改 422
15.2.4 重複單元測試 425
15.3 執行計畫比較 426
15.4 性能測量 431
15.4.1 在代碼中加入性能測量 432
15.4.2 性能測試 436
15.5 破壞性測試 437
15.6 使用性能測量進行系統檢修 439
15.7 小結 441
第 16章 計畫穩定性 443
16.1 計畫不穩定性:理解這個問題 443
16.1.1 統計信息的變化 444
16.1.2 運行環境的改變 446
16.1.3 SQL語句的改變 448
16.1.4 綁定變數窺視 448
16.1.5 自適應游標共享 451
16.2 統計信息反饋 455
16.3 識別執行計畫的不穩定性 459
16.3.1 抓取當前運行查詢的數據 460
16.3.2 查看語句的性能歷史 461
16.3.3 按照執行計畫聚合統計信息 462
16.3.4 尋找執行計畫的統計方差 463
16.3.5 在一個時間點附近檢查偏差 464
16.4 小結 465
第 17章 計畫控制 466
17.1 執行計畫控制:解決問題 466
17.1.1 調整查詢結構 467
17.1.2 適當使用常量 467
17.1.3 給最佳化器一些提示 467
17.2 執行計畫控制:不能直接訪問代碼 475
17.2.1 選項1:改變統計信息 475
17.2.2 選項2:改變資料庫參數 477
17.2.3 選項3:增加或移除訪問路徑 478
17.2.4 選項4:套用基於提示的執行計畫控制機制 478
17.2.5 大綱 479
17.2.6 SQL概要檔案 482
17.2.7 SQL執行計畫基線 498
17.2.8 SQL補丁 507
17.2.9 基於提示的計畫控制機理小結 509
17.3 小結 509
第 18章 其他SQL結構 510
18.1 條件邏輯結構 510
18.1.1 DECODE 510
18.1.2 CASE 511
18.1.3 NVL、NVL2和COALESCE 515
18.1.4 NULLIF 517
18.2 PIVOT/UNPIVOT查詢 518
18.2.1 PIVOT 518
18.2.2 UNPIVOT 523
18.3 生成測試數據的SQL 526
18.3.1 想要得到什麼樣的數據 526
18.3.2 CONNECT BY 527
18.3.3 MODEL子句 529
18.3.4 遞歸WITH子句 529
18.3.5 數據生成小結 530
18.4 小結 530
3.2.4 索引範圍掃描 76
3.2.5 索引全掃描 77
3.2.6 索引跳躍掃描 80
3.2.7 索引快速全掃描 81
3.3 聯結方法 82
3.3.1 嵌套循環聯結 83
3.3.2 排序—合併聯結 85
3.3.3 散列聯結 86
3.3.4 笛卡兒聯結 89
3.3.5 外聯結 90
3.4 小結 95
第4章 SQL是關於集合的 96
4.1 以面向集合的思維方式來思考 96
4.1.1 從面向過程轉變為基於集合的思維方式 97
4.1.2 面向過程與基於集合的思維方式:例子 100
4.2 集合運算 102
4.2.1 UNION和UNION ALL 103
4.2.2 MINUS 106
4.2.3 INTERSECT 107
4.3 集合與空值 108
4.3.1 空值與非直觀結果 108
4.3.2 空值與集合運算 111
4.3.3 空值與GROUP BY和ORDER BY 112
4.3.4 空值與聚合函式 114
4.4 小結 114
第5章 提出問題 115
5.1 問出好的問題 115
5.2 提問的目的 116
5.3 問題的種類 116
5.4 問題的問題 118
5.5 數據的問題 120
5.6 建立邏輯表達式 125
5.7 小結 130
第6章 SQL執行計畫 131
6.1 解釋計畫 131
6.1.1 使用解釋計畫 131
6.1.2 PLAN_TABLE 133
6.1.3 分解計畫 135
6.1.4 導致解釋計畫未達目的的原因 136
6.1.5 閱讀計畫 139
6.1.6 訪問和篩選謂語 140
6.1.7 使計畫便於閱讀 141
6.2 執行計畫 142
6.2.1 查看**近生成的SQL語句 142
6.2.2 查看相關執行計畫 142
6.2.3 收集執行計畫統計信息 144
6.2.4 標識SQL語句以便以後取回計畫 146
6.2.5 深入理解DBMS_XPLAN 149
6.2.6 使用SQL監控報告 154
6.2.7 使用計畫信息解決問題 157
6.3 小結 166
第7章 **分組 167
7.1 基本的GROUP BY用法 167
7.2 HAVING子句 170
7.3 GROUP BY的“新”功能 172
7.4 GROUP BY的CUBE擴展 172
7.5 CUBE的實際套用 178
7.6 用GROUPING()函式排除空值 184
7.7 用GROUPING()擴展報告 185
7.8 用GROUPING_ID()擴展報告 186
7.9 GROUPING SETS與ROLLUP() 190
7.10 GROUP BY局限性 192
7.11 小結 195
第8章 分析函式 196
8.1 概覽 196
8.2 示例數據 197
8.3 分析函式剖析 197
8.4 函式列表 198
8.5 聚合函式 199
8.5.1 跨越整個分區的聚合函式 200
8.5.2 細粒度視窗聲明 201
8.5.3 默認視窗聲明 201
8.6 lead和lag 201
8.6.1 語法和排序 202
8.6.2 例1:從前一行中返回一個值 202
8.6.3 理解數據行的位移 203
8.6.4 例2:從下一行中返回一個值 203
8.7 first_value和last_value 204
8.7.1 例子:使用first_value計算**大值 205
8.7.2 例子:使用last_value計算**小值 206
8.8 其他分析函式 206
8.8.1 nth_value 206
8.8.2 rank 208
8.8.3 dense_rank 209
8.8.4 row_number 210
8.8.5 ratio_to_report 211
8.8.6 percent_rank 212
8.8.7 percentile_cont 213
8.8.8 percentile_disc 215
8.8.9 NTILE 216
8.8.10 stddev 217
8.8.11 listagg 218
8.9 性能調優 219
8.9.1 執行計畫 220
8.9.2 謂詞 220
8.9.3 索引 221
8.10 **話題 222
8.10.1 動態SQL 222
8.10.2 嵌套分析函式 224
8.10.3 並行 224
8.10.4 PGA大小 225
8.11 組織行為 225
8.12 小結 226
第9章 MODEL子句 227
9.1 電子表格 228
9.2 使用MODEL子句實現跨行引用 228
9.2.1 示例數據 228
9.2.2 剖析MODEL子句 229
9.2.3 規則 230
9.3 位置和符號引用 231
9.3.1 位置標記 231
9.3.2 符號標記 232
9.3.3 FOR循環 233
9.4 返回更新後的行 234
9.5 求解順序 235
9.5.1 行求解順序 235
9.5.2 規則求解順序 237
9.6 聚合 239
9.7 疊代 240
9.7.1 示例 240
9.7.2 PRESENTV與空值 241
9.8 查找表 242
9.9 空值 244
9.10 使用MODEL子句進行性能調優 245
9.10.1 執行計畫 245
9.10.2 謂詞推進 248
9.10.3 物化視圖 250
9.10.4 並行 251
9.10.5 MODEL子句執行中的分區 252
9.10.6 索引 253
9.11 子查詢因子化 254
9.12 小結 255
第 10章 子查詢因子化 256
10.1 標準用法 256
10.2 用WITH定義PL/SQL函式 259
10.3 SQL最佳化 261
10.3.1 測試執行計畫 261
10.3.2 測試查詢改變的影響 265
10.3.3 尋找其他最佳化機會 268
10.3.4 將子查詢因子化套用到PL/SQL中 272
10.4 遞歸子查詢 275
10.4.1 CONNECT BY示例 275
10.4.2 RSF示例 277
10.4.3 RSF的限制條件 278
10.4.4 與CONNECT BY的不同點 278
10.5 複製CONNECT BY的功能 279
10.5.1 LEVEL偽列 280
10.5.2 SYS_CONNECT_BY_PATH函式 281
10.5.3 CONNECT_BY_ROOT運算符 283
10.5.4 CONNECT_BY_ISCYCLE偽列和NOCYCLE參數 285
10.5.5 CONNECT_BY_ISLEAF偽列 288
10.6 小結 292
第 11章 半聯結和反聯結 294
11.1 半聯結 294
11.2 半聯結執行計畫 302
11.3 控制半聯結執行計畫 307
11.3.1 使用提示控制半聯結執行計畫 307
11.3.2 在實例級控制半聯結執行計畫 309
11.4 半聯結限制條件 311
11.5 半聯結必要條件 313
11.6 反聯結 314
11.7 反聯結執行計畫 318
11.8 控制反聯結執行計畫 327
11.8.1 使用提示控制反聯結執行計畫 327
11.8.2 在實例級控制反聯結執行計畫 328
11.9 反聯結限制條件 331
11.10 反聯結必要條件 334
11.11 小結 334
第 12章 索引 335
12.1 理解索引 336
12.1.1 什麼時候使用索引 336
12.1.2 列的選擇 338
12.1.3 空值問題 339
12.2 索引結構類型 340
12.2.1 B-樹索引 340
12.2.2 點陣圖索引 341
12.2.3 索引組織表 342
12.3 分區索引 344
12.3.1 局部索引 344
12.3.2 全局索引 346
12.3.3 散列分區與範圍分區 347
12.4 與套用特點相匹配的解決方案 350
12.4.1 壓縮索引 350
12.4.2 基於函式的索引 352
12.4.3 反轉鍵索引 354
12.4.4 降序索引 355
12.5 管理問題的解決方案 356
12.5.1 不可見索引 356
12.5.2 虛擬索引 358
12.5.3 點陣圖聯結索引 358
12.6 小結 360
第 13章 SELECT以外的內容 361
13.1 INSERT 361
13.1.1 直接路徑插入 361
13.1.2 多表插入 363
13.1.3 條件插入 365
13.1.4 DML錯誤日誌 365
13.2 UPDATE 371
13.2.1 CTAS與UPDATE的差別 371
13.2.2 INSERT APPEND與UPDATE的差別 374
13.3 DELETE 377
13.4 MERGE 380
13.4.1 語法和用法 380
13.4.2 性能比較 384
13.5 小結 385
第 14章 事務處理 387
14.1 什麼是事務 387
14.2 事務的ACID屬性 388
14.3 事務隔離級別 389
14.4 多版本讀一致性 391
14.5 事務控制語句 392
14.5.1 Commit(提交) 392
14.5.2 Savepoint(保存點) 392
14.5.3 Rollback(回滾) 392
14.5.4 Set Transaction(設定事務) 392
14.5.5 Set Constraints(設定約束) 393
14.6 將運算分組為事務 393
14.7 訂單錄入模式 394
14.8 活動事務 400
14.9 使用保存點 401
14.10 序列化事務 404
14.11 隔離事務 407
14.12 自治事務 410
14.13 小結 414
第 15章 測試與質量保證 415
15.1 測試用例 416
15.2 測試方法 417
15.2.1 單元測試 418
15.2.2 回歸測試 421
15.2.3 模式修改 422
15.2.4 重複單元測試 425
15.3 執行計畫比較 426
15.4 性能測量 431
15.4.1 在代碼中加入性能測量 432
15.4.2 性能測試 436
15.5 破壞性測試 437
15.6 使用性能測量進行系統檢修 439
15.7 小結 441
第 16章 計畫穩定性 443
16.1 計畫不穩定性:理解這個問題 443
16.1.1 統計信息的變化 444
16.1.2 運行環境的改變 446
16.1.3 SQL語句的改變 448
16.1.4 綁定變數窺視 448
16.1.5 自適應游標共享 451
16.2 統計信息反饋 455
16.3 識別執行計畫的不穩定性 459
16.3.1 抓取當前運行查詢的數據 460
16.3.2 查看語句的性能歷史 461
16.3.3 按照執行計畫聚合統計信息 462
16.3.4 尋找執行計畫的統計方差 463
16.3.5 在一個時間點附近檢查偏差 464
16.4 小結 465
第 17章 計畫控制 466
17.1 執行計畫控制:解決問題 466
17.1.1 調整查詢結構 467
17.1.2 適當使用常量 467
17.1.3 給最佳化器一些提示 467
17.2 執行計畫控制:不能直接訪問代碼 475
17.2.1 選項1:改變統計信息 475
17.2.2 選項2:改變資料庫參數 477
17.2.3 選項3:增加或移除訪問路徑 478
17.2.4 選項4:套用基於提示的執行計畫控制機制 478
17.2.5 大綱 479
17.2.6 SQL概要檔案 482
17.2.7 SQL執行計畫基線 498
17.2.8 SQL補丁 507
17.2.9 基於提示的計畫控制機理小結 509
17.3 小結 509
第 18章 其他SQL結構 510
18.1 條件邏輯結構 510
18.1.1 DECODE 510
18.1.2 CASE 511
18.1.3 NVL、NVL2和COALESCE 515
18.1.4 NULLIF 517
18.2 PIVOT/UNPIVOT查詢 518
18.2.1 PIVOT 518
18.2.2 UNPIVOT 523
18.3 生成測試數據的SQL 526
18.3.1 想要得到什麼樣的數據 526
18.3.2 CONNECT BY 527
18.3.3 MODEL子句 529
18.3.4 遞歸WITH子句 529