《SQL實戰(zhàn)》(原著第2版)一書屬于入門書,是一本用PostgreSQL寫的SQL入門教程,先從基本的SQL知識開始說起,之后逐漸過渡到更高級的特性,最后以一些實際的數(shù)據(jù)用例作為結(jié)束。全書分為20章,主要內(nèi)容包括:設(shè)置編碼環(huán)境、創(chuàng)建數(shù)據(jù)庫和表、查詢數(shù)據(jù)——SELECT語句、數(shù)據(jù)類型、數(shù)據(jù)的導(dǎo)入與導(dǎo)出、SQL的基本數(shù)學(xué)與統(tǒng)計原理、連接關(guān)系數(shù)據(jù)庫中的表、表格設(shè)計、通過分組和匯總提取信息、數(shù)據(jù)檢查和修改、SQL中的統(tǒng)計函數(shù)、處理日期和時間、高級查詢技術(shù)、挖掘文本以找到有意義的數(shù)據(jù)、利用PostGIS分析空間數(shù)據(jù)、使用json數(shù)據(jù)、使用視圖、函數(shù)和觸發(fā)器節(jié)省時間、從命令行使用postgresql、維護數(shù)據(jù)庫、講述你的數(shù)據(jù)故事。本書語言通俗易懂,作者選取了大量與生活工作貼近的實例進行講解,幫助讀者更好地理解及運用SQL。
第1章 設(shè)置編碼環(huán)境 1
安裝文本編輯器 1
從GitHub 下載代碼和數(shù)據(jù)2
安裝PostgreSQL 和pgAdmin3
在Windows 安裝3
在macOS 安裝 6
在Linux 安裝 7
使用pgAdmin 9
啟動pgAdmin 并設(shè)置主密碼 9
連接默認(rèn)的postgres 數(shù)據(jù)庫 10
探索查詢工具 12
自定義pgAdmin 13
pgAdmin 之外的選擇 13
第2章 創(chuàng)建首個數(shù)據(jù)庫和表 14
什么是表 14
創(chuàng)建數(shù)據(jù)庫 15
在pgAdmin 中執(zhí)行SQL 16
連接analysis 數(shù)據(jù)庫 18
創(chuàng)建表 18
使用CREATE TABLE 語句 18
創(chuàng)建teachers 表 19
將行插入表 21
使用INSERT 語句 21
查看數(shù)據(jù)22
在代碼出現(xiàn)問題時獲得幫助22
格式化SQL 以提高可讀性23
第3章 使用SELECT 開始探索數(shù)據(jù)25
基本的SELECT 語法25
查詢一部分列26
通過ORDER BY 排序數(shù)據(jù)27
使用DISTINCT 查找唯一值29
使用WHERE 過濾行30
同時使用WHERE 和LIKE/ILIKE33
通過AND 和OR 組合操作符34
合而為一34
第4章 了解數(shù)據(jù)類型36
了解字符37
了解數(shù)字39
使用整數(shù)39
自動遞增整數(shù)40
使用小數(shù) 41
選擇合適的數(shù)字類型44
了解日期和時間44
在計算中使用interval 數(shù)據(jù)類型46
了解JSON 和JSONB47
使用各式各樣的類型48
使用CAST 將值從一種類型轉(zhuǎn)換為另一種類型48
使用CAST 速記法49
第5章 數(shù)據(jù)的導(dǎo)入與導(dǎo)出 51
處理帶有分隔符的文本文件 51
處理標(biāo)題行52
引用包含分隔符的列52
使用COPY 導(dǎo)入數(shù)據(jù)53
導(dǎo)入縣的人口普查數(shù)據(jù)54
創(chuàng)建us_counties_pop_est_2019 表55
了解人口普查列及其數(shù)據(jù)類型56
使用COPY 導(dǎo)入人口普查數(shù)據(jù)57
檢查導(dǎo)入的數(shù)據(jù)58
使用COPY 導(dǎo)入部分列59
使用COPY 導(dǎo)入部分行 61
在導(dǎo)入過程中向列添加值 61
使用COPY 導(dǎo)出數(shù)據(jù)63
導(dǎo)出所有數(shù)據(jù)63
導(dǎo)出特定列63
導(dǎo)出查詢結(jié)果64
使用pgAdmin 進行導(dǎo)入和導(dǎo)出64
第6章 使用SQL 實現(xiàn)基本的算術(shù)和統(tǒng)計67
了解數(shù)學(xué)運算符和函數(shù)67
了解數(shù)學(xué)和數(shù)據(jù)類型68
加法、減法和乘法68
執(zhí)行除法和取模69
計算指數(shù)、根和階乘70
注意操作的順序70
對人口普查表中的列進行數(shù)學(xué)運算 71
對列執(zhí)行加法或減法72
計算全局占比73
跟蹤百分比變化74
使用聚合函數(shù)計算平均數(shù)以及總和75
查找中位數(shù)76
通過百分位函數(shù)查找中位數(shù)77
查找人口普查數(shù)據(jù)的中位數(shù)以及百分位數(shù)78
使用百分位函數(shù)查找其他分位數(shù)79
發(fā)現(xiàn)模式80
第7章 在關(guān)系數(shù)據(jù)庫中連接表82
使用JOIN 連接表82
使用鍵列關(guān)聯(lián)表83
使用JOIN 查詢多個表85
了解JOIN 的類型86
連接88
左連接和右連接89
全外連接90
交叉連接 91
使用NULL 查找包含缺失值的行92
了解表的三種關(guān)系93
一對一關(guān)系93
一對多關(guān)系94
多對多關(guān)系94
在連接中選擇特定列94
通過表別名簡化JOIN 語法95
連接多個表96
通過集合操作符合并查詢結(jié)果98
UNION 和UNION ALL98
INTERSECT 和EXCEPT 100
在連接表的列中執(zhí)行數(shù)學(xué)計算101
第8章 按需設(shè)計表 104
遵循命名慣例 104
用引號包圍標(biāo)識符以啟用混合大小寫 105
用引號包圍標(biāo)識符的隱患 105
命名標(biāo)識符的準(zhǔn)則 106
通過約束控制列值 106
主鍵:自然鍵和代理鍵 107
外鍵113
使用CASCADE 自動刪除相關(guān)記錄115
CHECK 約束115
UNIQUE 約束116
NOT NULL 約束117
如何刪除限制條件或者在之后添加它們118
通過索引加快查詢速度119
B 樹:PostgreSQL 的默認(rèn)索引119
使用索引時需要考慮的因素 122
第9章 通過分組和匯總提取信息 124
創(chuàng)建圖書館調(diào)查表 124
創(chuàng)建2018 年的圖書館數(shù)據(jù)表 125
創(chuàng)建2017 年和2016 年圖書館數(shù)據(jù)表 126
使用聚合函數(shù)探索圖書館數(shù)據(jù) 127
使用count() 統(tǒng)計行和值 127
使用max() 和min() 尋找最大值和最小值 130
使用GROUP BY 聚合數(shù)據(jù) 130
第10章 檢查并修改數(shù)據(jù) 140
導(dǎo)入肉類、家禽和蛋類生產(chǎn)商數(shù)據(jù) 140
訪問數(shù)據(jù)集 142
檢查缺失值 143
檢查不一致的數(shù)據(jù)值 144
使用length() 檢查畸形值 145
修改表、列和數(shù)據(jù) 147
使用ALTER TABLE 修改表 147
使用UPDATE 修改值 148
使用RETURNING 查看被修改的數(shù)據(jù) 149
創(chuàng)建備份表 150
修復(fù)缺失的列值 150
更新值以保持一致性 153
通過串聯(lián)修復(fù)郵政編碼 154
跨表更新值 155
刪除不需要的數(shù)據(jù) 157
從表中刪除行 157
從表中刪除列 158
從數(shù)據(jù)庫中刪除表 159
使用事務(wù)來保存或是撤銷修改 159
提高更新大表時的性能161
第11章 SQL 中的統(tǒng)計函數(shù) 164
創(chuàng)建人口普查統(tǒng)計表 164
使用corr(Y ,X ) 測量相關(guān)性 166
檢查其他相關(guān)關(guān)系 168
通過回歸分析預(yù)測數(shù)值 169
通過r-Squaredc 查找自變量的影響 170
尋找方差和標(biāo)準(zhǔn)差171
使用SQL 創(chuàng)建排行榜 172
使用rank() 和dense_rank() 構(gòu)建排名 172
使用PARTITION BY 在子分組中進行排名 174
為有意義的比較計算比率 175
尋找旅游相關(guān)企業(yè)的比率 176
平滑不均勻的數(shù)據(jù) 177
第12章 處理日期與時間 182
了解日期和時間的數(shù)據(jù)類型及函數(shù) 182
操作日期和時間 183
提取timestamp 值的組成部分 183
根據(jù)timestamp 組件創(chuàng)建日期時間值 185
檢索當(dāng)前日期和時間 186
處理時區(qū) 187
查找時區(qū)設(shè)置 187
設(shè)置時區(qū) 188
使用日期和時間進行計算 190
在紐約市的出租車數(shù)據(jù)中尋找模式191
在美鐵數(shù)據(jù)中尋找模式 196
第13章 高級查詢技術(shù) 201
使用子查詢 201
在WHERE 子句中使用子查詢進行篩選 201
使用子查詢創(chuàng)建派生表 203
連接派生表 204
使用子查詢生成列 205
了解子查詢表達式 207
配合使用Subqueries 和LATERAL 209
使用公共表表達式 212
制作交叉表 214
安裝crosstab() 函數(shù) 214
為調(diào)查結(jié)果制表 215
為城市溫度讀數(shù)制表 217
使用CASE 對值重新進行分類 219
在公共表表達式中使用CASE 220
第14章 挖掘文本以查找有意義的數(shù)據(jù) 223
使用字符串函數(shù)格式化文本 223
大小寫格式化 223
字符信息 224
刪除字符 224
提取并替換字符 225
使用正則表達式匹配文本模式 225
正則表達式符號 225
在WHERE 中使用正則表達式 227
使用正則表達式函數(shù)替換或分割文本 229
使用正則表達式函數(shù)將文本轉(zhuǎn)換為數(shù)據(jù) 230
PostgreSQL 中的全文搜索 242
文本搜索數(shù)據(jù)類型 242
為全文搜索創(chuàng)建表 244
搜索演講文本 245
根據(jù)相關(guān)性排列查詢匹配結(jié)果 248
第15章 使用PostGIS 分析空間數(shù)據(jù) 252
啟用PostGIS 并創(chuàng)建空間數(shù)據(jù)庫 252
了解空間數(shù)據(jù)的構(gòu)建塊 253
了解二維幾何圖形 253
Point(點) 253
LineString(線串) 253
Polygon(多邊形) 253
MultiPoint(點集合) 254
MultiLineString(線串集合) 254
MultiPolygon(多邊形集合) 254
Well-Known Text 格式 254
投影和坐標(biāo)系 255
空間參照系標(biāo)識符 256
了解PostGIS 數(shù)據(jù)類型 256
使用PostGIS 函數(shù)創(chuàng)建空間對象 257
根據(jù)WKT 創(chuàng)建Geometry 類型 257
根據(jù)WKT 創(chuàng)建地理數(shù)據(jù)類型 259
使用點函數(shù) 259
使用線串函數(shù) 259
使用多邊形函數(shù) 260
分析農(nóng)貿(mào)市場數(shù)據(jù) 261
創(chuàng)建并填充地理列 261
添加空間索引 262
在給定的距離內(nèi)查找地理位置 263
計算兩地之間的距離 265
查找最近的地理位置 266
處理人口普查Shapefile 文件 267
了解shapefile 的內(nèi)容 267
載入shapefile 文件 268
探索2019 年人口普查的縣shapefile 270
檢查指定范圍內(nèi)的人口統(tǒng)計數(shù)據(jù) 273
執(zhí)行空間連接 274
探索道路和水路數(shù)據(jù) 275
連接人口普查的水道表和道路表 275
查找對象相交的位置 276
第16章 處理JSON 數(shù)據(jù) 278
了解JSON 結(jié)構(gòu) 278
考慮何時在SQL 中使用JSON 280
使用json 和jsonb 數(shù)據(jù)類型 281
導(dǎo)入并索引JSON 數(shù)據(jù) 281
使用json 和jsonb 提取運算符 282
提取鍵值 283
提取數(shù)組元素 284
提取路徑 286
包容性和存在性 287
分析地震數(shù)據(jù) 290
探索并載入地震數(shù)據(jù) 290
處理地震時間 292
查找最大和報告最多的地震 293
將地震JSON 轉(zhuǎn)換為空間數(shù)據(jù) 295
生成并處理JSON 298
將查詢結(jié)果轉(zhuǎn)換為JSON 299
鍵和值的添加、刪除以及更新 301
使用JSON 處理函數(shù) 303
查找數(shù)組長度 303
以行的形式返回數(shù)組元素 303
第17章 使用視圖、函數(shù)和觸發(fā)器以提高效率 307
使用視圖簡化查詢 307
視圖的創(chuàng)建與查詢 308
物化視圖的創(chuàng)建與刷新311
使用視圖對數(shù)據(jù)進行插入、更新和刪除 312
創(chuàng)建你的函數(shù)和過程 315
創(chuàng)建percent_change() 函數(shù) 316
使用percent_change() 函數(shù) 317
使用過程更新數(shù)據(jù) 318
在函數(shù)中使用Python 語言 321
使用觸發(fā)器自動執(zhí)行數(shù)據(jù)庫操作 322
記錄表中的成績更新 323
自動對溫度進行分類 326
第18章 通過命令行使用PostgreSQL 330
為psql 設(shè)置命令行 330
在Windows 上設(shè)置psql 331
在macOS 上設(shè)置psql 334
在Linux 上設(shè)置psql 336
使用psql 336
啟動psql 并連接至數(shù)據(jù)庫 336
在psql 上運行SQL 查詢 339
導(dǎo)航并格式化結(jié)果 341
獲取數(shù)據(jù)庫信息的元命令 344
導(dǎo)入、導(dǎo)出以及使用文件 345
加速任務(wù)的附加命令行實用程序 348
使用shp2pgsql 載入Shapefiles 349
第19章 維護數(shù)據(jù)庫 351
通過VACUUM 移除未使用空間 351
追蹤表的大小 352
監(jiān)控自動清理過程 354
執(zhí)行手動清理 355
使用VACUUM FULL 減少表的體積 355
改變服務(wù)器設(shè)置 356
定位并編輯postgresql.conf 356
使用pg_ctl 重新加載設(shè)置 358
備份和還原數(shù)據(jù)庫 359
使用pg_dump 導(dǎo)出數(shù)據(jù)庫或者表 359
使用pg_restore 還原被導(dǎo)出的數(shù)據(jù)庫 359
探索額外的備份和還原選項 360
第20章 講述你的數(shù)據(jù)故事 361
從問題開始 361
記錄流程 362
收集數(shù)據(jù) 362
在缺少數(shù)據(jù)時構(gòu)建自己的數(shù)據(jù)庫 362
評估數(shù)據(jù)來源 363
使用查詢訪問數(shù)據(jù) 363
咨詢數(shù)據(jù)的所有者 364
識別關(guān)鍵指標(biāo)和長期趨勢 364
詢問原因 365
傳達你的分析結(jié)果 366
附錄 更多PostgreSQL 資源 368
PostgreSQL 開發(fā)環(huán)境 368
PostgreSQL 實用程序、工具和擴展 369
PostgreSQL 新聞和社區(qū) 369
文檔 370