第一天SQL 简介
SQL 简史
SQL 的诞生于IBM 公司在加利福尼亚San Jose 的试验室中在七十年代SQL 由这里
开发出来最初它们被称为结构化查询语言Structured Query Language 并常常简称为
sequel 开始时它们是为IBM 公司的DB2 系列数据管理系统RDBMS — — 关系型数据库
管理系统而开发的您在今天仍可以买到在不同平台下运行的该系统事实上是SQL
造就了RDBMS 它是一种非过程语言与第三代过程语言如C 和COBOL 产生于同一时
代
注非过程性语言的意思就是指与具体过程无关举例来说SQL 描述了如何对数据
进行检索插入删除但它并不说明如何进行这样的操作
这种特性将RDBMS 从DBMS 中区别开来RDBMS 提供了一整套的针对数据库的语
言而且对于大多数的RDBMS 来说这一整套的数据语言就是SQL 这里一整套的意思
就是对数据和处理操作语言是一些过程的集合
有两个标准化组织美国国家标准协会ANSI 和国际标准组织ISO 正致力于SQL
在工业领域的标准化应用工作本书使用的标准为ANSI-92 尽管该标准要求所有的数据
库设计者应遵守这一标准然而所有的数据库系统所用的SQL 均与ANSI-92 存在一定的
差异此外大多数数据库系统对SQL 进行了有针对性的扩展使它们成为了过程型语言
在本书中我们对不同的RDBMS 系统给出了它们的SQL 语言例句希望你能从中发现它们
的共性我们将要讨论的过程型SQL 有PL/SQL 和Transact-SQL 它们将在第18 天和第
19 天提到
数据库简史
对数据库的发展历程有一个简要的了解可以使您更清楚如何使用SQL 来工作数据库
系统在商业领域应用极为广泛大到航空机票售票系统小到孩子们的棒球卡管理系统
数据库将按照我们的意愿来存储和处理这些数据直到最近几年以前大型的数据库系统
SQL 21 日自学通(V1.0) 翻译人笨猪
EMAIL wyhsillypig@163.com 20
仍只能在大型机上运行而大型机的运行维护使用费用均是非常昂贵的然而在今天
工作站的能力强大到可以让编程人员以极快的速度和极低的价格来设计和发布软件
Dr. Codd's 对关系型数据库系统的十二条规则
关系型数据库是最为流行的数据存储模式它产生于一个名称为A Relational Model of
Data for Large Shared Data Banks 的论文中SQL 进而发展为关系型的数据库对于关系
型数据库Dr. Codd's 定义了12 条规则使之与其他类型的数据库相区别
0 关系型数据库必须通过关系来实现对数据的完全管理
1 所有在关系型数据库中的信息均可以在表中以数值的形式加以体现
2 在关系型数据库中的每一项数据均可以通过库名键名和列名来准确指定
3 关系型数据库系统必须对空值未知的和违规的数据提供系统级的支持有独特
的缺省值而且具有独立域{这一段不太清楚}
4 活动的即时的数据联合— — 它的意思就是在数据库中的数据应有逻辑表格的行的
形式来表达并且可以通过数据处理语言来访问
5 完善的数据子语句— — 它应该至少支持一种有严格语法规则和功能完善的语言并
且应该支持数据和定义处理完整性权限以及事务等操作
6 查看更新规则— — 所有在理论上可以更新的视图可以通过系统操作来更新
7 数据库中数据和插入更新与删除操作— — 该数据库系统不仅要支持数据行的访
问还要支持数据和的插入更新和删除操作
8 数据和物理独立性— — 当数据在物理存储结构上发生变化时应用程序在逻辑上不应
受到影响
9 数据的逻辑独立性— — 当改变表的结构时应用程序在最大程度上不受影响
10 有效性独立— — 数据库的语言必须有定义数据完整性规则的能力数据应即时存
储在线目录而且在处理时必须通过这一五一节
11 发布的独立性— — 当数据第一次发布或当它重新发布时应用程序应不受影响
12 任何程序不可能使用更低级的语言从而绕过数据库语言的有效性规则定义
大多数数据库具有父/子关系这就是说在父结点中保存有子结点的文件指针见下
图
SQL 21 日自学通(V1.0) 翻译人笨猪
EMAIL wyhsillypig@163.com 21
这种方式有优点也有缺点它的好处在于它使得数据在磁盘上的物理存储结构变得不
再重要编程人员只需存储下一个文件的指针就可以实现对下一个文件的访问而且数据
的添加和删除操作也变得非常容易可是不同组的信息想要联合为一个新组就变得困难了
这是因为在这种方式下数据在磁盘上的存储格式不能在数据库建立以后再强制性地改变
如果需要这样做那就必须重新建立一个数据库结构
Codd's 的关系型数据库思想借用的逻辑代数的思想使得数据的子集与父级之间具有
平等的地位
由于信息可以很自然地组织在不同的表格中Dr. Codd 也以这种方式来组织他所提出
的数据库在关系模式下数据被存入类似于表格的结构中这种表格由独立的数据元组
被称为列或字段所组合而成一组数据信息被存储为一行举例来说创建一个包括
雇员内容的关系型数据库我们可以很容易地从雇员表开始而像这样的表在很容易得到
的该表中包含有如下信息姓名年龄职业这三项数据用作雇员表的字段整个表
如下图所示
姓名年龄职业
Will Williams 25 Electrical Engineer
Dave Davidson 34 Museum Curator
Jan Janis 42 Chef
Bill Jackson 19 Student
Don DeMarco 32 Game programmer
SQL 21 日自学通(V1.0) 翻译人笨猪
EMAIL wyhsillypig@163.com 22
Becky Boudreaux 25 Model
在这个表中有六行记录为了从中找到特定的记录举例来说Dave Davidson 用
户可以望知数据库管理系统在数据库中检索满足条件姓名= Dave Davidson 的记录
如果数据库管理系统已经检索过了全部的数据那么它将会把满足条件的的姓名年龄
职业三项的记录返回给用户SQL 会通知DBMS 找什么样的数据这一检索过程的SQL
例句如下
SELECT * FROM EMPLOYEE
在这里不要刻意去记它的语句我们在明天将会对它进行更为详细的讨论
由于通过明显的关系可以特不同的数据项归结在一起比如雇员的姓名和雇员的年
龄所以关系性数据库管理系统对如何来描述数据之间的关系给出了相当大的弹性通过
精确的的连接和联合运算关系型数据库管理系统可以非常迅速地从不同的表中将所需要
的数据联合见联合运算图然后返回给用户或程序这种联合的特性允许数据库的设计
者将数据信息存储在不同的表中以减少数据的冗余度
右图则反映了相交运算相交运算地意思就是取出两个或多个库所共有的部分
这里有一个简单的例子来显示数据是如何进行逻辑处理的表1-2 是一个被称为报
告的表它的里边有两个字段姓名和工作
Name Duties
Becky Boudreaux Smile
Becky Boudreaux Walk
Bill Jackson Study
Bill Jackson Interview for jobs
在雇员数据库中的年龄和职业字段在每一个记录中均出现重复是不合适的而且随着
时间的进行这些冗余的数据将会占用大量的磁盘空间且使得数据库管理系统在检索数据
表A 表B
联合运算
表A 表B
相交运算
SQL 21 日自学通(V1.0) 翻译人笨猪
EMAIL wyhsillypig@163.com 23
所耗用的时间增多可是如果你将姓名和工作另存到一个名字叫报告的库中以后
你就可以通过联合操作将报告与雇员通过姓名字段进行联合操作也就是通知RDBMS
将报告与雇员库中姓名与Becky Boudreaux 相同的记录显示出来其结果将如下
所示
Name Age Occupation Duties
Becky Boudreaux 25 Model Smile
Becky Boudreaux 25 Model Walk
关于联合运算的详细讲述将在第6 天的库的联合中讲述
设计数据库的结构
在数据库的设计师已经决定了系统的硬件平台和RDBMS 系统以后余下事情中最为
重要的就是如何来设计数据库的结构了数据库的结构将会影响到是后运行于该库上的应
用程序的性能这个决定数据库的分配情况及联合运算的过程称之为标准化
数据库的前景
电脑技术将对今天世办上的商业产生深远的影响鼠标只要点一下就可以将数据入库
或对其进行访问制造商的国外订货单可以立即接受并执行尽管在20 年以前信息的交换
还需要大型机的支持而办公领域处理事务也仍在采用批处理的方式要完成某一个查询
用户需要将需求提交给服务器上的信息管理系统MIS 给果将会以最快的速度返回给用
户尽管经常不是足够快
此外随着关系型数据库模型的发展有两种技术被引用到了在今天被称为服务器/客
户机的数据库系统当中第一项技术就是个人电脑廉价而又易用的应用程序如Lotus1-2-
3 和WordPerfect 允许员工或家庭用户可以建立文档来快速而准确地处理数据用户也
会经常升级他们的系统以使其速度更快巧的是这时的系统的价格却在迅速下跌
第二项技术则是局域网的发展它导致的世界范围内的办公交叉— — 虽然用户习惯于
采用终端同主机相连在今天一个字处理文档可以存储在本地而被任何连接到网络上的
电脑访问然后苹果的Macintosh 电脑为大家提供了一个友好易用的图形用户界面使得
电脑变得物美价廉此外他们可以访问远程站点并从服务器上下传大量的数据
在这个飞速发展的时期一种新型的叫作服务器/客户机的系统诞生了这种系统的处
理过程被分解上了客户机和数据服务器上新型的应用程序取代了基于主机的应用程序
这一体系有着相当多的优点
l 降低了维护费用
l 减轻的网路负荷处理过程在服务器上和客户机上均有
l 多个操作系统可以基于相同了网络协议来共同工作
l 本地化的数据操作提高了数据的完整性
对于什么是客户机/服务器型电脑系统Bernard H. Boar 的定义如下
客房机/服务器系统就是把单一的任务分解到多个处理器上进行协同处理,就像在单个
处理器上运行时一样一个完备的客户机/服务器系统可以将多个处理器捆绑在一起
以提供一个单一系统虚拟环境共享的资源可以被位于远端的客户机通过特殊的服
务来访问这种结构可以逐级递归所以一级服务器可以在最后转变为客户机进需
要求其他的服务器提供服务就这样一直下去
这种类型的应用程序在设计时需要全新的程序设计技巧今天的用户界面都是图形用
户界面不论是微软的WINDOWS 苹果的MACINTOSH IBM 的OS/2 还是UNIX 的Xwindows
系统均是如此用过使用SQL 和网络应用程序就可以访问位于远端服务器上的
数据库个人电脑处理能力的提高可以对存放在一系统相关的服务器的数据库作出评定
而这此服务器是可以更换的而应用程序则只需做出较少的改动甚至无需改动
交互式语言
本书在许多场合下可以借用BASIC 的概念举例来说Microsoft Access 是基于windows
的单用房应用程序而SQL SEVER 则可以允许100 个用户同时工作SQL 的最大优越性在
于它是一种真正的跨平台的交互式语言由于它可以被程序员在第四代的编程语言中调用
第四代编程语言可以做用少量的代码做大量的工作
易于实现
ORACLE 公司是第一个发行基本于SQL 的关系型数据库管理系统RDBMS 的公司
虽然它是为VAX/VMS 系统开发的ORACLE 公司也是DOS 下的关系型数据库的供应商
之一ORACLE 现在可以运行在近70 种平台之上在八十年代中期Sybase 公司发行了
他们的RDBMS — — SQL Sever 具有客户端数据库访问功能并支持过程存储将在第14 天
的动态应用SQL 中提到和多平台交互工作能力SQL Sever 作为一个成功的产品其客
户机/服务器工作能力是其最为突出的优势所在这个强大的数据库系统具有极高的平台适
应性用C 语言写成的运行于PC 机的ORACLE 其实是运行于VAX 系统上的ORACLE 的
复制
SQL 与客户机/服务器应用程序开发环境
在使用客户机/服务器电脑来开发客户机/服务器应用程序时SQL 和关系型数据库的思
想遍及始终在单用户系统中使用这种技术也可以使您的程序更适应未来的发展
SQL 总览
SQL 是操作和检索关系型数据库的事实上的标准语言它允许程序员和数据库管理员
做如下的工作
l 更改数据库的结构
l 更改系统的安全设置
l 增加用户对数据库或表的许可权限
l 在数据库中检索需要的信息
l 对数据库的信息进行更新
注对于SQL 大家可能还不明白S 即Structured 结构L 即Language 语言这是显
而易见的但是Q 的意思容易让人误解Q 的意思当然是Query 查询— — 如果你
直译的话可是这只限于你对数据库提问但是SQL 能干的不只是查询通过它你可
以建立一个库添加和删除数据对数据作联合当数据库改变时触发动作并把你
的查询存储在程序或数据库中
不幸得很这对于查询来说似乎是一个缺点显然库结构的增加删除修改联
合存储触发以及查询语言在多用户协同工作时有点烦琐我们将会在工作中一直与SQL
打交道不过现在你应该知道它的功能不只是限于它的名字所指的内容了