收藏 分享(赏)

14天学会SQL.docx

上传人:oceanpvg 文档编号:1812707 上传时间:2018-08-25 格式:DOCX 页数:383 大小:1.71MB
下载 相关 举报
14天学会SQL.docx_第1页
第1页 / 共383页
14天学会SQL.docx_第2页
第2页 / 共383页
14天学会SQL.docx_第3页
第3页 / 共383页
14天学会SQL.docx_第4页
第4页 / 共383页
14天学会SQL.docx_第5页
第5页 / 共383页
点击查看更多>>
资源描述

1、14 天 学 会 SQL美 Bryan Morgan Jeff Perkins 著邓 洪 涛陈 越 译致 谢特别感谢 以下人员: Jeff Perkins、 David Blankenbeckler、 Rosemarie Graham、 Todd Bumbalough、 Chris Denny、 Shannon Little、 Jr.、 Clint、 Linda Morgan、 Shannon 和 Kaye Little。谨以此书献给我美丽的妻子 Becky,真心地感谢你的支持、鼓励和爱。谢谢你伴我度 过所有那些夜以继日的日子,你绝对是最优秀的。 Bryan Morgan我将感谢我的妻子 Le

2、slie,她在协调我的工作、写作、家庭生活以及我和父母的交往 等各方面 起了关键作 用 ,使我充满创 造 力和好奇心 。献给所有辛勤工作的程序员们 特别是那些将工作中的困难部分做得很出色但却 始终默默无闻的人。希望你能在这里找到节省你工作时间的例子。 Jeff Perkins作 者 简 介 :Bryan Morgan:是位于 Florida 州的 Tybrin 公司的软件工程师。他毕业于 Clemson 大学, 获得 电子工程科学学 士学位 。 毕业 后, 他用 Oracle、 Sybase、 Informix、 Access 和 Foxpro 等诸多产品开 发过许多运 行 于 Windows

3、 和 Unix 操作系统 上的应用项目 , 经 验 十 分 丰 富 。 他 曾 与 人 合 著 过 Teach Yourself ODBC In 21 Days , 并 且 是 D eveloping Client/Server Applications With Visual Basic 一书 的技术编辑 。 不仅如 此, 他还是 New Orleans and Pensacola(FL)交响乐团的作 客 钢琴家 。 Bryan 先 生住在 Florida 州的 Navarre, 和 他 的 妻 子 Becky 在一起。Jeff Perkins: Tybrin 公司的高 级软件工程师 , 现

4、在是项目领导 和技术负责人 , 毕业于 美国空军学 院( 和 Grady Booch 一个班)。 作 为老牌领航员和 B-52 战略轰炸 机的投弹手, 他具有超过 2500 个小时的飞行经验。他也是一名程序员、项目小组负责人和程序管 理员。 他的 癖好是在微机(个人拥有 五台) 上编 程和长距离自 行车运动 。 Jeff 先生 和他的 妻子 Leslie 以及两个女儿 Laura 和 Kelly,目前住在 Florida 州的 Niceville。简介这 本 书 是 写 给 谁 的 ?让我们用一个故事来回答这个问题吧:星期五下午,你的老板光顾了你的小卧室,将 一份新项目扔到书桌上。这个项目看起

5、来很象你刚做过的那个,只是它包含了和几个 数据库的联系。原来,最近你所在的公司决定,将自己设计的文件方式的数据系统, 过渡到使 用关系数据库 系统上来。 当然, 你 以前见过象 SQL、 表、 记录 、 查询和 RDBMS 之类的术语,但你已记不清它们的确切含义了。你注意到离交付程序的最后期限只有 三个星期 甚至只有两个星期了,但现在却刚开始!正当你开始查找这些术语的 定义和有关例子、并开始付诸实施的时候,你发现了这本书。本书前十四天的教程示范了怎样使用结构化查询语言(Structured Query Language: SQL), 以便将现代关系 数据库的威力 融合在你的代 码里。 第十五天

6、将教 你怎样在 C+ 和 Delphi 的程序 设计中使用 SQL。 开始的第一天, 将给出关系数据 库和 SQL 的定义, 并提供一 些历史资料; 第一个星期结束 的时候, 你将 能使用基本的 SQL 命 令检索数据 ; 第 二 个 星 期 结 束 时 , 你 将 能 使 用 SQL 的 更 高 级 的 特 性 , 比 如 存 储 过 程 和 触 发 器 , 使 你 的程序功能更加强大。全书贯穿了 SQL 的语法讲解,并给出以 Personal Oracle7、 Microsoft Query 和其它数据库产品写的生动例子。但是,在阅读本书时,你不必接触 任何这些 具体产品, 因为它是一本

7、独立的 SQL 语法参 考书。 当 然, 如果你 象我们一样 , 使用上述其中一种平台并且走过书中的例子,将更好地帮助你理解 S QL。 也 许 , 其 中 某个例子正是你需要的,来完成老板扔在你桌子上的程序呢!怎 样 从 这 本 书 获 得 最 大 效 益本书的目的是教你学会利用 SQL 的强大功能,面向的读者是想学习使用 SQL 和关系 型数据库理 论的数据库设 计师和程序员。 如 果你对 SQL 的基本知 识和历史已经 很熟悉 的话,我们建议你跳过第一个星期的内容,充满热情地直接从第八天开始。除了第一 天讲述 SQL 的最基本知识外,第二天给出了查询的大致语法和结构,重点是关键字 SEL

8、ECT; 第三 天包括运算符、 表达式和条 件 在 WHERE 子句中最 常用的东西; 第四天讲述了一些很有用的函数,比如时间和日期函数;第五天讲了几种以 WHERE 开头的子句;第六天讲述了连接,这是 SQL 中将来源不同的数据结合在一起的方法; 第七天覆盖了子查询。第一个星期结束的时候,你应该对从关系数据库中检索数据的 所有必要概念都熟悉掌握。第二个星期 (第八天 起) 从每个 人都感兴趣 的 题目开始讲 : 数 据操纵。 第九天, 你 将学习创建表的奥秘;第十天教你创建索引和视图;第十一天有提交和卷回等重要概念;防 止未经授权就访问你的数据的章节在第十二天讲授;第十三天讲嵌入式 SQL,

9、 即 怎 样 将 SQL 语句和具 体的程序开发 平台紧密结合 起来; 最后, 第十四 天传给你使用 存储过 程和触发器的技巧,并使你的数据库达到最优性能。第二个星期结束时,只有数据库 管理员能和 你拥有的数据 库知识相比了 。 你 将不仅掌握了对 你的公司非常 必要的知识, 而且可以完成老板开始给你的任务了。第 一 周 一 瞥 1第一天 介绍 SQL . 错误!未定义书签。数据库的简要历史 错误!未定义书签。设计数据库结构 错误!未定义书签。今 日 数 据 库 风 景 线 . 错误!未定义书签。SQL 概述 错误!未定义书签。本书中包含的例子 错误!未定义书签。在应用编程中使用 SQL 错误

10、!未定义书签。总结 错误!未定义书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第二天 介绍查询 错误!未定义书签。目标 错误!未定义书签。背景 错误!未定义书签。一般的语法规则 错误!未定义书签。 检 索 大 量 数 据 : SELECT 和 FROM 错误!未定义书签。 样本数据库 . 错误!未定义书签。你的第一个查询 错误!未定义书签。怎样知道结束:结束符 . 错误!未定义书签。改变列的顺序 错误!未定义书签。选择个别列 . 错误!未定义书签。选择另一张表 错误!未定义书签。结果不重复的查询 错误!未定义书签

11、。总结 错误!未定义书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。 第三天 表达式、条件和操作符 错误!未定义书签。目标 错误!未定义书签。表 达 式 . 错误!未定义书签。条件 错误!未定义书签。WHERE 子句 错误!未定义书签。操 作 符 . 错误!未定义书签。算术操作符 . 错误!未定义书签。比较操作符 . 错误!未定义书签。字符操作符 . 错误!未定义书签。逻辑操作符 . 错误!未定义书签。集合操作符 . 错误!未定义书签。 其它操作符,IN 和 BETWEEN . 错误!未定义书签。 总结 错误!未定

12、义书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第四天 函 数 错误!未定义书签。目标 错误!未定义书签。聚集函数 . 错误!未定义书签。COUNT . 错误!未定义书签。SUM 错误!未定义书签。AVG 错误!未定义书签。MAX 错误!未定义书签。MIN . 错误!未定义书签。VARIANCE(方 差 ) 错误!未定义书签。STDDEV(标 准 差 ) 错误!未定义书签。日期和时间函数 错误!未定义书签。ADD_MONTHS 错误!未定义书签。LAST_DAY . 错误!未定义书签。MONTHS_BETWEEN

13、 错误!未定义书签。NEW_TIME. 错误!未定义书签。NEXT_DAY. 错误!未定义书签。SYSDATE . 错误!未定义书签。算术函数 . 错误!未定义书签。ABS. 错误!未定义书签。CEIL 和 FLOOR 错误!未定义书签。 COS, COSH, SIN, SINH, TAN 和 TANH 错误!未定义书签。 EXP. 错误!未定义书签。LN 和 LOG 错误!未定义书签。MOD . 错误!未定义书签。POWER 错误!未定义书签。SIGN . 错误!未定义书签。SQRT 错误!未定义书签。字符函数 . 错误!未定义书签。CHR 错误!未定义书签。CONCAT 错误!未定义书签。

14、INITCAP . 错误!未定义书签。LOWER 和 UPPER. 错误!未定义书签。LPAD 和 RPAD. 错误!未定义书签。LTRIM 和 RTRIM 错误!未定义书签。REPLACE . 错误!未定义书签。SUBSTR . 错误!未定义书签。TRANSLATE 错误!未定义书签。INSTR . 错误!未定义书签。LENGTH . 错误!未定义书签。转换函数 . 错误!未定义书签。TO_CHAR 错误!未定义书签。TO_NUMBER . 错误!未定义书签。其它函数 . 错误!未定义书签。GREATEST 和 LEAST . 错误!未定义书签。USER 错误!未定义书签。总结 错误!未定义

15、书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第五天 子 句 错误!未定义书签。介绍 错误!未定义书签。WHERE 子句 错误!未定义书签。STARTING WITH 子句 . 错误!未定义书签。从 混 沌 到 有 序 : ORDER BY 子句 . 错误!未定义书签。ORDER BY 子 句 . 错误!未定义书签。HAVING 子句 . 错误!未定义书签。子句的组合 . 错误!未定义书签。练习 5.1 错误!未定义书签。练习 5.2 错误!未定义书签。练习 5.3 错误!未定义书签。练习 5.4 错误!未定义书

16、签。总结 错误!未定义书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第六天 连 接 错误!未定义书签。目标 错误!未定义书签。简介 错误!未定义书签。找到正确的列 错误!未定义书签。等值连接 . 错误!未定义书签。非等值连接 . 错误!未定义书签。外 连 接 . 错误!未定义书签。将一个表连接到它本身 . 错误!未定义书签。总结 错误!未定义书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第七天 子查询 错误!未定义书签。简介 错误!

17、未定义书签。建立一个子查询 错误!未定义书签。在子查询中使用聚集函数 . 错误!未定义书签。嵌套子查询 . 错误!未定义书签。相关子查询 . 错误!未定义书签。使用 EXISTS、 ANY 和 ALL . 错误!未定义书签。 总结 错误!未定义书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第 一 周 复 习 157第 二 周 一 瞥 158第八天 数据操纵 错误!未定义书签。简介数据操纵语句 错误!未定义书签。INSERT 语句 错误!未定义书签。INSERT . VALUES 语句 . 错误!未定义书签。INS

18、ERT.SELECT 语句 . 错误!未定义书签。UPDATE 语 句 . 错误!未定义书签。例 8.4 错误!未定义书签。例 8.5 错误!未定义书签。例 8.6 错误!未定义书签。DELETE 语句 . 错误!未定义书签。例 8.7 错误!未定义书签。例 8.8 错误!未定义书签。 从外部数据源转入和转出数据 错误!未定义书签。Microsoft Access 错误!未定义书签。Microsoft and Sybase SQL Server . 错误!未定义书签。Personal Oracle7 错误!未定义书签。总结 错误!未定义书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错

19、误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第九天 创建和操纵表 . 错误!未定义书签。简介 错误!未定义书签。 CREATE DATABASE 语 句 . 错误!未定义书签。CREATE DATABASE 选 项 . 错误!未定义书签。数据库设计 . 错误!未定义书签。创建数据字典 错误!未定义书签。创建关键字段 错误!未定义书签。CREATE TABLE 语句 错误!未定义书签。例 9.3 错误!未定义书签。表名 错误!未定义书签。字段名 . 错误!未定义书签。字段的数据类型 错误!未定义书签。用已经存在的表建表 . 错误!未定义书签。ALTER TABLE 语句

20、 . 错误!未定义书签。DROP TABLE 语 句 . 错误!未定义书签。DROP DATABASE 语 句 . 错误!未定义书签。总结 错误!未定义书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第十天 创建视图和索引 . 错误!未定义书签。简介 错误!未定义书签。使用视图 . 错误!未定义书签。一个简单的视图 错误!未定义书签。重命名列 . 错误!未定义书签。SQL 对 视 图 的 处 理 错误!未定义书签。使用 SELECT 的 限 制 错误!未定义书签。用视图修改数据 错误!未定义书签。用视图修改数据的问

21、题 . 错误!未定义书签。视图的一般应用 错误!未定义书签。视图和安全性 错误!未定义书签。使 用 视 图 转 化 单 位 . 错误!未定义书签。使用视图将复杂的查询简单化 错误!未定义书签。DROP VIEW 语句 . 错误!未定义书签。使用索引 . 错误!未定义书签。什么是索引? 错误!未定义书签。索引小知识 . 错误!未定义书签。在多个字段上建立索引 . 错误!未定义书签。 在 CREATE INDEX 语句中使用 UNIQUE 关键字 错误!未定义书签。 索引和连接 . 错误!未定义书签。使用簇 . 错误!未定义书签。总结 错误!未定义书签。问题与解答 . 错误!未定义书签。讨 论 会

22、 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第十一天 事 务 控 制 . 错误!未定义书签。简介 错误!未定义书签。事务控制 . 错误!未定义书签。例 11.1 错误!未定义书签。开 始 一 个 事 务 错误!未定义书签。例 11.2 错误!未定义书签。结 束 一 个 事 务 错误!未定义书签。例 11.3 错误!未定义书签。例 11.4 错误!未定义书签。撤 消 一 个 事 务 错误!未定义书签。例 11.5 错误!未定义书签。例 11.6a 错误!未定义书签。例 11.6b 错误!未定义书签。使 用 事 务 的 保 存 点 (SAVINGPOINT) 错误

23、!未定义书签。 例 11.7a 错误!未定义书签。例 11.7b 错误!未定义书签。例 11.8a 错误!未定义书签。例 11.8b 错误!未定义书签。总结 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。第十二天 数 据 库 的 安 全 性 错误!未定义书签。简介 错误!未定义书签。 当务之急的需要:数据库管理员 错误!未定义书签。流行的数据库产品及其安全性 错误!未定义书签。一个数据库怎样才能成为安全的? . 错误!未定义书签。Personal Oracle7 及 其 安 全 性 . 错误!未定义书签。为安全性的目的而使用视图 错误!未定义书签。 总结 错

24、误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第十三天 嵌入式 SQL 错误!未定义书签。简介 错误!未定义书签。 究竟什么是嵌入式 SQL? . 错误!未定义书签。静态和动态 SQL . 错误!未定义书签。用 SQL 编 程 错误!未定义书签。对 ANSI SQL 的 扩 展 . 错误!未定义书签。BASEBALL 数据库 . 错误!未定义书签。声 明 局 部 变 量 (Local Variables). 错误!未定义书签。声 明 全 局 变 量 (Global Variables). 错误!未定义书签。 使用变量 . 错误!未定义书

25、签。PRINT 命 令 . 错误!未定义书签。BEGIN 和 END 语句 . 错误!未定义书签。IF . ELSE 语句 错误!未定义书签。测试查询的结果 错误!未定义书签。WHILE 循环 错误!未定义书签。总结 错误!未定义书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。第十四天 高级 SQL 课题 . 错误!未定义书签。 简介 错误!未定义书签。临 时 表 . 错误!未定义书签。例 14.1 错误!未定义书签。例 14.2 错误!未定义书签。例 14.3 错误!未定义书签。游标 错误!未定义书签。创建游标

26、. 错误!未定义书签。打开游标 . 错误!未定义书签。卷动游标 . 错误!未定义书签。测试游标的状态 错误!未定义书签。关闭游标 . 错误!未定义书签。游标的范围 . 错误!未定义书签。创 建 和 使 用 存 储 过 程 . 错误!未定义书签。例 14.5 错误!未定义书签。使用存储过程的参数 . 错误!未定义书签。删 除 一 个 存 储 过 程 . 错误!未定义书签。嵌套存储过程 错误!未定义书签。设计和使用触发器 错误!未定义书签。触发器和事务 错误!未定义书签。使 用 触 发 器 的 限 制 . 错误!未定义书签。嵌套触发器 . 错误!未定义书签。整理数据库和 SQL 查询 . 错误!未

27、定义书签。整理数据库 . 错误!未定义书签。整理 SQL 查询 错误!未定义书签。总结 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。 第十五天 SQL 的 实 际 使 用 . 错误!未定义书签。简介 错误!未定义书签。快速浏览 . 错误!未定义书签。ODBC . 错误!未定义书签。Personal Oracle7 错误!未定义书签。ISQL . 错误!未定义书签。Visual C+ 错误!未定义书签。Delphi . 错误!未定义书签。设置 错误!未定义书签。创建数据库 . 错误!未定义书签。 使用 M ICROSOFT QUERY

28、 执 行 连 接 . 错误!未定义书签。使用 VISUAL C+和 SQL . 错误!未定义书签。使用 DELPHI 和 SQL 错误!未定义书签。总结 错误!未定义书签。问题与解答 . 错误!未定义书签。讨 论 会 . 错误!未定义书签。小测验 . 错误!未定义书签。练习 错误!未定义书签。附录 A 常用的 SQL 语 句 错误!未定义书签。ALTER DATABASE 错误!未定义书签。ALTER USER . 错误!未定义书签。BEGIN TRANSACTION 错误!未定义书签。CLOSE CURSOR. 错误!未定义书签。COMMIT TRANSACTION 错误!未定义书签。CRE

29、ATE DATABASE. 错误!未定义书签。CREATE INDEX . 错误!未定义书签。CREATE PROCEDURE . 错误!未定义书签。CREATE TABLE. 错误!未定义书签。CREATE TRIGGER 错误!未定义书签。CREATE USER 错误!未定义书签。CREATE VIEW. 错误!未定义书签。DEALLOCATE CURSOR . 错误!未定义书签。DECLARE CURSOR 错误!未定义书签。DROP DATABASE . 错误!未定义书签。DROP INDEX . 错误!未定义书签。DROP PROCEDURE . 错误!未定义书签。DROP TABL

30、E. 错误!未定义书签。DROP TRIGGER 错误!未定义书签。DROP VIEW . 错误!未定义书签。EXECUTE 错误!未定义书签。FETCH . 错误!未定义书签。FROM . 错误!未定义书签。GRANT . 错误!未定义书签。GROUP BY. 错误!未定义书签。HAVING 错误!未定义书签。INTERSECT . 错误!未定义书签。ORDER BY . 错误!未定义书签。ROLLBACK TRANSACTION . 错误!未定义书签。REVOKE 错误!未定义书签。SELECT . 错误!未定义书签。UNION 错误!未定义书签。WHERE 错误!未定义书签。 附录 B

31、第 15 天使用的 C+程序的源代码 . 错误!未定义书签。附录 C 第 15 天使用的 DELPHI 程序的源代码 错误!未定义书签。附录 D 参考资料 错误!未定义书签。BOOKS . 错误!未定义书签。MAGAZINES 错误!未定义书签。 INTERNET URLS FOR THE KETWORD SQL . 错误!未定义书签。 FTP SITES . 错误!未定义书签。NEWSGROUPS 错误!未定义书签。附录 E ASCII 表 . 错误!未定义书签。附录 F 答案 错误!未定义书签。第 一 天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。第 二 天 . 错误!未定义

32、书签。小测验答案 . 错误!未定义书签。练习答案 . 错误!未定义书签。第 三 天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。练习答案 . 错误!未定义书签。第 四 天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。练习答案 . 错误!未定义书签。第 五 天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。练习答案 . 错误!未定义书签。第 六 天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。练习答案 . 错误!未定义书签。第 七 天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。练习 错误!未定义书签。第 八 天 . 错误!未定义书签。小

33、测验答案 . 错误!未定义书签。第 九 天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。第 十 天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。练习答案 . 错误!未定义书签。第十一天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。第十二天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。练习答案 . 错误!未定义书签。第十三天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。练习 错误!未定义书签。第十四天 . 错误!未定义书签。小测验答案 . 错误!未定义书签。第一周一瞥让我们开始吧在第一周的开始 , 我 们将从历史的 角度介绍 SQL,

34、并且讲述数据 库发展的简单 历程以 及 它 们 在 当 今 世 界 的 广 泛 应 用 。 然 后 , 我 们 介 绍 SELECT 语 句 , 这 个 语 句 有 一 系 列 选 项,可以从数据库中检索不同的数据。第一个星期,你还将学习 SQL 中使用的函数、 查 询 连 接 和 子 查 询 (查 询 中 的 查 询 )。 也 许 开 始 你 觉 得 这 些 题 目 很 陌 生, 但 我 们 将 给 出 使用不同方法的例子,这些例子面向范围广泛的读者,以保证这本书的实用性。例子 是用 Oracle7, Sybase SQL Server, Microsoft Access 和 Microso

35、ft Query 写的,我们将 注意描述它们的不同和共同之处,更好地帮助你掌握 SQL。2第一天 介绍 SQL3SQL 的历史开始于位于 San Jose 的 IBM 实验室。在本世纪 70 年代末期,SQL 就是在 那里开发出 来的 。 “SQL”是 Structured Query Language 的缩写, 即 “结构化查询 语言” , 这个单词本 身经常被当作 “sequel(继 续, 后果) ”, 它当初是为 IBM 公司的 DB2(这是一 个关系数据 库产品, 至今仍 在一系列不同的 平台和环境中 销售使用)开发的。 SQL 不同 于许多当时开发的过程型或第三代语言,SQL 是一个

36、非过程语言。正是 SQL, 使 RDBMS(Relational Database Management System:关系型数据库管理系 统) 成 为可能。 区 分 DBMS 和 RDBMS 的方法是 RDBMS 提供了一 套面向集合的 数据库 语言,而一般的 DBMS 没有。对绝大多数 RDBMS,这种面向集合的数据库语言就是 SQL。注 解 : “非 过 程 (Nonprocedural)”意 味 着 “做 什 么 ”而 不 是 “怎 么 做 ”。比 如 : SQL 描述出要检索、删除、插入的数据的特征,而不是怎样进行 这些操作SQL 的出现 , 使 过去花在设计 文件输入/输出上的时

37、间现在可以用 来开发一个合 适的数 据库结构和进行总体设计了。两个标准化组织:ANSI(the American National Standards Institute:美国国家标准学会 )和 ISO(the International Standards Organization:国际标准 化组织),适时提出了 SQL 的工业标准。目前最新的标准是 ANSI-92,这也是本书使 用的标准。虽然这些组织制定出了数据库设计者应该遵守的标准,但应该指出的是: 所有的数据库产品都在一定程度上和 ANSI 标准有所不同。不仅如此,绝大多数系统 甚至提供一些 SQL 的专有扩展功能,将 SQL 扩展成

38、真正的过程型语言。本书的目的 之一就是给程序员提供使用不同关系型数据库系统的例子,使他们对这些系统不同的 地方有一定的认识。理解 SQL,对于了解数据库的理论和演化很重要。数 据 库 的 简 要 历 史如今,数据库系统在每一个可以想象到的商业领域都得到了应用。从大规模的跟踪数 据 库 (如 飞 机 订 票 系 统 )到 儿 童 棒 球 卡 的 收 集 , 数 据 库 系 统 用 于 存 储 和 分 发 我 们 生 活 所 依赖的各种数据。但直到几年以前,大型数据库系统只能在基于主机结构的计算机上 运行。这些机器的设计、销售和维护费用传统上都是很高的。随着功能强大、价格便 宜的工作站级的计算机的

39、出现,程序员们现在已经能快速设计出价格便宜的软件,以 操纵和维护数据了。最 普遍的数据存 储模型是关系型 的数据库 。 这 种新型的关系数 据库诞生于 E.F.Codd 博 士 1970 年 写的题为 大型共 享数据银行 的 数据的一个关 系模型 (A Relational Model of Data for Large Shared Data Banks)的 学术论文。 理解关系数 据库模型非常重 要 , 因 为 SQL 就 是在实现关系 数据库的过程中 出现的 。 Codd 博士 提出了定义关 系数据库模型 的十三 条准则,但后来却被奇怪地称为 Codd 的十二准则。这些准则如下:0一个关

40、系型的 DBMS 必须能够通过它的关系能力来全面地管理数据库。1 信 息准则。 关系型 DBMS 的 所有信息(包括表和列 名) 都应该 用表中的值显 式地表4示 。2 保证访 问准则。 在关系型数 据库中的每个 值都能保证以 表名 、 主码值和列 名的组 合访问。3 系 统 的 空 值 支 持 策 略 。 关 系 型 DBMS 在系统级上提供对空值 (未知的或尚不能定 义具体值的数据) 处理的支持。空值和默认值不同,并且是独立于任何域的。4 动态的、 联机的关 系型数据字典 。 数据 库的描述和它的 内容在逻辑级 上表示成表 , 并且可以用数据库语言查询。5 功 能范围广泛的数 据子语言。

41、一 个关系系统至 少应提供一种 具有严格语法 定义的 语言,它的功能应很全面、很广泛,支持数据定义、数据操纵、完整性规则、授权和事务处理功能。6视 图更新准则。所 有理论上可更 新的视图也应 该允许由系统 更新 。7 集合级别 上的插入、 修改和删 除。 DBMS 不仅支持集 合级别上的检 索 , 而 且支持 集合级别上的插入、修改和删除。8 数据物 理独立性。 当数据的 物理存取方法 或存储结构变 化时 , 应用程序和 其他特 殊程序应保持逻辑上不受影响。9 数据逻 辑独立性。 当表结构 发生变化时, 应用 程序和其他特 殊程序应在尽 可能的 程度上保持逻辑上不受影响。10数据完整性的独立性

42、。数据库语言必须能定义完整性规则。完整性规则必须存 在联机字典中,任何对表中数据的操作都应进行完整性检查,不能被绕过。11分布独立性。当数据第一次分布和再分布时,应用程序和其他特殊程序的要求 在逻辑上应不受影响。12无破坏准则。当使用低级语言 的时候,则这个低级语言绝不能绕过用数据库 语言定义的完整性规则。在 关系数据库之 前, 过去的 数据库理论中 向来有 “父 /子” 关系, 就是说父节点包 含有 指向它的子节点的文件指针,如图 1.1 所示。这 种操作数据的 方法既有一些优 点 , 也有不少缺点 。 优点是数据 在磁盘上的物理 结构 变得不重要了,程序员只需存储指向下一个存储位置的指针即

43、可,数据也可由这种方式简单得到;而且,数据的增加和删除也很容易。但是,不同的信息群要想相互结合 以形成新的信息却并不容易,当数据库建立后,存在磁盘上的数据格式也不能任意改 变 ,否则需要建 立一个新的库结 构 。 指 一 次 一 个 记 录 译 者 注5图 1.1 关 系 型 数 据 库 以 前 的 数 据 库 系 统Codd 的关于关系 型数据库管理系 统的想法使用 了数学中关系 代数的概念, 将数 据分割 成集合和有关的共同子集。由于信息可以自然地划分成不同的集合,所以 Codd 在这个概念周围组织起他的数据 库系统理论。在关系模型下,数据被划分成具有相同表结构的一些集合,这个表结构 由被

44、称为列(column)或字段(field)的数据元素组成,一个不同的列的具体值的组合称为 记 录( record)或行 (row)。 例如: 建立一个包括 雇员数据的关 系型数据库 , 可以从 建立名 为 EMPLOYEE(雇员)的表开始,你可以定义如下信息片段:name(雇员名)、age(雇员 年龄)和 occupation(职业)。这些数据片段组成表 EMPLOYEE,如表 1.1 所示。表 1.1 EMPLOYEE 表Name Age OccupationWill Williams 25 Electrical EngineerDave Davidson 34 Museum Curator

45、Jan Janis 42 ChefBill Jackson 19 StudentDon DeMarco 32 Game ProgrammerBecky Boudreaux 25 Model从 表 1.1 看出 : 六个数据 行组成了 EMPLOYEE 表。 如果某一用户 想从这个表中 检索一 特 定行 , 他可以命 令数据库管理 系统检索姓名等 于 NAME 字段 中某个值的记录, 比如 Dave Davidson。 如 果他指令 DBMS 检索所 有的字段, 则雇员 名 、 年龄和职业都 将返回 给 用 户 。 SQL 正是命令数 据库检索数据 的语言。 一个 执行上述查询的 SQL 语句

46、的例子 如 下:SELECT *FROM EMPLOYEE6注意:确切的语法格式不一定和这个完全一样,而且也不重要,第二天的课程中我们 再详细讨论这个问题,读者的目标是掌握 SQL 的精髓。因 为 不 同 的 数 据 项 可 以 根 据 明 显 的 关 系 分 成 一 定 的 组 (比 如 雇 员 名 和 雇 员 年 龄 的 关 系 ), 所 以关系数据库 在描述数据元素 之间的关系方 面给数据库 设 计者提供了很 大的灵 活 性 。 利 用 数 学 中 连 接 (JOIN)和 合 并 (UNION)的 概 念 , 关 系 数 据 库 可 以 迅 速 地 从 不 同 集 合( 表) 中检索数据

47、 片段, 并返 回 给用户或程序一 个 “连接好了 的” 数据集合 (看图 1.2)。 这可以使数据库设计者在各个独立的表中存储信息,减少数据的重复。图 1.2 一 个 连 接图 1.3 显示了并(UNION)的概念,即仅仅返回双方都有的数据。图 1.3 一个并比如,表 1.2 叫做 RESPONSIBILITIES(责 任 ), 它 包 含 两 个 字 段 : NAME 和 DUTIES。表 1.2 RESPONSIBILITIES 表Name DutiesBecky Boudreaux SmileBecky Boudreaux WalkBill Jackson StudyBill Jack

48、son Interview for jobs注意到将雇 员的年龄和职 业字段加在此 表中, 从而在每条 记录中重复一遍 是不合适的, 因为使用较长一段时间后,随着记录的增多,这将浪费大量磁盘空间,并且增加系统 访问数据的 时间 。 但如果只 将 NAME 和 DUTIES 存在责任表 中, 用户可以将责任 表和 雇员表通过 NAME 字段连接起来。例如,命令 DBMS 从两个表中检索 NAME 字段等 于“Bckey Boudreaux”的所有字段,将返回表 1.3。7表 1.3 检索后返回的值,这里 name 等于 Becky BoudreauxName Age Occupation Dut

49、iesBecky Boudreaux 25 Model SmileBecky Boudreaux 25 Model Walk关于连接的更多更详细的例子,将在第六天给出。设 计 数 据 库 结 构在硬件平台和 RDBMS 产品选定以后,数据库设计者最重要的决定是表结构的设计。 这个阶段的决定将影响数据库的性能和程序的开发过程。将数据分成不同的、唯一的 集 合的过程叫做 “规范化 (normalization)”。 在 Codd 的关系 模型中, 规范化按程 度 不同 被定义成四层,每一层都在前一层的基础上,进一步减少了数据库中数据的重复,同 时减少了库的复杂程度。今日数据库风景线计算技术已使世界范围的商务工作发生了永久的变化。过去装在堆满在仓库中橱柜里 的信息资料,如今用鼠标点一下就可以立即

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 琴棋书画

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报