本書是暢銷書《SQL基礎教程》的第2版,介紹了關(guān)系數(shù)據(jù)庫以及用來操作關(guān)系數(shù)據(jù)庫的SQL語言的使用方法。書中通過大量示例程序和詳實的操作步驟說明,讓讀者循序漸進地掌握SQL的基礎知識和使用技巧。每章結(jié)尾設置有練習題,幫助讀者檢驗對各章內(nèi)容的理解程度。第2版除了將示例程序更新為對應最新的DB的SQL之外,還新增了一章,介紹如何從應用程序執(zhí)行SQL。
第0章 緒論——搭建SQL的學習環(huán)境 1
0-1 PostgreSQL的安裝和連接設置 3
安裝步驟 3
修改設置文件 7
0-2 通過PostgreSQL執(zhí)行SQL語句 9
連接PostgreSQL(登錄) 9
執(zhí)行SQL語句 10
創(chuàng)建學習用的數(shù)據(jù)庫 11
連接學習用的數(shù)據(jù)庫(登錄) 12
第1章 數(shù)據(jù)庫和SQL 13
1-1 數(shù)據(jù)庫是什么 15
我們身邊的數(shù)據(jù)庫 15
為什么DBMS那么重要 16
DBMS的種類 18
1-2 數(shù)據(jù)庫的結(jié)構(gòu) 20
RDBMS的常見系統(tǒng)結(jié)構(gòu) 20
表的結(jié)構(gòu) 22
1-3 SQL概要 25
標準SQL 25
SQL語句及其種類 26
SQL的基本書寫規(guī)則 27
1-4 表的創(chuàng)建 30
表的內(nèi)容的創(chuàng)建 30
數(shù)據(jù)庫的創(chuàng)建(CREATE DATABASE語句) 31
表的創(chuàng)建(CREATE TABLE語句) 31
命名規(guī)則 33
數(shù)據(jù)類型的指定 34
約束的設置 35
1-5 表的刪除和更新 37
表的刪除(DROP TABLE語句) 37
表定義的更新(ALTER TABLE語句) 38
向Product表中插入數(shù)據(jù) 39
練習題 42
第2章 查詢基礎 43
2-1 SELECT語句基礎 45
列的查詢 45
查詢出表中所有的列 47
為列設定別名 48
常數(shù)的查詢 50
從結(jié)果中刪除重復行 50
根據(jù)WHERE語句來選擇記錄 53
注釋的書寫方法 55
2-2 算術(shù)運算符和比較運算符 57
算術(shù)運算符 57
需要注意NULL 58
比較運算符 60
對字符串使用不等號時的注意事項 62
不能對NULL使用比較運算符 65
2-3 邏輯運算符 68
NOT運算符 68
AND運算符和OR運算符 70
通過括號強化處理 72
邏輯運算符和真值 74
含有NULL時的真值 76
練習題 78
第3章 聚合與排序 79
3-1 對表進行聚合查詢 81
聚合函數(shù) 81
計算表中數(shù)據(jù)的行數(shù) 82
計算NULL之外的數(shù)據(jù)的行數(shù) 83
計算合計值 84
計算平均值 86
計算最大值和最小值 87
使用聚合函數(shù)刪除重復值(關(guān)鍵字DISTINCT) 89
3-2 對表進行分組 91
GROUP BY子句 91
聚合鍵中包含NULL的情況 93
使用WHERE子句時GROUP BY的執(zhí)行結(jié)果 94
與聚合函數(shù)和GROUP BY子句有關(guān)的常見錯誤 96
3-3 為聚合結(jié)果指定條件 101
HAVING子句 101
HAVING子句的構(gòu)成要素 104
相對于HAVING子句,更適合寫在WHERE子句中的條件 105
3-4 對查詢結(jié)果進行排序 108
ORDER BY子句 108
指定升序或降序 110
指定多個排序鍵 111
NULL的順序 111
在排序鍵中使用顯示用的別名 112
ORDER BY子句中可以使用的列 114
不要使用列編號 114
練習題 116
第4章 數(shù)據(jù)更新 117
4-1 數(shù)據(jù)的插入(INSERT語句的使用方法) 119
什么是INSERT 119
INSERT語句的基本語法 120
列清單的省略 123
插入NULL 123
插入默認值 124
從其他表中復制數(shù)據(jù) 126
4-2 數(shù)據(jù)的刪除(DELETE語句的使用方法) 129
DROP TABLE語句和DELETE語句 129
DELETE語句的基本語法 129
指定刪除對象的DELETE語句(搜索型DELETE) 130
4-3 數(shù)據(jù)的更新(UPDATE語句的使用方法) 133
UPDATE語句的基本語法 133
指定條件的UPDATE語句(搜索型UPDATE) 134
使用NULL進行更新 135
多列更新 136
4-4 事務 138
什么是事務 138
創(chuàng)建事務 139
ACID特性 144
練習題 145
第5章 復雜查詢 147
5-1 視圖 149
視圖和表 149
創(chuàng)建視圖的方法 151
視圖的限制① ——定義視圖時不能使用ORDER BY子句 154
視圖的限制② ——對視圖進行更新 155
刪除視圖 159
5-2 子查詢 160
子查詢和視圖 160
子查詢的名稱 163
標量子查詢 163
標量子查詢的書寫位置 166
使用標量子查詢時的注意事項 167
5-3 關(guān)聯(lián)子查詢 168
普通的子查詢和關(guān)聯(lián)子查詢的區(qū)別 168
關(guān)聯(lián)子查詢也是用來對集合進行切分的 171
結(jié)合條件一定要寫在子查詢中 172
練習題 173
第6章 函數(shù)、謂詞、CASE表達式 175
6-1 各種各樣的函數(shù) 177
函數(shù)的種類 177
算術(shù)函數(shù) 178
字符串函數(shù) 182
日期函數(shù) 190
轉(zhuǎn)換函數(shù) 194
6-2 謂詞 198
什么是謂詞 198
LIKE謂詞——字符串的部分一致查詢 198
BETWEEN謂詞——范圍查詢 202
IS NULL、IS NOT NULL——判斷是否為NULL 203
IN謂詞——OR的簡便用法 204
使用子查詢作為IN謂詞的參數(shù) 205
EXIST謂詞 210
6-3 CASE表達式 214
什么是CASE表達式 214
CASE表達式的語法 214
CASE表達式的使用方法 215
練習題 221
第7章 集合運算 223
7-1 表的加減法 225
什么是集合運算 225
表的加法——UNION 225
集合運算的注意事項 228
包含重復行的集合運算——ALL選項 229
選取表中公共部分——INTERSECT 230
記錄的減法——EXCEPT 231
7-2 聯(lián)結(jié)(以列為單位對表進行聯(lián)結(jié)) 234
什么是聯(lián)結(jié) 234
內(nèi)聯(lián)結(jié)——INNER JOIN 235
外聯(lián)結(jié)——OUTER JOIN 240
3張以上的表的聯(lián)結(jié) 243
交叉聯(lián)結(jié)——CROSS JOIN 246
聯(lián)結(jié)的特定語法和過時語法 249
練習題 254
第8章 SQL高級處理 255
8-1 窗口函數(shù) 257
什么是窗口函數(shù) 257
窗口函數(shù)的語法 258
語法的基本使用方法——使用RANK函數(shù) 258
無需指定PARTITION BY 261
專用窗口函數(shù)的種類 262
窗口函數(shù)的適用范圍 263
作為窗口函數(shù)使用的聚合函數(shù) 264
計算移動平均 266
兩個ORDER BY 269
8-2 GROUPING運算符 271
同時得到合計行 271
ROLLUP——同時得出合計和小計 272
GROUPING函數(shù)——讓NULL更加容易分辨 277
CUBE——用數(shù)據(jù)來搭積木 279
GROUPING SETS——取得期望的積木 281
練習題 282
第9章 通過應用程序連接數(shù)據(jù)庫 283
9-1 數(shù)據(jù)庫世界和應用程序世界的連接 285
數(shù)據(jù)庫和應用程序之間的關(guān)系 285
驅(qū)動——兩個世界之間的橋梁 286
驅(qū)動的種類 287
9-2 Java基礎知識 289
第一個程序Hello,World 289
編譯和程序執(zhí)行 291
常見錯誤 294
9-3 通過Java連接PostgreSQL 298
執(zhí)行SQL語句的Java程序 298
Java是如何從數(shù)據(jù)庫中獲取數(shù)據(jù)的呢 299
執(zhí)行連接數(shù)據(jù)庫的程序 301
選取表中的數(shù)據(jù) 302
更新表中的數(shù)據(jù) 305
小結(jié) 307
練習題 307
附錄 練習題答案 308