Chinapub在線購買地址:http://www.china-pub.com/301651
當(dāng)當(dāng)網(wǎng)在線購買地址:http://product.dangdang.com/product.aspx?product_id=20368319
試讀電子版下載:
下載地址1:http://www.tkk7.com/Files/huanzhugege/cxydSQLjd.zip
下載地址2: http://www.namipan.com/d/2ec1eacc92d2678a38095bef1d19ed938f78831d6f791500
第一本專門為程序員編寫的數(shù)據(jù)庫圖書
《程序員的SQL金典》
- 將子查詢、表連接、數(shù)據(jù)庫語法差異等用通俗易懂、詼諧幽默的語言講解出來
- 配合大量真實案例,學(xué)了就能用,在短時間內(nèi)成為數(shù)據(jù)庫開發(fā)高手
- 高度提取不同數(shù)據(jù)庫的共同點,仔細(xì)分析不同點,并給出解決方案,同時學(xué)會MSSQLServer、MYSQL、Oracle、DB2數(shù)據(jù)庫不再是夢
- 國內(nèi)第一本講解開窗函數(shù)實際應(yīng)用的圖書
輕舉技術(shù)之“綱”,張合用之“目”,鍛造SQL高可用性數(shù)據(jù)庫應(yīng)用指南從理論到實踐,凝聚SQL主流數(shù)據(jù)庫最前沿的技術(shù)要領(lǐng)。
本書特色:主要介紹SQL的語法規(guī)則及在實際開發(fā)中的應(yīng)用,并且對SQL在MySQL、MS SQL Server、Oracle和DB2中的差異進(jìn)行了分析;詳細(xì)講解數(shù)據(jù)庫對增、刪、改、查等SQL的支持并給出了相應(yīng)的SQL應(yīng)用案例;透徹分析函數(shù)、子查詢、表連接、不同DBMS中的SQL語法差異、SQL調(diào)優(yōu)、NULL值處理、事務(wù)、開窗函數(shù)等高級技術(shù);通過對實際案例開發(fā)過程的詳細(xì)分析,使讀者掌握SQL的綜合應(yīng)用技巧。
內(nèi)容提要
本書主要介紹SQL以及在實際開發(fā)中的應(yīng)用,并且對SQL在MYSQL、MSSQLServer、Oracle和DB2中的差異性進(jìn)行了分析。本書分為三部分:第一部分為基礎(chǔ)篇,主要講解數(shù)據(jù)庫對增刪改查等SQL的支持,給出了這些SQL的應(yīng)用案例;第二部分為進(jìn)階篇,講解了函數(shù)、子查詢、表聯(lián)接、不同DBMS中SQL語法差異、SQL調(diào)優(yōu)、NULL值處理、事務(wù)、開窗函數(shù)等高級技術(shù);第三部分為案例篇,講解了前兩部分的知識的綜合運用。此書適用于學(xué)習(xí)數(shù)據(jù)庫編程的讀者,對于有一定數(shù)據(jù)庫開發(fā)經(jīng)驗的讀者也有非常大的參考價值。
前言
市面上講解數(shù)現(xiàn)在據(jù)庫的書都花了很多篇幅講解數(shù)據(jù)庫的備份、授權(quán)、調(diào)優(yōu)、修復(fù)、監(jiān)控等內(nèi)容,這些內(nèi)容是數(shù)據(jù)庫管理員(DBA)應(yīng)該掌握的,而對于程序員來說更需要去掌握的則是SQL語句的使用。但是市面上專門講解SQL語句的書非常少,初學(xué)者學(xué)習(xí)數(shù)據(jù)庫開發(fā)過程中常常被那些寫給DBA的書弄的暈頭轉(zhuǎn)向,無法真正快速的掌握SQL技術(shù);而且這些書中講解的SQL也常常是針對特定數(shù)據(jù)庫系統(tǒng)的專有實現(xiàn),無法很容易的在其他數(shù)據(jù)庫系統(tǒng)中運行,讀者需要閱讀大量的書和查閱大量的文檔才能掌握不同數(shù)據(jù)庫系統(tǒng)的使用。
本書是專門寫給程序員的,因此沒有講解備份、授權(quán)、調(diào)優(yōu)、修復(fù)、監(jiān)控等開發(fā)人員不關(guān)心的內(nèi)容,直接從SQL語句入手讓讀者快速的掌握數(shù)據(jù)庫開發(fā)的技能。“面向開發(fā)人員,講解對開發(fā)人員最有用的知識”是本書的編寫宗旨。
MYSQL、MSSQLServer、Oracle和DB2等都是非常流行的數(shù)據(jù)庫管理系統(tǒng)(DBMS),雖然在大部分SQL語法上這些DBMS實現(xiàn)都是一致的,不過在實現(xiàn)細(xì)節(jié)以及高級語法方面這些DBMS的實現(xiàn)差異還是非常大的。如果編寫能夠兼容這些DBMS的SQL語句是開發(fā)人員經(jīng)常需要面對的問題。本書將幫助讀者從根本上解決這個問題。
很多開發(fā)人員對于SQL語句的掌握只限于簡單的SELECT、UPDATE語句,對于稍微復(fù)雜的邏輯經(jīng)常需要編寫程序代碼來完成,這不僅無法發(fā)揮數(shù)據(jù)庫的優(yōu)勢,而且開發(fā)出的系統(tǒng)性能非常低,而如果能夠使用數(shù)據(jù)庫函數(shù)、子查詢、表聯(lián)接、開窗函數(shù)等高級的SQL特性則可以大大簡化系統(tǒng)開發(fā)的難度,并且提高系統(tǒng)的性能。本書將對這些高級特性進(jìn)行詳細(xì)的講解。
本書第1、2章介紹數(shù)據(jù)庫系統(tǒng)的基本知識以及基本操作;第3章介紹Insert、Delete和Update語句的基本應(yīng)用;第4章對Select語句進(jìn)行全面的介紹,對模糊匹配、分組、限制數(shù)據(jù)條數(shù)、計算字段、組合查詢等高級內(nèi)容進(jìn)行了重點的講解;第5章介紹常用的數(shù)據(jù)庫函數(shù)以及它們在主流DBMS中的實現(xiàn)差異;第6章介紹索引與約束等知識點;第7、8章分別介紹表連接、子查詢等高級查詢技術(shù);第9章對主流DBMS的語法差異進(jìn)行分析,并且給出了解決方案;第10章介紹注入漏洞攻擊、SQL調(diào)優(yōu)、事務(wù)、自動增長字段、NULL值處理、開窗函數(shù)等高級話題;第11章以一個案例講解書中知識點在實際開發(fā)中的應(yīng)用。
在此,我要感謝為這本書的誕生給于我?guī)椭乃腥恕J紫任乙兄xCowNew開源團(tuán)隊的朋友們一直以來的無私奉獻(xiàn);感謝KingChou在開發(fā)CowNewSQL過程中的卓越工作,沒有CowNewSQL也就不會有這本書的問世;還要感謝EasyJF的蔡世友,他一直以來對開源事業(yè)的奉獻(xiàn)是值得我學(xué)習(xí)的;最后我要感謝電子工業(yè)出版社的田小康經(jīng)理,他的高效工作使得本書能夠順利的完成和出版。
如果您對我的書有任何意見和建議,您可以給我發(fā)送郵件:about521@163.com,本書相關(guān)的后續(xù)資料將會發(fā)布到CowNew開源團(tuán)隊網(wǎng)站(http://www.cownew.com)中。
第1章 數(shù)據(jù)庫入門 1
1.1 數(shù)據(jù)庫概述 1
1.1.1 數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng) 1
1.1.2 數(shù)據(jù)庫能做什么 2
1.1.3 主流數(shù)據(jù)庫管理系統(tǒng)介紹 2
1.2 數(shù)據(jù)庫基礎(chǔ)概念 5
1.2.1 Catalog 5
1.2.2 表(Table) 6
1.2.3 列(Column) 7
1.2.4 數(shù)據(jù)類型(DataType) 8
1.2.5 記錄(Record) 9
1.2.6 主鍵(PrimaryKey) 9
1.2.7 索引(Index) 10
1.2.8 表關(guān)聯(lián) 12
1.2.9 數(shù)據(jù)庫的語言——SQL 13
1.2.10 DBA與程序員 14
第2章 數(shù)據(jù)表的創(chuàng)建和管理 17
2.1 數(shù)據(jù)類型 17
2.1.1 整數(shù)類型 17
2.1.2 數(shù)值類型 19
2.1.3 字符相關(guān)類型 21
2.1.4 日期時間類型 23
2.1.5 二進(jìn)制類型 24
2.2 通過SQL語句管理數(shù)據(jù)表 25
2.2.1 創(chuàng)建數(shù)據(jù)表 25
2.2.2 定義非空約束 26
2.2.3 定義默認(rèn)值 27
2.2.4 定義主鍵 27
2.2.5 定義外鍵 29
2.2.6 修改已有數(shù)據(jù)表 30
2.2.7 刪除數(shù)據(jù)表 31
2.2.8 受限操作的變通解決方案 31
第3章 數(shù)據(jù)的增、刪、改 33
3.1 數(shù)據(jù)的插入 34
3.1.1 簡單的INSERT語句 34
3.1.2 簡化的INSERT語句 36
3.1.3 非空約束對數(shù)據(jù)插入的影響 36
3.1.4 主鍵對數(shù)據(jù)插入的影響 37
3.1.5 外鍵對數(shù)據(jù)插入的影響 38
3.2 數(shù)據(jù)的更新 38
3.2.1 簡單的數(shù)據(jù)更新 39
3.2.2 帶WHERE子句的UPDATE語句 40
3.2.3 非空約束對數(shù)據(jù)更新的影響 41
3.2.4 主鍵對數(shù)據(jù)更新的影響 42
3.2.5 外鍵對數(shù)據(jù)更新的影響 42
3.3 數(shù)據(jù)的刪除 43
3.3.1 簡單的數(shù)據(jù)刪除 43
3.3.2 帶WHERE子句的DELETE語句 44
第4章 數(shù)據(jù)的檢索 47
4.1 SELECT基本用法 48
4.1.1 簡單的數(shù)據(jù)檢索 48
4.1.2 檢索出需要的列 49
4.1.3 列別名 51
4.1.4 按條件過濾 52
4.1.5 數(shù)據(jù)匯總 53
4.1.6 排序 56
4.2 高級數(shù)據(jù)過濾 59
4.2.1 通配符過濾 59
4.2.2 空值檢測 63
4.2.3 反義運算符 64
4.2.4 多值檢測 65
4.2.5 范圍值檢測 66
4.2.6 低效的“WHERE 1=1” 68
4.3 數(shù)據(jù)分組 72
4.3.1 數(shù)據(jù)分組入門 74
4.3.2 數(shù)據(jù)分組與聚合函數(shù) 76
4.3.3 HAVING語句 79
4.4 限制結(jié)果集行數(shù) 81
4.4.1 MySQL 81
4.4.2 MS SQL Server 2000 82
4.4.3 MS SQL Server 2005 83
4.4.4 Oracle 84
4.4.5 DB2 86
4.4.6 數(shù)據(jù)庫分頁 88
4.5 抑制數(shù)據(jù)重復(fù) 90
4.6 計算字段 91
4.6.1 常量字段 92
4.6.2 字段間的計算 93
4.6.3 數(shù)據(jù)處理函數(shù) 95
4.6.4 字符串的拼接 97
4.6.5 計算字段的其他用途 103
4.7 不從實體表中取的數(shù)據(jù) 105
4.8 聯(lián)合結(jié)果集 107
4.8.1 簡單的結(jié)果集聯(lián)合 108
4.8.2 聯(lián)合結(jié)果集的原則 110
4.8.3 UNION ALL 112
4.8.4 聯(lián)合結(jié)果集應(yīng)用舉例 114
第5章 函數(shù) 119
5.1 數(shù)學(xué)函數(shù) 122
5.1.1 求絕對值 122
5.1.2 求指數(shù) 122
5.1.3 求平方根 123
5.1.4 求隨機(jī)數(shù) 123
5.1.5 舍入到最大整數(shù) 125
5.1.6 舍入到最小整數(shù) 126
5.1.7 四舍五入 127
5.1.8 求正弦值 128
5.1.9 求余弦值 129
5.1.10 求反正弦值 129
5.1.11 求反余弦值 130
5.1.12 求正切值 130
5.1.13 求反正切值 131
5.1.14 求兩個變量的反正切 131
5.1.15 求余切 132
5.1.16 求圓周率π值 132
5.1.17 弧度制轉(zhuǎn)換為角度制 133
5.1.18 角度制轉(zhuǎn)換為弧度制 134
5.1.19 求符號 134
5.1.20 求整除余數(shù) 135
5.1.21 求自然對數(shù) 136
5.1.22 求以10為底的對數(shù) 136
5.1.23 求冪 137
5.2 字符串函數(shù) 137
5.2.1 計算字符串長度 138
5.2.2 字符串轉(zhuǎn)換為小寫 138
5.2.3 字符串轉(zhuǎn)換為大寫 139
5.2.4 截去字符串左側(cè)空格 139
5.2.5 截去字符串右側(cè)空格 140
5.2.6 截去字符串兩側(cè)的空格 141
5.2.7 取子字符串 143
5.2.8 計算子字符串的位置 144
5.2.9 從左側(cè)開始取子字符串 145
5.2.10 從右側(cè)開始取子字符串 146
5.2.11 字符串替換 147
5.2.12 得到字符的ASCII碼 148
5.2.13 得到一個ASCII碼數(shù)字對應(yīng)的字符 149
5.2.14 發(fā)音匹配度 151
5.3 日期時間函數(shù) 153
5.3.1 日期、時間、日期時間與時間戳 153
5.3.2 主流數(shù)據(jù)庫系統(tǒng)中日期時間類型的表示方式 154
5.3.3 取得當(dāng)前日期時間 154
5.3.4 日期增減 157
5.3.5 計算日期差額 166
5.3.6 計算一個日期是星期幾 172
5.3.7 取得日期的指定部分 177
5.4 其他函數(shù) 183
5.4.1 類型轉(zhuǎn)換 183
5.4.2 空值處理 188
5.4.3 CASE函數(shù) 191
5.5 各數(shù)據(jù)庫系統(tǒng)獨有函數(shù) 194
5.5.1 MySQL中的獨有函數(shù) 195
5.5.2 MS SQL Server中的獨有函數(shù) 202
5.5.3 Oracle中的獨有函數(shù) 206
第6章 索引與約束 209
6.1 索引 209
6.2 約束 211
6.2.1 非空約束 211
6.2.2 唯一約束 212
6.2.3 CHECK約束 217
6.2.4 主鍵約束 221
6.2.5 外鍵約束 224
第7章 表連接 233
7.1 表連接簡介 236
7.2 內(nèi)連接(INNER JOIN) 236
7.3 不等值連接 240
7.4 交叉連接 241
7.5 自連接 245
7.6 外部連接 248
7.6.1 左外部連接 250
7.6.2 右外部連接 251
7.6.3 全外部連接 252
第8章 子查詢 255
8.1 子查詢?nèi)腴T 261
8.1.1 單值子查詢 261
8.1.2 列值子查詢 263
8.2 SELECT列表中的標(biāo)量子查詢 265
8.3 WHERE子句中的標(biāo)量子查詢 267
8.4 集合運算符與子查詢 270
8.4.1 IN運算符 270
8.4.2 ANY和SOME運算符 272
8.4.3 ALL運算符 274
8.4.4 EXISTS運算符 275
8.5 在其他類型SQL語句中的子查詢應(yīng)用 277
8.5.1 子查詢在INSERT語句中的應(yīng)用 277
8.5.2 子查詢在UPDATE語句中的應(yīng)用 283
8.5.3 子查詢在DELETE語句中的應(yīng)用 285
第9章 主流數(shù)據(jù)庫的SQL語法差異解決方案 287
9.1 SQL語法差異分析 287
9.1.1 數(shù)據(jù)類型的差異 287
9.1.2 運算符的差異 288
9.1.3 函數(shù)的差異 289
9.1.4 常用SQL的差異 289
9.1.5 取元數(shù)據(jù)信息的差異 290
9.2 消除差異性的方案 293
9.2.1 為每種數(shù)據(jù)庫編寫不同的SQL語句 293
9.2.2 使用語法交集 294
9.2.3 使用SQL實體對象 294
9.2.4 使用ORM工具 295
9.2.5 使用SQL翻譯器 296
9.3 CowNewSQL翻譯器 299
9.3.1 CowNewSQL支持的數(shù)據(jù)類型 299
9.3.2 CowNewSQL支持的SQL語法 300
9.3.3 CowNewSQL支持的函數(shù) 305
9.3.4 CowNewSQL的使用方法 309
第10章 高級話題 313
10.1 SQL注入漏洞攻防 313
10.1.1 SQL注入漏洞原理 313
10.1.2 過濾敏感字符 314
10.1.3 使用參數(shù)化SQL 315
10.2 SQL調(diào)優(yōu) 316
10.2.1 SQL調(diào)優(yōu)的基本原則 317
10.2.2 索引 317
10.2.3 全表掃描和索引查找 318
10.2.4 優(yōu)化手法 318
10.3 事務(wù) 324
10.3.1 事務(wù)簡介 324
10.3.2 事務(wù)的隔離 325
10.3.3 事務(wù)的隔離級別 326
10.3.4 事務(wù)的使用 327
10.4 自動增長字段 327
10.4.1 MySQL中的自動增長字段 327
10.4.2 MS SQL Server中的自動增長字段 328
10.4.3 Oracle中的自動增長字段 329
10.4.4 DB2中的自動增長字段 332
10.5 業(yè)務(wù)主鍵與邏輯主鍵 333
10.6 NULL的學(xué)問 334
10.6.1 NULL與比較運算符 336
10.6.2 NULL和計算字段 337
10.6.3 NULL和字符串 338
10.6.4 NULL和函數(shù) 339
10.6.5 NULL和聚合函數(shù) 339
10.7 開窗函數(shù) 340
10.7.1 開窗函數(shù)簡介 342
10.7.2 PARTITION BY子句 344
10.7.3 ORDER BY子句 346
10.7.4 高級開窗函數(shù) 353
10.8 WITH子句與子查詢 360
第11章 案例講解 363
11.1 報表制作 371
11.1.1 顯示制單人詳細(xì)信息 371
11.1.2 顯示銷售單的詳細(xì)信息 373
11.1.3 計算收益 374
11.1.4 產(chǎn)品銷售額統(tǒng)計 378
11.1.5 統(tǒng)計銷售記錄的份額 379
11.1.6 為采購單分級 380
11.1.7 檢索所有重疊日期銷售單 383
11.1.8 為查詢編號 385
11.1.9 標(biāo)記所有單內(nèi)最大銷售量 386
11.2 排序 389
11.2.1 非字段排序規(guī)則 389
11.2.2 隨機(jī)排序 390
11.3 表間比較 391
11.3.1 檢索制作過采購單的人制作的銷售單 391
11.3.2 檢索沒有制作過采購單的人制作的銷售單 392
11.4 表復(fù)制 394
11.4.1 復(fù)制源表的結(jié)構(gòu)并復(fù)制表中的數(shù)據(jù) 394
11.4.2 只復(fù)制源表的結(jié)構(gòu) 395
11.5 計算字符在字符串中出現(xiàn)的次數(shù) 396
11.6 去除最高分、最低分 396
11.6.1 去除所有最低、最高值 397
11.6.2 只去除一個最低、最高值 397
11.7 與日期相關(guān)的應(yīng)用 398
11.7.1 計算銷售確認(rèn)日和制單日之間相差的天數(shù) 398
11.7.2 計算兩張銷售單之間的時間間隔 399
11.7.3 計算銷售單制單日期所在年份的天數(shù) 401
11.7.4 計算銷售單制單日期所在月份的第一天和最后一天 402
11.8 結(jié)果集轉(zhuǎn)置 403
11.8.1 將結(jié)果集轉(zhuǎn)置為一行 404
11.8.2 把結(jié)果集轉(zhuǎn)置為多行 406
11.9 遞歸查詢 410
11.9.1 Oracle中的CONNECT BY子句 410
11.9.2 Oracle中的SYS_CONNECT_BY_PATH()函數(shù) 414
11.9.3 My SQL Server和DB2中遞歸查詢 415
附錄A 常用數(shù)據(jù)庫系統(tǒng)的安裝和使用 417
A.1 DB2的安裝和使用 417
A.2 MySQL的安裝和使用 429
A.3 Oracle的安裝和使用 441
A.4 Microsoft SQL Server的安裝和使用 452
