前言 1
第1部分 SQL的基本概念和原理 5
第1章 SQL和關系型數據庫管理系統(tǒng) 7
1.1 理想的數據庫特征 7
1.1.1 充足的容量 7
1.1.2 足夠的安全 8
1.1.3 多用戶環(huán)境 8
1.1.4 效率 8
1.1.5 可伸縮性 8
1.1.6 用戶友好 8
1.2 選擇數據庫軟件 9
1.2.1 市場份額 9
1.2.2 所有權的總成本 9
1.2.3 支持和持續(xù) 10
1.3 一切的細節(jié):DBMS實現 10
1.4 現實中的數據庫例子 11
1.4.1 訂購管理系統(tǒng)數據庫 11
1.4.2 健康護理提供者數據庫 12
1.4.3 科學數據庫 12
1.4.4 非盈利組織數據庫 13
1.5 舊有數據庫 13
1.5.1 平面文件數據庫 13
1.5.2 層次數據庫 14
1.5.3 網狀數據庫 15
1.6 關系型數據庫 16
1.6.1 表 16
1.6.2 關系 17
1.6.3 主鍵 18
1.6.4 外鍵 18
1.6.5 RDBMS的發(fā)展 19
1.7 對象數據庫和對象關系型數據庫模型 19
1.8 SQL和SQL標準簡史 20
1.8.1 卑微的開始:RDBMS和SQL的演變 20
1.8.2 SQL標準簡史 22
1.9 小結 24
第2章 SQL基本概念和原理 25
2.1 SQL標準回顧 25
2.2 SQL初探 28
2.2.1 數據庫范例 28
2.2.2 獲取和導出數據 29
2.2.3 從不同的角度查看數據 31
2.2.4 聚合 32
2.2.5 數據安全 33
2.2.6 從客戶端應用程序訪問數據 34
2.2.7 新的發(fā)展 34
2.3 平臺無關性 35
2.4 小結 37
第3章 SQL數據類型 39
3.1 字符串與二進制串 40
3.1.1 字符串 40
3.1.2 二進制串 46
3.2 數字 48
3.2.1 精確的數字 48
3.2.2 近似的數字 51
3.3 日期和時間數據類型 52
3.3.1 復雜數據類型入門 52
3.3.2 日期和時間實現 53
3.4 對象和用戶定義的數據類型 58
3.4.1 SQL99 59
3.4.2 Oracle 9i 59
3.4.3 DB2 UDB 8.1 61
3.5 其他數據類型 62
3.5.1 BOOLEAN 62
3.5.2 ROWID 63
3.5.3 UROWID 63
3.5.4 BFILE 63
3.5.5 DATALINK 63
3.5.6 BIT 63
3.5.7 TIMESTAMP 63
3.6 NULL 64
3.7 小結 64
第2部分 創(chuàng)建和修改數據庫對象 65
第4章 創(chuàng)建RDBMS對象 67
4.1 表 67
4.1.1 CREATE TABLE語句 68
4.2 索引 88
4.2.1 CREATE INDEX語句 90
4.3 視圖 93
4.3.1 CREATE VIEW語句 93
4.3.2 創(chuàng)建復雜視圖 98
4.4 別名和同義詞 100
4.4.1 SQL99 102
4.4.2 Oracle 9i的CREATE SYNONYM語句 102
4.4.3 DB2 UDB 8.1 的CREATE ALIAS/SYNONYM語句 103
4.4.4 MS SQL Server 2000 103
4.5 模式 103
4.5.1 CREATE SCHEMA語句 103
4.6 其他SQL99和實現專有的對象 107
4.6.1 SQL99中的域 107
4.6.2 表空間和文件組 107
4.6.3 序列 109
4.6.4 物化視圖(Oracle 9i) 114
4.6.5 數據庫鏈接(Oracle 9i) 115
4.7 CREATE語句交叉參考 116
4.8 小結 118
第5章 修改和刪除RDBMS對象 119
5.1 表 119
5.1.1 ALTER TABLE語句 119
5.1.2 DROP TABLE語句 127
5.2 索引 129
5.2.1 Oracle 9i中的ALTER INDEX語句 129
5.2.2 DROP INDEX語句 130
5.3 視圖 131
5.3.1 ALTER VIEW語句 131
5.3.2 DROP VIEW語句 132
5.4 別名和同義詞 133
5.5 模式 134
5.6 其他實現專有的對象 134
5.6.1 表空間 134
5.6.2 序列 136
5.7 ALTER和DROP語句交叉參考 137
5.8 小結 139
第3部分 數據操作和事務控制 141
第6章 數據操作語言 143
6.1 INSERT:用數據來填充表 143
6.1.1 一般的INSERT語句子句 144
6.1.2 與開發(fā)商有關的特殊的INSERT語句 151
6.2 UPDATE:更新表的數據 155
6.2.1 一般的UPDATE語句子句 156
6.2.2 開發(fā)商特有的UPDATE語句細節(jié) 159
6.3 DELETE:從表中刪除數據 160
6.3.1 一般的DELETE語句子句 161
6.3.2 開發(fā)商特有的DELETE語句子句 163
6.4 其他用于操作數據的SQL語句 163
6.4.1 MERGE語句 163
6.4.2 TRUNCATE語句 164
6.5 小結 165
第7章 會話. 事務和鎖定 167
7.1 會話 167
7.2 事務 174
7.2.1 什么是一個事務 174
7.2.2 事務的COMMIT和ROLLBACK 175
7.2.3 事務隔離級別 180
7.3 理解鎖定 182
7.3.1 鎖定模式 183
7.3.2 處理死鎖 185
7.4 小結 186
第4部分 檢索和轉換數據 187
第8章 理解SELECT語句 189
8.1 單一表SELECT語句語法 189
8.2 SELECT子句:到底要選擇什么 190
8.2.1 單一列選擇 190
8.2.2 多列SELECT 190
8.2.3 使用字面值. 函數和計算列 193
8.2.4 在一個SELECT子句中使用子查詢 197
8.3 FROM子句 198
8.3.1 從表和視圖中選擇 198
8.3.2 在一個FROM子句中使用別名 198
8.3.3 在一個FROM子句中使用子查詢 199
8.4 WHERE子句:設置水平限制 200
8.4.1 使用比較運算符 200
8.4.2 復合運算符:使用AND和OR 201
8.4.3 使用BETWEEN運算符 202
8.4.4 使用IN運算符:設置成員資格測試 203
8.4.5 使用IS NULL運算符:針對NULL的專門測試 204
8.4.6 在一個WHERE子句中使用子查詢 205
8.5 GROUP BY和HAVING子句:匯總結果 208
8.6 ORDER BY子句:排序查詢的輸出 211
8.7 聯合多個查詢的結果 214
8.7.1 UNION 214
8.7.2 EXCEPT 218
8.8 小結 220
第9章 多表查詢 221
9.1 內連接 221
9.1.1 用于內連接的兩個語法 221
9.1.2 同等連接 223
9.1.3 非同等連接 225
9.1.4 自連接 227
9.1.5 交叉連接 229
9.1.6 連接兩個以上的表 230
9.2 外連接:基于包含NULL值的列連接表 233
9.2.1 外連接的兩個語法 233
9.2.2 左外連接 234
9.2.3 右外連接 237
9.2.4 全外連接 238
9.2.5 合并連接 239
9.3 涉及內聯視圖的連接 239
9.4 使用相關查詢的多表連接 240
9.5 提高多表查詢的效率 241
9.6 小結 242
第10章 SQL函數 243
10.1 數字函數 245
10.1.1 CEIL 246
10.1.2 ROUND 246
10.1.3 TRUNC 247
10.1.4 RAND 248
10.1.5 SIGN 249
10.2 字符串函數 249
10.2.1 CONCAT 250
10.2.2 CHARINDEX, INSTR, LOCATE以及POSSTR 251
10.2.3 SUBSTR和SUBSTRING 253
10.2.4 LENGTH 254
10.2.5 LOWER和UPPER 255
10.2.6 TO_CHAR, CHAR以及STR 255
10.2.7 REPLACE 256
10.2.8 REPLICATE和REPEAT 256
10.2.9 TRANSLATE 257
10.2.10 TRIM, LTRIM以及RTRIM 258
10.3 日期和時間函數 259
10.3.1 GETDATE, SYSDATE以及CURRENT DATE時區(qū)函數 260
10.3.2 ADD_MONTHS和DATEADD 262
10.3.3 EXTRACT和DATEPART 264
10.3.4 DAYNAME, MONTHNAME以及DATENAME 264
10.3.5 MONTHS_BETWEEN和DATEDIFF 265
10.4 聚合函數 266
10.4.1 SUM 267
10.4.2 COUNT 268
10.4.3 AVG 269
10.4.4 MIN和MAX 270
10.5 轉換函數 271
10.5.1 不同數據類型之間的轉換 272
10.5.2 在不同的字符集之間轉換 278
10.5.3 Oracle 9i的CONVERT,TRANSLATE … USING和UNISTR 278
10.5.4 數據類型專有的轉換函數 279
10.6 混雜函數 280
10.6.1 DECODE和CASE 281
10.6.2 COALESCE和NULLIF 283
10.6.3 NVL, NVL2以及ISNULL轉換中易犯的錯誤 285
10.7 用戶定義的函數 286
10.8 小結 286
第11章 SQL運算符 287
11.1 算術運算符 287
11.2 邏輯運算符 290
11.2.1 ALL 291
11.2.2 ANY | SOME 291
11.2.3 BETWEEN AND 291
11.2.4 IN 293
11.2.5 EXISTS 294
11.2.6 LIKE 295
11.2.7 AND 297
11.2.8 NOT 297
11.2.9 OR 298
11.3 運算符優(yōu)先級 298
11.4 賦值運算符 300
11.5 比較運算符 301
11.6 位運算符 303
11.7 用戶定義的運算符 305
11.8 小結 306
第5部分 利用系統(tǒng)目錄來實現安全 307
第12章 SQL和RDBMS的安全 309
12.1 基本的安全機制 309
12.1.1 標識和身份驗證 309
12.1.2 授權和訪問控制 309
12.1.3 加密 310
12.1.4 完整性和一致性 310
12.1.5 審核 310
12.2 定義一個數據庫用戶 310
12.3 使用特權來管理安全 314
12.3.1 GRANT語句 314
12.3.2 REVOKE特權 326
12.4 使用角色管理安全 331
12.5 利用視圖實現安全 336
12.6 利用約束實現安全 338
12.7 利用存儲過程和觸發(fā)器實現安全 339
12.8 數據加密 341
12.9 數據庫審核 345
12.10 安全標準 348
12.10.1 國際安全標準 348
12.11 小結 350
第13章 系統(tǒng)目錄和INFORMATION_SCHEMA 351
13.1 SQL系統(tǒng)目錄 351
13.2 Oracle 9i數據字典 353
13.2.1 Oracle數據字典結構 353
13.2.2 Oracle數據字典和SQL99標準 355
13.2.3 更深一級:有關元數據的數據 356
13.3 IBM DB2 UDB 8.1系統(tǒng)目錄 358
13.3.1 DB2中的INFORMATION_SCHEMA對象 358
13.3.2 獲得有關INFORMATION_SCHEMA對象的信息 360
13.4 Microsoft SQL Server 2000系統(tǒng)目錄 361
13.4.1 MS SQL Server 2000的INFORMATION_SCHEMA視圖 361
13.4.2 Microsoft SQL Server系統(tǒng)存儲過程 364
13.4.3 Microsoft SQL Server 2000系統(tǒng)函數 368
13.5 小結 370
第6部分 超越SQL:過程化程序設計和數據庫訪問機制 371
第14章 存儲過程. 觸發(fā)器以及用戶定義的函數 373
14.1 過程化擴展的用途和好處 374
14.1.1 性能和網絡通信量 374
14.1.2 數據庫安全 375
14.1.3 代碼的可重用性 375
14.2 SQL過程化語言的關鍵元素 375
14.2.1 變量和賦值 375
14.2.2 模塊化. 子程序以及塊結構 376
14.2.3 傳遞參數 377
14.2.4 有條件地執(zhí)行 380
14.2.5 重復地執(zhí)行 382
14.2.6 游標 383
14.2.7 錯誤處理 387
14.3 存儲過程 389
14.3.1 CREATE PROCEDURE語法 389
14.3.2 創(chuàng)建一個簡單的存儲過程 390
14.3.3 刪除一個存儲過程 395
14.4 用戶定義函數 396
14.4.1 CREATE FUNCTION語法 396
14.4.2 創(chuàng)建一個簡單的函數 397
14.4.3 刪除一個用戶定義函數 399
14.5 觸發(fā)器 400
14.5.1 CREATE TRIGGER語法 400
14.5.2 刪除一個觸發(fā)器 403
14.6 小結 403
第15章 動態(tài)和嵌入式SQL概述 405
15.1 SQL語句處理步驟 405
15.2 嵌入式(靜態(tài))SQL 406
15.2.1 嵌入式SQL和SQL99標準 406
15.2.2 嵌入式SQL基本原理 407
15.3 動態(tài)SQL技術 416
15.3.1 動態(tài)SQL的兩個變種 416
15.3.2 動態(tài)SQL和SQL99標準 416
15.3.3 動態(tài)SQL的基本原理 417
15.4 嵌入式SQL的未來 425
15.5 小結 426
第16章 SQL API 427
16.1 SQL/CLI標準 427
16.2 Microsoft開放式數據庫連接:ODBC 430
16.2.1 在Windows上配置一個ODBC數據源名稱 431
16.3 Java數據庫連接:JDBC 433
16.4 IBM DB2 UDB調用級接口:CLI 437
16.5 Oracle調用接口:OCI 439
16.6 用于OLE的Oracle對象 442
16.7 Microsoft數據訪問接口 444
16.8 小結 451
第17章 新的發(fā)展:XML. OLAP以及對象 453
17.1 XML 453
17.1.1 Oracle 9i 454
17.1.2 IBM DB2 UDB 8.1 455
17.1.3 Microsoft SQL Server 2000 456
17.2 OLAP和商業(yè)智能 457
17.2.1 Oracle 9i 459
17.2.2 IBM DB2 UDB 8.1 459
17.2.3 Microsoft SQL Server 2000 459
17.3 對象 460
17.3.1 OOP 460
17.3.2 Oracle 9i的支持 462
17.3.3 IBM DB2 UDB 8.1的支持 462
17.3.4 Microsoft SQL Server 2000 463
17.3.5 抽象數據類型 464
17.3.6 面向對象的數據庫 464
17.4 小結 466
附錄A 光盤中的內容 467
附錄B ACME樣例數據庫 471
附錄C 關系型數據庫設計基礎 485
附錄D 安裝RDBMS軟件 491
附錄E 訪問RDBMS 521
附錄F 安裝ACME數據庫 531
附錄G SQL函數 535
附錄H SQL語法參考 553
附錄I SQL保留的關鍵字 561
附錄J 不同的RDBMS對SQL99主要功能的遵從性 571
附錄K 其他的RDBMS 581
附錄L 記數系統(tǒng). 布爾代數以及集合論的簡短介紹 585