SQL入门经典
2009-5
人民邮电出版社
Ryan Stephens,Ron Plew,Arie D.Jones
327
井中月
无
欢迎来到关系型数据库和SQL的世界!本书是为那些自发地想通过学习结构化查询语言——SQL——来更好地掌握关系型数据库的人而编写的,主要是那些在使用SQL实现数据库管理方面没有或仅有极少经验的人。同时,有一定关系型数据库使用经验,但想学习如何在数据库里检索、解决数据库问题、建立数据库结构、操作数据库里的数据等知识的人也适合阅读本书。对于经常使用SQL处理关系型数据库事务的人来说,就不必阅读本书了。本书的目标 本书的目标人群是没有或只有极少SQL使用经验,或使用过关系型数据库但其经验仅局限于SQL的人。因此,本书是一本教材,其中提供的知识与范例都是从最基础开始的。本书并不是一本完整的SQL参考书,但其中包含了完整的SQL命令集表,可以充当工具书的作用。本版增加的内容 本版包含与前三个版本同样的内容与格式。我们彻查了整本书,寻找可以改进的地方。我们还根据新的SQL,标准(SQL 2003)增加了新的概念和命令,使本书跟上SQL的发展变化,能够更好地为当今的读者服务。增加的最重要部分是在实战练习中使用了MySQL,这种开源数据库让本书的读者都能够亲自实践练习中的内容。 阅读本书的前提条件 也许有人要问:需要什么条件才能让这本书对我有所帮助呢?从理论上来说,读者需要购买这本书,用适当的时间来学习其中的内容,研究范例,完成练习。如果能够把每章的内容都应用于实际的关系型数据库系统,那将大有好处。具体使用何种关系型数据库并不重要,因为SQt,是关系型数据库的标准语言。可以使用的关系型数据库包括Oracle、Sybase、InformiX、Microsoft SQL Server、Microsoft Access、MySQL和dBASE。
《SQL入门经典(第4版)》的作者都是数据库教学与应用的专家,有着丰富的经验。《SQL入门经典(第4版)》详细介绍了SQL语言的基本语法、基本概念,说明了各种SQL实现与ANSI标准之间的差别。书中包含了大量的范例,直观地说明了如何使用SQL对数据进行处理。每章后面还有针对性很强的测验与练习,能够帮助读者更好地理解和掌握学习的内容。在最后的附录里还有关于安装MySQL的详细介绍、书中用到的关键SQL语句、测验和练习的答案。《SQL入门经典(第4版)》的内容层次清晰,针对性强,非常适合初学者作为入门教材。
第一部分 SQL概念综述第1章 欢迎来到SQL世界 31.1 SQL定义及历史 31.1.1 什么是SQL 41.1.2 什么是ANSI SQL 41.1.3 新标准:SQL-2003 41.1.4 什么是数据库 51.1.5 关系型数据库 51.1.6 客户端/服务器技术 61.1.7 基于Web的数据库系统 71.1.8 主流数据库厂商 71.2 SQL会话 81.2.1 CONNECT 81.2.2 DISCONNECT和EXIT 81.3 SQL命令的类型 81.3.1 定义数据库结构 91.3.2 操作数据 91.3.3 选择数据 91.3.4 数据控制语言 91.3.5 数据管理命令 101.3.6 事务控制命令 101.4 本书使用的数据库 101.4.1 表命名标准 111.4.2 数据一瞥 111.4.3 表的构成 121.4.4 MySQL范例和练习 141.5 小结 141.6 问与答 141.7 实践 151.7.1 测验 151.7.2 练习 15第二部分 建立数据库第2章 定义数据结构 192.1 数据是什么 192.2 基本数据类型 192.2.1 定长字符串 202.2.2 变长字符串 202.2.3 大对象类型 212.2.4 数值类型 212.2.5 小数类型 222.2.6 整数 222.2.7 浮点数 232.2.8 日期和时间类型 232.2.9 直义字符串 232.2.10 NULL数据类型 242.2.11 布尔值 242.2.12 自定义类型 242.2.13 域 252.3 小结 252.4 问与答 262.5 实践 262.5.1 测验 262.5.2 练习 27第3章 管理数据库对象 293.1 什么是数据库对象 293.2 什么是规划 293.3 表:数据的主要存储方式 313.3.1 列 313.3.2 行 323.3.3 CREATE TABLE语句 323.3.4 命名规范 333.3.5 ALTER TABLE命令 333.3.6 从现有表新建另一个表 353.3.7 删除表 363.4 完整性约束 363.4.1 主键约束 363.4.2 惟一性约束 373.4.3 外键约束 383.4.4 NOT NULL约束 383.4.5 检查约束 393.4.6 去除约束 393.5 小结 403.6 问与答 403.7 实践 403.7.1 测验 413.7.2 练习 41第4章 规格化过程 424.1 规格化数据库 424.1.1 原始数据库 424.1.2 数据库逻辑设计 434.1.3 规格形式 444.1.4 命名规范 464.1.5 规格化的优点 474.1.6 规格化的缺点 474.2 去规格化数据库 484.3 小结 484.4 问与答 484.5 实践 494.5.1 测验 494.5.2 练习 49第5章 操作数据 515.1 数据操作概述 515.2 用新数据填充表 515.2.1 把数据插入到表 525.2.2 给表里指定列插入数据 535.2.3 从另一个表插入数据 535.2.4 插入NULL值 555.3 更新现有数据 555.3.1 更新一列的数据 555.3.2 更新一条或多记录里的多个字段 565.4 从表里删除数据 565.5 小结 575.6 问与答 575.7 实践 585.7.1 测验 585.7.2 练习 59第6章 管理数据库事务 606.1 什么是事务 606.2 控制事务 616.2.1 COMMIT命令 616.2.2 ROLLBACK命令 626.2.3 SAVEPOINT命令 636.2.4 ROLLBACK TO SAVEPOINT命令 646.2.5 RELEASE SAVEPOINT命令 656.2.6 SET TRANSACTION命令 656.3 事务控制与数据库性能 656.4 小结 666.5 问与答 666.6 实践 666.6.1 测验 666.6.2 练习 67第三部分 从查询中获得有效的结果第7章 数据库查询 717.1 什么是查询 717.2 SELECT语句 717.2.1 SELECT语句 727.2.2 FROM子句 737.2.3 WHERE子句 747.2.4 ORDER BY子句 757.2.5 大小写敏感性 767.3 简单查询的范例 777.3.1 统计表里的记录数量 787.3.2 从另一个用户表里选择数据 787.3.3 使用字段别名 797.4 小结 797.5 问与答 797.6 实践 807.6.1 测验 807.6.2 练习 80第8章 使用操作符对数据进行分类 828.1 什么是SQL里的操作符 828.2 比较操作符 828.2.1 相等 838.2.2 不等于 838.2.3 小于和大于 848.2.4 比较操作符的组合 848.3 逻辑操作符 858.3.1 IS NULL 858.3.2 BETWEEN 868.3.3 IN 868.3.4 LIKE 878.3.5 EXISTS 888.3.6 ALL、SOME和ANY操作符 888.4 连接操作符 898.4.1 AND 908.4.2 OR 908.5 求反操作符 928.5.1 不相等 928.5.2 NOT BETWEEN 928.5.3 NOT IN 938.5.4 NOT LIKE 938.5.5 IS NOT NULL 948.5.6 NOT EXISTS 948.6 算术操作符 948.6.1 加法 958.6.2 减法 958.6.3 乘法 958.6.4 除法 968.6.5 算术操作符的组合 968.7 小结 978.8 问与答 978.9 实践 978.9.1 测验 978.9.2 练习 98第9章 汇总查询得到的数据 1009.1 什么是汇总函数 1009.1.1 COUNT函数 1019.1.2 SUM函数 1039.1.3 AVG函数 1039.1.4 MAX函数 1049.1.5 MIN函数 1059.2 小结 1059.3 问与答 1069.4 实践 1069.4.1 测验 1069.4.2 练习 107第10章 数据排序与分组 10810.1 为什么要对数据进行分组 10810.2 GROUP BY子句 10910.2.1 分组函数 10910.2.2 对选中的数据进行分组 10910.2.3 创建分组和使用汇总函数 10910.2.4 以整数代表字段名称 11210.3 GROUP BY与ORDER BY 11210.4 HAVING子句 11410.5 小结 11510.6 问与答 11510.7 实践 11510.7.1 测验 11510.7.2 练习 116第11章 调整数据的外观 11711.1 ANSI字符函数 11711.1.1 串接 11711.1.2 子串 11811.1.3 TRANSLATE 11811.2 常用字符函数 11811.2.1 串接 11811.2.2 TRANSLATE 11911.2.3 REPLACE 12011.2.4 UPPER 12011.2.5 LOWER 12011.2.6 SUBSTR 12111.2.7 INSTR 12211.2.8 LTRIM 12211.2.9 RTRIM 12311.2.10 DECODE 12311.3 其他字符函数 12411.3.1 LENGTH 12411.3.2 IFNULL(检查NULL值) 12411.3.3 COALESCE 12511.3.4 LPAD 12511.3.5 RPAD 12611.3.6 ASCII 12611.4 算术函数 12611.5 转换函数 12711.5.1 字符串转换为数字 12711.5.2 数字转换为字符串 12811.6 字符函数的组合使用 12811.7 小结 12911.8 问与答 12911.9 实践 13011.9.1 测验 13011.9.2 练习 130第12章 日期和时间 13212.1 日期是如何存储的 13212.1.1 日期和时间的标准数据类型 13212.1.2 DATETIME元素 13312.1.3 不同实现的日期类型 13312.2 日期函数 13412.2.1 当前日期 13412.2.2 时区 13412.2.3 时间与日期相加 13512.2.4 比较日期和时间间隔 13612.2.5 其他日期函数 13712.3 日期转换 13712.3.1 日期描述 13812.3.2 日期转换为字符串 14012.3.3 字符串转换为日期 14012.4 小结 14112.5 问与答 14112.6 实践 14112.6.1 测验 14112.6.2 练习 141第四部分 建立复杂的数据库查询第13章 在查询里结合表 14513.1 从多个表获取数据 14513.2 结合的类型 14613.2.1 结合条件的位置 14613.2.2 等值结合 14613.2.3 自然结合 14713.2.4 使用表的别名 14813.2.5 不等值结合 14913.2.6 外部结合 15013.2.7 自结合 15113.2.8 结合多个主键 15213.3 需要考虑的事项 15313.3.1 使用基表 15313.3.2 笛卡尔积 15413.4 小结 15513.5 问与答 15613.6 实践 15613.6.1 测验 15613.6.2 练习 157第14章 使用子查询定义未确定数据 15814.1 什么是子查询 15814.1.1 子查询与SELECT语句 15914.1.2 子查询与INSERT语句 16014.1.3 子查询与UPDATE语句 16114.1.4 子查询与DELETE语句 16214.2 嵌套的子查询 16214.3 关联子查询 16414.4 小结 16414.5 问与答 16514.6 实践 16514.6.1 测验 16514.6.2 练习 166第15章 组合多个查询 16815.1 单查询与组合查询 16815.2 组合查询操作符 16915.2.1 UNION 16915.2.2 UNION ALL 17115.2.3 INTERSECT 17215.2.4 EXCEPT 17215.3 组合查询里使用ORDER BY 17315.4 组合查询里使用GROUP BY 17415.5 获取准确的数据 17515.6 小结 17615.7 问与答 17615.8 实践 17615.8.1 测验 17715.8.2 练习 178第五部分 SQL性能调整第16章 利用索引改善性能 18116.1 什么是索引 18116.2 索引是如何工作的 18216.3 CREATE INDEX命令 18216.4 索引的类型 18316.4.1 单字段索引 18316.4.2 惟一索引 18316.4.3 组合索引 18416.4.4 隐含索引 18416.5 何时考虑使用索引 18416.6 何时应该避免使用索引 18516.7 删除索引 18616.8 小结 18616.9 问与答 18616.10 实践 18716.10.1 测验 18716.10.2 练习 187第17章 改善数据库性能 18817.1 什么是SQL语句调整 18817.2 数据库调整与SQL语句调整 18917.3 格式化SQL语句 18917.3.1 为提高可读性格式化SQL语句 18917.3.2 FROM子句里的表 19117.3.3 结合条件的次序 19117.3.4 最严格条件 19117.4 全表扫描 19217.5 其他性能考虑 19317.5.1 使用LIKE操作符和通配符 19317.5.2 避免使用OR操作符 19417.5.3 避免使用HAVING子句 19517.5.4 避免大规模排序操作 19517.5.5 使用存储过程 19517.5.6 在批加载时关闭索引 19517.6 性能工具 19617.7 小结 19617.8 问与答 19617.9 实践 19717.9.1 测验 19717.9.2 练习 197第六部分 使用SQL管理用户和安全第18章 管理数据库用户 20118.1 用户就是原因 20218.1.1 用户的类型 20218.1.2 谁管理用户 20218.1.3 用户在数据库里的位置 20318.1.4 不同规划里的用户 20318.2 管理过程 20318.2.1 创建用户 20418.2.2 创建规划 20518.2.3 删除规划 20618.2.4 调整用户 20718.2.5 用户会话 20718.2.6 禁止用户访问 20818.3 数据库用户使用的工具 20818.4 小结 20818.5 问与答 20918.6 实践 20918.6.1 测验 20918.6.2 练习 209第19章 管理数据库安全 21119.1 什么是数据库安全 21119.2 什么是权限 21219.2.1 系统权限 21219.2.2 对象权限 21319.2.3 谁负责授予和撤消权限 21419.3 控制用户访问 21419.3.1 GRANT命令 21519.3.2 REVOKE命令 21619.3.3 控制对单独字段的访问 21619.3.4 数据库账户PUBLIC 21619.3.5 权限组 21719.4 通过角色控制权限 21719.4.1 CREATE ROLE语句 21819.4.2 DROP ROLE语句 21819.4.3 SET ROLE语句 21819.5 小结 21819.6 问与答 21919.7 实践 21919.7.1 测验 21919.7.2 练习 220第七部分 摘要数据结构第20章 创建和使用视图及异名 22320.1 什么是视图 22320.1.1 使用视图来简化数据访问 22420.1.2 使用视图作为一种安全形式 22420.1.3 使用视图维护摘要数据 22520.2 创建视图 22520.2.1 从一个表创建视图 22520.2.2 从多个表创建视图 22720.2.3 从视图创建视图 22720.3 WITH CHECK OPTION 22820.4 通过视图更新数据 22920.4.1 在视图里插入记录 22920.4.2 从视图里删除记录 22920.5 从视图创建表 22920.6 视图与ORDER BY子句 23020.7 删除视图 23020.8 什么是异名 23120.8.1 创建异名 23120.8.2 删除异名 23220.9 小结 23220.10 问与答 23220.11 实践 23320.11.1 测验 23320.11.2 练习 233第21章 使用系统目录 23421.1 什么是系统目录 23421.2 如何创建系统目录 23521.3 系统目录里包含什么内容 23521.3.1 用户数据 23621.3.2 安全信息 23621.3.3 数据库设计信息 23621.3.4 性能统计 23621.4 不同实现里的系统目录表格 23721.5 查询系统目录 23821.6 更新系统目录对象 23921.7 小结 24021.8 问与答 24021.9 实践 24121.9.1 测验 24121.9.2 练习 241第八部分 在实际工作中应用SQL知识第22章 高级SQL主题 24522.1 光标 24522.1.1 打开光标 24622.1.2 从光标获取数据 24622.1.3 关闭光标 24722.2 存储过程和函数 24722.3 触发器 24922.3.1 CREATE TRIGGER语句 24922.3.2 DROP TRIGGER语句 25022.3.3 FOR EACH ROW语句 25122.4 动态SQL 25122.5 调用级接口 25122.6 使用SQL生成SQL 25222.7 直接SQL与嵌入SQL 25222.8 窗口表格函数 25322.9 使用XML 25322.10 小结 25322.11 问与答 25422.12 实践 25422.12.1 测验 25422.12.2 练习 255第23章 SQL扩展到企业、互联网和内部网 25623.1 SQL与企业 25623.1.1 后台程序 25623.1.2 前台程序 25723.2 访问远程数据库 25823.2.1 ODBC 25823.2.2 JDBC 25823.2.3 厂商连接产品 25923.2.4 通过Web接口访问远程数据库 25923.3 SQL与互联网 26023.3.1 让数据可以被全世界的顾客使用 26023.3.2 向雇员和授权顾客提供数据 26023.3.3 使用SQL的前台Web工具 26023.4 SQL与内部网 26023.5 小结 26123.6 问与答 26123.7 实践 26123.7.1 测验 26223.7.2 练习 262第24章 标准SQL的扩展 26324.1 各种实现 26324.1.1 不同实现之间的区别 26324.1.2 遵循ANSI SQL 26424.1.3 SQL的扩展 26524.2 扩展范例 26524.2.1 Transact-SQL 26624.2.2 PL/SQL 26624.2.3 MySQL 26724.3 交互SQL语句 26724.4 小结 26824.5 问与答 26824.6 实践 26924.6.1 测验 26924.6.2 练习 269第九部分 附录附录A 常用SQL命令 273A.1 SQL语句 273A.2 SQL子句 276附录B 使用MySQL进行练习 278B.1 Windows安装指令 278B.2 Linux安装指令 279附录C 测验和练习的答案 280附录D 本书范例的CREATE TABLE语句 314D.1 EMPLOYEE_TBL 314D.2 EMPLOYEE_PAY_TBL 314D.3 CUSTOMER_TBL 314D.4 ORDERS_TBL 315D.5 PRODUCTS_TBL 315附录E 书中范例的INSERT语句 316E.1 EMPLOYEE_TBL 316E.2 EMPLOYEE_PAY_TBL 316E.3 CUSTOMER_TBL 317E.4 ORDERS_TBL 318E.5 PRODUCTS_TBL 318附录F 额外练习 320术语表 325
第一部分 SQL概念综述 第1章 欢迎来到SQL世界 欢迎来到SQL的世界,体验当今世界庞大的不断发展的数据库技术。通过阅读本书,我们可以获得很多的知识,而这些是在当今关系型数据库和数据管理领域生存所必需的。由于首先必须要介绍SQL的背景知识和一些预备知识,本章的主要内容都是文本,这显得有些单调,但这些貌似无聊的内容却是体会本书后续精彩内容的基础。 本章的重点包括: SQL历史简介 介绍数据库管理系统 一些基本术语和概念 介绍本书所使用的数据库 1.1 SQL定义及历史 任何事务都涉及数据,人们需要使用某种有组织的方法或机制来管理数据。这种机制被称为数据库管理系纺(DBMS)。数据库管理系统已经产生多年了,其中大多数源自于大型机上的平面文件系统。随着技术的发展,在不断增长的商业需要、不断增加的共用数据和互联网的推动下,数据库管理系统的使用已经偏离了其原始方向。 信息管理的现代浪潮主要是由关系型数据库系统(RDBMS)实现的,后者是从传统DBMS派生出来的。 现代数据库与客户端/服务器或Web技术相结合在当今是很常见的模式,公司使用这些方式来管理数据,从而在相应的市场保持竞争力。很多公司的趋势是从客户端/服务器模式转移到Web模式,从而避免用户在访问重要数据时受到地点的限制。下面几个小节将讨论SQL和关系型数据库,后者是当今最通用的DBMS实现。很好地理解关系型数据库,以及如何在当今信息技术世界利用SQL来管理数据,对于理解SQL语言是十分重要的。
《SQL入门经典(第4版)》每章内容针对初学者精心设计,1小时轻松阅读学习,24小时彻底掌握关键知识。每章案例与练习题助你轻松完成常见任务,通过实践提高应用技能,巩固所学知识。 学习如何: ·使用SQL-2003。最新标准的结构化查询语言; ·设计和部署有效、安全的数据库: ·创建高级查询,提取有用信息: ·排序、分组和汇总信息。提供最佳展示; ·调整数据库。提供最优的查询性能; ·了解数据库管理和安全技术。 在《SQL入门经典(第4版)》的24章中,读者可以学习设计和创建数据库以及查询数据并提取有用信息的一些专业技术。《SQL入门经典(第4版)》章与章之间紧密相连,读者可以通过直接的、按步学习的方法。从头开始学>——JANSI SQL的核心知识。 事例代码体现了《SQL入门经典(第4版)》作者的专业技术。使用MvSQL编写的作业提供了有关开放数据库的更多实践内容和技术。包括:使用视图、管理事务、数据库管理和扩展SQL。 循序渐进的示例 引导读者完成最常见的任务。 问与答、测验和练习 帮助读者检验知识的掌握情况。 “注意” 提供有趣的信息。 “提示” 提供建议或完成任务的更快捷方式。 “警告” 指出潜在的问题以及帮助读者避开灾难。 “术语表” 清晰地定义并详细地解释了书中出现的新术语。
无