微軟MVP、51CTO專(zhuān)家講師韓立剛老師嘔心著(zhù)作,十余年企業(yè)實(shí)踐經(jīng)驗+大學(xué)授課經(jīng)驗,毫無(wú)保留
l 范式、多表聯(lián)接、聯(lián)接查詢(xún)、存儲過(guò)程、索引、觸發(fā)、事務(wù)、鎖……這些核心概念你真的懂嗎?
l 用好懂的方式水煮講解復雜概念,所有似懂非懂一掃而光!
l 超10年企業(yè)實(shí)戰經(jīng)驗與多年大學(xué)授課經(jīng)驗完美結合
l 課本知識與企業(yè)需求無(wú)縫銜接,項目教學(xué)+案例教學(xué)+校企合作的完美實(shí)踐
本書(shū)是一本數據庫設計與開(kāi)發(fā)的創(chuàng )新型教材。
本書(shū)以SQL Server為平臺,在滿(mǎn)足知識系統性的前提下,重點(diǎn)解決數據庫設計與開(kāi)發(fā)的學(xué)習過(guò)程中的重點(diǎn)難點(diǎn)問(wèn)題。全書(shū)力求深入淺出,生動(dòng)有趣,貼合職業(yè)需求,以好教、好學(xué)、有用為標準,是一本真正具有創(chuàng )新意義的數據庫技術(shù)教材經(jīng)典。
在軟件設計和開(kāi)發(fā)過(guò)程中,需求分析確定后,在開(kāi)發(fā)軟件前就需要先設計數據庫,然后再編寫(xiě)代碼。本書(shū)講解的內容是軟件開(kāi)發(fā)人員必須要掌握的技術(shù),先講解如何根據項目的需求按關(guān)系型數據庫設計規范設計數據庫中的表,然后使用自己設計的數據庫來(lái)學(xué)習SQL語(yǔ)句。
本書(shū)完整地講述了SQL語(yǔ)句中使用的變量、數據類(lèi)型、注釋行、運算符、常用函數,以及流程控制語(yǔ)句。從單表查詢(xún)講起,講解使用WHERE篩選行將查詢(xún)的結果分組、排序,然后講解多表查詢(xún)和數據匯總,講解多表交叉聯(lián)結、內聯(lián)結、外聯(lián)結、自聯(lián)結,使用UNION合并查詢(xún)結果集,使用聚合函數匯總查詢(xún)結果,接著(zhù)講解了子查詢(xún)、開(kāi)窗函數和行列轉換技術(shù),實(shí)現數據完整性,創(chuàng )建和使用索引優(yōu)化性能,在數據庫中創(chuàng )建和使用視圖簡(jiǎn)化查詢(xún),使用存儲過(guò)程操作數據庫,創(chuàng )建用戶(hù)自定義函數,在SQL語(yǔ)句中使用自定義函數,使用觸發(fā)器實(shí)現復雜的業(yè)務(wù)邏輯,使用事務(wù)實(shí)現數據的完整性和一致性。
本書(shū)適合于本專(zhuān)科計算機專(zhuān)業(yè)或相關(guān)專(zhuān)業(yè)的數據庫教學(xué)用書(shū)。也適合于數據庫管理員、軟件開(kāi)發(fā)人員、企業(yè)IT運維人員及廣大數據庫愛(ài)好者自學(xué)使用
●微軟MVP,超過(guò)10年微軟、思科技術(shù)培訓及企業(yè)實(shí)踐經(jīng)驗
●現任河北師范大學(xué)一線(xiàn)授課講師
●51CTO視頻學(xué)院金牌講師,聽(tīng)課人數達到數百萬(wàn)。錄有完整的IT技術(shù)視頻課程體系,現已錄制共49套課程,總時(shí)長(cháng)超過(guò)3萬(wàn)分鐘
●在IT教育領(lǐng)域倡導“視頻教學(xué)+QQ答疑”和“終身師徒關(guān)系”教學(xué)模式
●韓老師的課程,學(xué)生的普遍感受是學(xué)得輕松、學(xué)得透徹、學(xué)得管用,在找工作或換工作時(shí)心里真正有底氣。原因有四:
1. 一是著(zhù)力解決大學(xué)生在傳統數據庫教材中不易吃透的、似是而非的、似懂非懂問(wèn)題。
2. 二是著(zhù)力解決普通數據庫技術(shù)教材中理論不易實(shí)踐的問(wèn)題。
3. 三是著(zhù)力解決普通數據庫教材中知識點(diǎn)與企業(yè)實(shí)際需求脫節的問(wèn)題。
4. 四是著(zhù)力解決怎樣才能讓學(xué)生學(xué)得輕松、學(xué)得生動(dòng)、學(xué)得深刻的問(wèn)題。
前言
第1章 關(guān)系數據庫 /1
1.1 關(guān)系模型基本概念 /1
1.2 E-R模型到關(guān)系模型的轉化 /3
1.3 數據庫設計規范 /6
1.3.1 第一范式(1NF) /6
1.3.2 第二范式(2NF) /7
1.3.3 第三范式(3NF) /8
第2章 Transact-SQL概述 /10
2.1 啟動(dòng)SQL Server Management Studio(SSMS) /10
2.2 T-SQL語(yǔ)句的類(lèi)型 /12
2.2.1 DDL語(yǔ)句 /12
2.2.2 DCL語(yǔ)句 /13
2.2.3 DML /14
2.3 T-SQL語(yǔ)法要素 /16
2.3.1 SQL語(yǔ)句的批處理符號GO /16
2.3.2 EXEC /17
2.3.3 注釋符 /17
2.3.4 標識符 /18
2.4 變量 /19
2.5 數據類(lèi)型 /21
2.5.1 字符串類(lèi)型 /21
2.5.2 Unicode字符串類(lèi)型 /23
2.5.3 日期時(shí)間類(lèi)型 /23
2.5.4 數值類(lèi)型 /23
2.6 運算符 /25
2.6.1 算術(shù)運算符 /25
2.6.2 比較運算符 /25
2.6.3 邏輯運算符 /25
2.6.4 連接運算符 /26
2.7 常用函數 /26
2.7.1 聚合函數 /27
2.7.2 數值函數 /28
2.7.3 字符串函數 /29
2.7.4 日期時(shí)間函數 /30
2.7.5 數據類(lèi)型轉換函數 /31
2.7.6 控制NULL的常用函數 /32
2.8 流程控制語(yǔ)句 /32
2.8.1 條件判斷語(yǔ)句IF…ELSE和CASE /33
2.8.2 循環(huán)語(yǔ)句 /35
第3章 查詢(xún)基礎 /36
3.1 簡(jiǎn)單查詢(xún)邏輯處理過(guò)程 /36
3.2 數據庫對象的引用規則 /39
3.3 指定表的返回列來(lái)篩選列 /40
3.4 使用WHERE篩選行 /41
3.4.1 使用比較運算符過(guò)濾數據 /41
3.4.2 搜索范圍內的值 /41
3.4.3 使用IN指定列表搜索條件 /42
3.4.4 使用LIKE關(guān)鍵字進(jìn)行模糊匹配 /42
3.4.5 使用NULL比較搜索條件 /43
3.4.6 篩選時(shí)影響性能的注意事項 /44
3.5 格式化結果集 /44
3.5.1 在選擇列表中使用常量、函數和表達式 /44
3.5.2 使用別名 /45
3.5.3 使用ORDER BY子句對結果排序 /46
3.5.4 使用TOP限制結果集 /48
3.5.5 使用DISTINCT消除重復行 /50
3.6 使用GROUP BY子句和聚集函數進(jìn)行
分組計算 /51
3.6.1 在查詢(xún)中使用聚集函數 /51
3.6.2 GROUP BY使用基礎 /52
3.6.3 使用HAVING子句篩選分組后的數據 /53
第4章 多表聯(lián)接查詢(xún)和數據匯總 /55
4.1 聯(lián)接基礎知識 /55
4.1.1 在FROM子句中聯(lián)接 /56
4.1.2 在WHERE子句中聯(lián)接 /56
4.2 交叉聯(lián)接 /57
4.3 內聯(lián)接 /57
4.4 外聯(lián)接 /59
4.4.1 左外聯(lián)接 /59
4.4.2 右外聯(lián)接 /60
4.4.3 完全外部聯(lián)接 /60
4.5 自聯(lián)接 /62
4.5.1 使用同一列進(jìn)行自聯(lián)接 /62
4.5.2 使用不同列進(jìn)行自聯(lián)接 /62
4.6 聯(lián)接查詢(xún)的邏輯處理過(guò)程 /64
4.7 多表聯(lián)接查詢(xún) /64
4.8 UNION合并結果集 /64
4.8.1 UNION和UNION ALL /65
4.8.2 對合并結果集進(jìn)行排序 /66
4.8.3 結果集的合并順序 /66
4.9 匯總數據 /67
4.9.1 ROLLUP /67
4.9.2 CUBE /70
4.9.3 使用GROUPING SETS /70
4.9.4 GROUPING查看匯總行并區分NULL /71
第5章 子查詢(xún) /73
5.1 獨立子查詢(xún) /73
5.1.1 獨立標量子查詢(xún) /74
5.1.2 獨立多值子查詢(xún) /74
5.2 相關(guān)子查詢(xún) /75
5.3 使用IN(NOT IN)和EXISTS(NOT EXISTS)謂詞 /76
5.3.1 IN和NOT IN /77
5.3.2 EXISTS和NOT EXISTS /77
5.4 表表達式 /81
5.4.1 派生表 /81
5.4.2 公用表表達式(CTE) /84
第6章 開(kāi)窗函數和行列轉換 /89
6.1 窗口和開(kāi)窗函數 /89
6.2 排名窗口函數 /90
6.2.1 使用ROW_NUMBER()進(jìn)行分區編號 /91
6.2.2 使用RANK()和DENSE_RANK()進(jìn)行分區排名 /94
6.2.3 使用NTILE()進(jìn)行數據分組 /96
6.3 聚合窗口函數 /97
6.4 行列轉換 /100
6.4.1 行轉列 /100
6.4.2 列轉行 /105
第7章 數據修改 /109
7.1 插入數據 /109
7.1.1 使用INSERT和VALUES插入數據 /109
7.1.2 使用SELECT INTO插入數據 /110
7.1.3 使用INSERT和SELECT插入數據 /111
7.2 刪除數據 /112
7.2.1 使用DELETE刪除行 /112
7.2.2 使用TRUNCATE TABLE刪除所有行 /113
7.3 更新數據 /113
7.3.1 使用SET和WHERE更新數據 /113
7.3.2 更新基于其他表的數據 /113
7.4 使用MERGE合并數據 /114
7.5 通過(guò)表表達式修改數據 /118
第8章 數據完整性 /121
8.1 數據完整性的類(lèi)型和實(shí)現方式 /121
8.1.1 域完整性及實(shí)現方式 /122
8.1.2 實(shí)體完整性及實(shí)現方式 /122
8.1.3 參照完整性及實(shí)現方式 /122
8.2 實(shí)現實(shí)體完整性 /124
8.2.1 使用主鍵 /124
8.2.2 使用UNIQUE約束 /127
8.2.3 使用自增列 /127
8.3 實(shí)現域完整性 /131
8.3.1 CHECK約束 /131
8.3.2 DEFAULT約束 /132
8.3.3 NOT NULL定義 /133
8.4 參照完整性 /134
8.4.1 實(shí)現表間列的參照完整性 /134
8.4.2 實(shí)現表內列的參照完整性 /137
8.5 使用關(guān)系圖實(shí)現參照完整性 /138
8.6 使約束失效 /141
8.7 使用圖形界面實(shí)現數據完整性 /141
8.7.1 添加主鍵 /141
8.7.2 設置UNIQUE約束 /142
8.7.3 設置CHECK約束 /142
8.7.4 設置默認值約束 /144
8.7.5 設置外鍵 /145
8.7.6 禁用約束 /147
第9章 索引 /148
9.1 數據的存儲方式 /149
9.1.1 頁(yè)(Page) /149
9.1.2 區(Extent) /152
9.1.3 索引分配映射頁(yè)(IAM頁(yè)) /152
9.1.4 估算表的大小 /153
9.2 B樹(shù)(Balanced Tree) /154
9.3 查看頁(yè)內容的工具 /156
9.3.1 DBCC IND /156
9.3.2 DBCC PAGE /158
9.4 堆(Heaps) /160
9.5 聚集索引 /162
9.5.1 約束與索引的關(guān)系 /162
9.5.2 唯一聚集索引的物理結構 /163
9.5.3 不唯一聚集索引的物理結構 /167
9.5.4 使用聚集索引查找數據的執行計劃 /168
9.6 非聚集索引及其物理結構 /169
9.6.1 在堆中的非聚集索引 /169
9.6.2 在聚集表中的非聚集索引 /172
9.6.3 使用非聚集索引查找數據的執行計劃 /175
9.7 修改數據對索引結構的影響 /176
9.7.1 頁(yè)拆分和行移動(dòng)現象 /176
9.7.2 插入行 /178
9.7.3 刪除行 /179
9.7.4 更新行 /180
9.8 碎片和索引維護 /180
9.8.1 碎片 /180
9.8.2 維護索引 /182
9.9 復合索引 /187
9.10 包含列索引 /188
9.11 索引交叉 /188
9.12 篩選索引 /189
9.13 全文搜索 /190
9.13.1 創(chuàng )建和修改全文目錄 /191
9.13.2 創(chuàng )建全文索引 /191
9.13.3 全文搜索的查詢(xún)方法 /192
9.14 統計信息 /194
9.14.1 了解統計信息的作用 /194
9.14.2 查看和分析統計信息 /195
9.14.3 創(chuàng )建統計信息 /198
9.14.4 更新統計信息 /198
9.14.5 同步和異步統計信息更新 /200
9.15 基于索引設計的考慮 /200
第10章 視圖 /202
10.1 視圖簡(jiǎn)介 /202
10.2 使用標準視圖 /204
10.2.1 創(chuàng )建標準視圖 /204
10.2.2 通過(guò)視圖更新數據 /206
10.2.3 修改和刪除視圖 /208
10.3 視圖選項 /209
10.3.1 使用ENCRYPTION選項 /209
10.3.2 使用SCHEMABINDING選項 /210
10.3.3 使用CHECK OPTION選項 /211
10.4 使用索引視圖 /212
10.4.1 創(chuàng )建索引視圖 /213
10.4.2 索引視圖的性能 /213
10.4.3 更新索引視圖 /214
10.5 視圖的優(yōu)點(diǎn) /215
第11章 存儲過(guò)程 /216
11.1 存儲過(guò)程的類(lèi)型 /216
11.1.1 系統存儲過(guò)程 /217
11.1.2 擴展存儲過(guò)程 /217
11.1.3 用戶(hù)自定義存儲過(guò)程 /217
11.2 SQL存儲過(guò)程 /218
11.2.1 創(chuàng )建無(wú)參數的存儲過(guò)程 /218
11.2.2 修改和刪除存儲過(guò)程 /220
11.2.3 創(chuàng )建帶參數的存儲過(guò)程 /221
11.2.4 獲取存儲過(guò)程的執行結果 /223
11.3 存儲過(guò)程示例分析 /224
11.4 存儲過(guò)程的解析特點(diǎn) /225
11.5 存儲過(guò)程的編譯、重編譯 /226
11.6 使用存儲過(guò)程的優(yōu)缺點(diǎn) /227
第12章 用戶(hù)自定義函數 /229
12.1 UDF簡(jiǎn)介 /229
12.2 標量UDF /230
12.3 內聯(lián)表值函數 /232
12.4 多語(yǔ)句表值函數 /233
12.5 UDF的修改和刪除 /235
12.6 UDF的調用分析 /235
第13章 觸發(fā)器 /239
13.1 觸發(fā)器的概念和分類(lèi) /239
13.2 DML觸發(fā)器 /240
13.2.1 兩張特殊的臨時(shí)表 /240
13.2.2 insert觸發(fā)器 /241
13.2.3 delete觸發(fā)器 /242
13.2.4 update觸發(fā)器 /244
13.2.5 禁用和啟用觸發(fā)器 /244
13.2.6 檢測基于列修改的觸發(fā)器 /244
13.2.7 FIRST觸發(fā)器和LAST觸發(fā)器 /245
13.3 使用觸發(fā)器實(shí)現審核跟蹤 /246
13.4 DML觸發(fā)器的工作原理和事務(wù)控制 /246
13.4.1 觸發(fā)器的工作原理 /247
13.4.2 DML觸發(fā)器的事務(wù)控制 /248
13.5 DDL觸發(fā)器 /249
13.5.1 創(chuàng )建數據庫級別的DDL觸發(fā)器 /249
13.5.2 創(chuàng )建服務(wù)器級別的DDL觸發(fā)器 /250
第14章 事務(wù)和鎖 /251
14.1 事務(wù) /251
14.1.1 顯式事務(wù)處理模式 /252
14.1.2 自動(dòng)提交事務(wù)模式 /253
14.1.3 隱式事務(wù)處理模式 /253
14.1.4 嵌套事務(wù)的控制 /254
14.1.5 事務(wù)、事務(wù)日志和檢查點(diǎn) /255
14.2 并發(fā)訪(fǎng)問(wèn)引起的問(wèn)題 /257
14.3 鎖 /260
14.3.1 鎖的粒度和鎖升級 /260
14.3.2 鎖的類(lèi)型和查看鎖 /261
14.3.3 鎖的兼容性 /265
14.4 設置事務(wù)隔離級別 /266
14.4.1 SQL標準定義的4種事務(wù)隔離級別 /266
14.4.2 行版本的事務(wù)隔離級別 /271
14.5 隔離級別、鎖和并發(fā)問(wèn)題的關(guān)系 /274
14.6 死鎖 /275