SQL入門經典 第6版
內容描述
本書詳細介紹了SQL語言的基本語法、基本概念,說明瞭各種SQL實現與ANSI標準之間的差別。書中包含了大量的範例,直觀地說明瞭如何使用SQL對數據進行處理。每章後面還有針對性很強的測驗與練習,能夠幫助讀者更好地理解和掌握學習的內容。在最後的附錄里還有關於安裝MySQL的詳細介紹、書中用到的關鍵SQL語句、測驗和練習的答案。本書的內容層次清晰,針對性強,非常適合初學者作為入門教材。
目錄大綱
第 1章 歡迎來到SQL世界 11.1 SQL定義及歷史 11.1.1 什麽是SQL 21.1.2 什麽是ANSI SQL 21.1.3 當前標準:SQL-2011 21.1.4 什麽是數據庫 31.1.5 關系數據庫 41.1.6 客戶端/服務器技術 41.1.7 基於Web的數據庫系統 51.1.8 主流數據庫廠商 51.2 SQL會話 61.2.1 CONNECT 61.2.2 DISCONNECT和EXIT 61.3 SQL命令的類型 61.3.1 定義數據庫結構 71.3.2 操作數據 71.3.3 選擇數據 71.3.4 數據控制語言 81.3.5 數據管理命令 81.3.6 事務控制命令 81.4 本書使用的數據庫 81.4.1 表命名標準 101.4.2 實例數據一瞥 101.4.3 表的構成 101.4.4 示例和練習 111.5 小結 111.6 問與答 121.7 實踐 121.7.1 測驗 121.7.2 練習 12第 2章 定義數據結構 142.1 數據是什麽 142.2 基本數據類型 142.2.1 定長字符串 152.2.2 變長字符串 162.2.3 大對象類型 162.2.4 數值類型 162.2.5 小數類型 172.2.6 整數 172.2.7 浮點數 182.2.8 日期和時間類型 182.2.9 直義字符串 192.2.10 NULL數據類型 192.2.11 布爾值 202.2.12 自定義類型 202.2.13 域 202.3 小結 212.4 問與答 212.5 實踐 222.5.1 測驗 222.5.2 練習 22第3章 管理數據庫對象 253.1 數據庫對象和模式 253.2 表:數據的主要存儲方式 273.2.1 列 273.2.2 行 273.2.3 CREATE TABLE語句 283.2.4 命名規範 293.2.5 ALTER TABLE命令 293.2.6 從現有表新建另一個表 323.2.7 刪除表 333.3 完整性約束 333.3.1 主鍵約束 343.3.2 唯一性約束 343.3.3 外鍵約束 353.3.4 NOT NULL約束 363.3.5 檢查約束 363.3.6 去除約束 373.4 小結 373.5 問與答 373.6 實踐 383.6.1 測驗 383.6.2 練習 38第4章 規格化過程 414.1 規格化數據庫 414.1.1 原始數據庫 424.1.2 數據庫邏輯設計 424.1.3 規格形式 434.1.4 命名規範 454.1.5 規格化的優點 464.1.6 規格化的缺點 464.2 去規格化數據庫 474.3 小結 474.4 問與答 474.5 實踐 484.5.1 測驗 484.5.2 練習 48第5章 操作數據 505.1 數據操作概述 505.2 用新數據填充表 505.2.1 把數據插入到表 515.2.2 將數據插入到表的特定列中 525.2.3 從另一個表插入數據 535.2.4 插入NULL值 545.3 更新現有數據 555.3.1 更新一列的數據 555.3.2 更新一條或多條記錄中的多個字段 565.4 從表中刪除數據 575.5 小結 575.6 問與答 585.7 實踐 585.7.1 測驗 585.7.2 練習 58第6章 管理數據庫事務 616.1 什麽是事務 616.2 控制事務 626.2.1 COMMIT命令 626.2.2 ROLLBACK命令 646.2.3 SAVEPOINT命令 656.2.4 ROLLBACK TO SAVEPOINT命令 656.2.5 RELEASE SAVEPOINT命令 676.2.6 SET TRANSACTION命令 686.3 低劣的事務控制 686.4 小結 686.5 問與答 686.6 實踐 696.6.1 測驗 696.6.2 練習 69第7章 數據庫查詢 717.1 SELECT語句 717.1.1 SELECT語句 727.1.2 FROM子句 747.1.3 WHERE子句 747.1.4 ORDER BY子句 757.1.5 大小寫敏感性 777.2 編寫查詢語句 787.2.1 統計表中的記錄數量 797.2.2 從另一個用戶表裡選擇數據 807.2.3 使用字段別名 807.3 小結 817.4 問與答 817.5 實踐 827.5.1 測驗 827.5.2 練習 82第8章 使用操作符對數據進行分類 848.1 什麽是SQL里的操作符 848.2 比較操作符 848.2.1 相等 858.2.2 不等於 858.2.3 小於和大於 868.2.4 比較操作符的組合 878.3 邏輯操作符 888.3.1 IS NULL 888.3.2 BETWEEN 898.3.3 IN 898.3.4 LIKE 908.3.5 EXISTS 918.3.6 ALL、SOME和ANY操作符 918.4 連接操作符 938.4.1 AND 938.4.2 OR 948.5 求反操作符 958.5.1 不相等 968.5.2 NOT BETWEEN 968.5.3 NOT IN 978.5.4 NOT LIKE 978.5.5 IS NOT NULL 988.5.6 NOT EXISTS 998.6 算術操作符 998.6.1 加法 998.6.2 減法 1008.6.3 乘法 1008.6.4 除法 1008.6.5 算術操作符的組合 1018.7 小結 1028.8 問與答 1028.9 實踐 1028.9.1 測驗 1028.9.2 練習 103第9章 匯總查詢得到的數據 1049.1 聚合函數 1049.1.1 COUNT函數 1059.1.2 SUM函數 1069.1.3 AVG函數 1079.1.4 MAX函數 1099.1.5 MIN函數 1099.2 小結 1109.3 問與答 1109.4 實踐 1119.4.1 測驗 1119.4.2 練習 112第 10章 數據排序與分組 11310.1 為什麽要對數據進行分組 11310.2 GROUP BY子句 11310.2.1 分組函數 11410.2.2 對選中的數據進行分組 11410.2.3 創建分組和使用聚合函數 11410.3 GROUP BY與ORDER BY的對比 11810.4 CUBE和ROLLUP語句 12010.5 HAVING子句 12110.6 小結 12210.7 問與答 12310.8 實踐 12310.8.1 測驗 12310.8.2 練習 124第 11章 重構數據的外觀 12511.1 ANSI字符函數 12511.2 常用字符函數 12611.2.1 串接函數 12611.2.2 UPPER函數 12711.2.3 LOWER函數 12811.2.4 SUBSTR函數 12911.2.5 TRANSLATE函數 13011.2.6 REPLACE函數 13011.2.7 LTRIM函數 13111.2.8 RTRIM函數 13211.3 其他字符函數 13311.3.1 LENGTH函數 13311.3.2 ISNULL函數(NULL值檢查程序) 13311.3.3 COALESCE函數 13411.3.4 LPAD函數 13411.3.5 RPAD函數 13511.3.6 ASCII函數 13511.4 算術函數 13511.5 轉換函數 13611.5.1 字符串轉換為數值 13611.5.2 數值轉換為字符串 13711.6 字符函數的組合使用 13811.7 小結 13911.8 問與答 13911.9 實踐 14011.9.1 測驗 14011.9.2 練習 140第 12章 日期和時間 14212.1 日期是如何存儲的 14212.1.1 日期和時間的標準 數據類型 14212.1.2 DATETIME元素 14312.1.3 不同實現的日期類型 14312.2 日期函數 14412.2.1 當前日期 14412.2.2 時區 14412.2.3 時間與日期相加 14512.2.4 其他日期函數 14712.3 日期轉換 14712.3.1 日期描述 14812.3.2 日期轉換為字符串 15012.3.3 字符串轉換為日期 15012.4 小結 15112.5 問與答 15112.6 實踐 15212.6.1 測驗 15212.6.2 練習 152第 13章 在查詢中連接表 15313.1 從多個表獲取數據 15313.2 連接 15313.2.1 等值連接 15413.2.2 使用表的別名 15513.2.3 不等值連接 15613.2.4 外部連接 15713.2.5 自連接 15913.2.6 連接多個主鍵 16113.3 需要考慮的連接事項 16113.3.1 使用基表 16213.3.2 笛卡兒積 16213.4 小結 16413.5 問與答 16413.6 實踐 16413.6.1 測驗 16513.6.2 練習 165第 14章 使用子查詢定義未知數據 16614.1 什麽是子查詢 16614.1.1 子查詢與SELECT語句 16714.1.2 子查詢與INSERT語句 16914.1.3 子查詢與UPDATE語句 16914.1.4 子查詢與DELETE語句 17014.2 嵌套的子查詢 17114.3 關聯子查詢 17414.4 子查詢的效率 17514.5 小結 17614.6 問與答 17614.7 實踐 17614.7.1 測驗 17714.7.2 練習 177第 15章 將多個查詢組合成一個 17815.1 單查詢與組合查詢 17815.2 組合查詢操作符 17915.2.1 UNION操作符 17915.2.2 UNION ALL操作符 18015.2.3 INTERSECT操作符 18115.2.4 EXCEPT操作符 18215.3 在組合查詢中使用 ORDER BY 18315.4 在組合查詢中使用 GROUP BY 18415.5 獲取準確的數據 18515.6 小結 18615.7 問與答 18615.8 實踐 18615.8.1 測驗 18715.8.2 練習 187第 16章 利用索引改善性能 18816.1 什麽是索引 18816.2 索引是如何工作的 18816.3 CREATE INDEX命令 18916.4 索引的類型 19016.4.1 單字段索引 19016.4.2 唯一索引 19016.4.3 組合索引 19116.4.4 隱式索引 19116.5 何時考慮使用索引 19116.6 何時應該避免使用索引 19216.7 修改索引 19316.8 刪除索引 19316.9 小結 19416.10 問與答 19416.11 實踐 19416.11.1 測驗 19416.11.2 練習 195第 17章 改善數據庫性能 19617.1 什麽是SQL語句調整 19617.2 數據庫調整與SQL語句 調整 19617.3 格式化SQL語句 19717.3.1 為提高可讀性格式化SQL 語句 19717.3.2 FROM子句中的表 19917.3.3 連接條件的次序 19917.3.4 最嚴格條件 19917.4 全表掃描 20117.5 其他性能考慮 20217.5.1 使用LIKE操作符和 通配符 20217.5.2 避免使用OR操作符 20317.5.3 避免使用HAVING子句 20317.5.4 避免大規模排序操作 20417.5.5 使用存儲過程 20417.5.6 在批量加載時禁用索引 20417.6 基於成本的優化 20417.7 小結 20517.8 問與答 20617.9 實踐 20617.9.1 測驗 20617.9.2 練習 206第 18章 管理數據庫用戶 20818.1 數據庫的用戶管理 20818.1.1 用戶的類型 20918.1.2 誰管理用戶 20918.1.3 用戶在數據庫中的位置 20918.1.4 用戶與模式的區別 21018.2 管理過程 21018.2.1 創建用戶 21018.2.2 創建模式 21218.2.3 刪除模式 21418.2.4 調整用戶 21418.2.5 用戶會話 21518.2.6 刪除用戶訪問權限 21518.3 數據庫用戶使用的工具 21518.4 小結 21618.5 問與答 21618.6 實踐 21618.6.1 測驗 21718.6.2 練習 217第 19章 管理數據庫安全 21819.1 什麽是數據庫安全 21819.2 什麽是權限 21919.2.1 系統權限 21919.2.2 對象權限 22019.2.3 誰負責授予和撤銷權限 22119.3 控制用戶訪問 22119.3.1 GRANT命令 22119.3.2 REVOKE命令 22219.3.3 控制對單獨字段的訪問 22219.3.4 PUBLIC數據庫賬戶 22219.3.5 權限組 22319.4 通過角色控制權限 22319.4.1 CREATE ROLE語句 22419.4.2 DROP ROLE語句 22419.4.3 SET ROLE語句 22419.5 小結 22519.6 問與答 22519.7 實踐 22619.7.1 測驗 22619.7.2 練習 226第 20章 創建並使用視圖和異名 22720.1 什麽是視圖 22720.1.1 使用視圖來簡化數據訪問 22820.1.2 使用視圖作為一種安全角式 22820.1.3 使用視圖來維護匯總數據 22820.2 創建視圖 22920.2.1 從一個表創建視圖 22920.2.2 從多個表創建視圖 23120.2.3 從視圖創建視圖 23120.3 WITH CHECK OPTION 23220.4 從視圖創建表 23320.5 視圖與ORDER BY子句 23420.6 通過視圖更新數據 23420.7 刪除視圖 23520.8 嵌套視圖對性能的影響 23520.9 什麽是異名 23520.9.1 創建異名 23620.9.2 刪除異名 23620.10 小結 23720.11 問與答 23720.12 實踐 23720.12.1 測驗 23720.12.2 練習 238第 21章 使用系統目錄 23921.1 什麽是系統目錄 23921.2 如何創建系統目錄 24021.3 系統目錄中包含什麽內容 24021.3.1 用戶數據 24121.3.2 安全信息 24121.3.3 數據庫設計信息 24121.3.4 性能統計信息 24121.4 不同實現中的系統目錄表 24121.5 查詢系統目錄 24221.6 更新系統目錄對象 24421.7 小結 24521.8 問與答 24521.9 實踐 24521.9.1 測驗 24521.9.2 練習 246第 22章 高級SQL主題 24722.1 游標 24722.1.1 打開游標 24822.1.2 從游標獲取數據 24822.1.3 關閉游標 24922.2 存儲過程和函數 25022.3 觸發器 25122.3.1 CREATE TRIGGER語句 25122.3.2 DROP TRIGGER語句 25322.4 動態SQL 25322.5 調用級接口 25322.6 使用SQL生成SQL 25422.7 直接SQL與嵌入SQL 25422.8 窗口表格函數 25522.9 使用XML 25522.10 小結 25622.11 問與答 25622.12 實踐 25622.12.1 測驗 25722.12.2 練習 257第 23章 將SQL擴展到企業、 互聯網和內聯網 25823.1 SQL與企業 25823.1.1 後端程序 25823.1.2 前端程序 25923.2 訪問遠程數據庫 25923.2.1 ODBC 26023.2.2 JDBC 26023.2.3 OLE DB 26023.2.4 廠商連接產品 26023.2.5 Web接口 26123.3 SQL與互聯網 26123.3.1 讓數據供全世界的 顧客使用 26223.3.2 向雇員和授權顧客 提供數據 26223.4 SQL與內聯網 26223.5 小結 26323.6 問與答 26323.7 實踐 26323.7.1 測驗 26423.7.2 練習 264第 24章 標準SQL的擴展 26524.1 各種實現 26524.1.1 不同實現之間的區別 26524.1.2 遵循ANSI SQL 26624.1.3 SQL的擴展 26724.2 擴展示例 26724.2.1 Transact-SQL 26824.2.2 PL/SQL 26824.2.3 MySQL 26924.3 交互式SQL語句 26924.4 小結 27024.5 問與答 27024.6 實踐 271附錄A 常用SQL命令 272附錄B 安裝Oracle和Microsoft SQL 277附錄C 測驗和練習的答案 280附錄D 額外練習 314術語表 325
作者介紹
Ryan Stephens是Perpetual Technologies公司以及Indy Data Partners公司(位于印第安纳波利斯)的联合创始人兼CEO。Ryan在IT领域有20多年的研究和咨询经历,擅长数据管理、SQL和Oracle。Ryan在印第安纳大学-普渡大学印第安纳波利斯联合分校创办并讲授了5年的数据库和SQL课程,他还为印第安纳陆军国民警卫队担任了12年的程序分析员(programmer analyst)。Ryan已经为Sams Publishing编写了多本数据库和SQL相关的图书。Arie D. Jones是Indy Data Partners(IDP)公司(位于印第安纳波利斯)新兴技术(Emerging Technologies)部门的副总裁,领导着一个专家小组负责数据库环境与应用程序的规划、设计、开发、部署和管理,从而让每个客户都获得最佳的工具与服务的组合。他还是技术活动的定期发言人,并且在数据库方面出版了多本图书,并发表了多篇文章。Ronald Plew已经从Perpetual Technologies公司的联合创始人和副总裁的位置上退休,他在关系数据库技术领域有20多年的研究和咨询经验,还为Sams Publishing合著了多本图书。Ron在印第安纳大学-普渡大学印第安纳波利斯联合分校讲授了5年的数据库和SQL课程。他还曾经担任过印第安纳陆军国民警卫队的程序分析员。