本书是一本Oracle SQL的入门教材,它适合于初级到中级的读者。本书使用生动而简单的生活中的例子来解释复杂的计算机和数据库概念,避免用计算机的例子来解释计算机和数据库的概念。读者可以在没有任何计算机专业知识的情况下从头开始阅读此书。\r\n 本书是一本Oracle SQL的实用教材。虽然它覆盖了OCP(Oracle认证专家)这部分考试的几乎全部内容,但重点放在实际工作能力的训练。因此本书中的每章都附有大量的例题,而且每道题都给出了答案。为了帮助读者理解,许多概念和例题都给出了商业应用背景,很多例题可以不加修改或略加修改后应用于实际工作中。本书中的绝大多数例题都可以在Oracle8或以上版本上运行。
导读\r\n第1章 简单查询语句\r\n 1.1 最简单的查询语句\r\n 1.2 在查询语句中如何选择特定的列\r\n 1.3 如何书写查询语句\r\n 1.4 列标题和数据的默认显示格式\r\n 1.5 如何在SQL语句中使用算术表达式\r\n 1.6 怎样在SQL语句中使用列的别名\r\n 1.7 连接运算符\r\n 1.8 DISTINCT运算符\r\n 1.9 基本查询语句的格式\r\n 1.10 应该掌握的内容\r\n第2章 限制性查询和数据的排序 \r\n 2.1 如何限制所选择的数据行\r\n 2.2 比较运算符(operators)\r\n 2.3 如何使用BETWEEN AND比较运算符(operators)\r\n 2.4 在SQL语句中使用字符串和日期\r\n 2.5 使用IN比较运算符(operators)\r\n 2.6 使用LIKE比较运算符(operators)\r\n 2.7 如何使用转义(escape)操作符\r\n 2.8 ORDER BY子句\r\n 2.9 在ORDER BY子句中使用别名或表达式\r\n 2.10 在ORDER BY子句中使用列号\r\n 2.11 在ORDER BY子句中使用多列\r\n 2.12 在ORDER BY子句中使用在SELECT列表中没有的列\r\n 2.13 扩充后的查询语句的格式\r\n 2.14 应该掌握的内容 \r\n第3章 常用的SQL*PLUS命令 \r\n 3.1 DESC[RIBE]命令\r\n 3.2 SET LINE[SIZE{80|n}命令\r\n 3.3 L(LIST)命令和n text\r\n 3.4 ‘/’(RUN)命令\r\n 3.5 n(设置当前行)命令和A[PPEND](附加)命令\r\n 3.6 del命令\r\n 3.7 C[HANGE]命令\r\n 3.8 如何生成脚本文件\r\n 3.9 如何编辑脚本文件\r\n 3.10 如何直接运行脚本文件\r\n 3.11 SPOOL命令\r\n 3.12 应该掌握的内容 \r\n第4章 单行函数 \r\n 4.1 什么是函数\r\n 4.2 单行函数简介\r\n 4.3 单行字符型函数\r\n 4.4 使用单行字符型函数的实例\r\n 4.5 数字型函数\r\n 4.6 日期型数据的处理\r\n 4.7 日期函数\r\n 4.8 ROUND和TRUNC函数用于日期型数据\r\n 4.9 不同数据类型之间的隐含转换\r\n 4.10 不同数据类型之间的显示转换\r\n 4.11 应该掌握的内容 \r\n第5章 NULL值的处理、逻辑操作和函数嵌套 \r\n 5.1 什么是空值(NULL)\r\n 5.2 含有空值(NULL)的表达式的运算\r\n 5.3 空值(NULL)的排序\r\n 5.4 逻辑表达式和逻辑运算符\r\n 5.5 运算符的优先级\r\n 5.6 用AND和OR替代BETWEEN AND和IN运算符\r\n 5.7 NVL函数\r\n 5.8 DECODE函数\r\n 5.9 单值函数的嵌套\r\n 5.10 Oracle9i新增加的单值函数和表达式\r\n 5.11 应该掌握的内容 \r\n第6章 综合数据和分组函数 \r\n 6.1 五个常用的分组函数\r\n 6.2 COUNT函数\r\n 6.3 AVE和SUM函数\r\n 6.4 MIN和MAX函数\r\n 6.5 GROUP BY子句的应用\r\n 6.6 改变GROUP BY子句的排序次序\r\n 6.7 GROUP BY子句的特殊用法\r\n 6.8 分组函数与GROUP BY子句的非法操作\r\n 6.9 HAVING子句的使用\r\n 6.10 分组函数的嵌套\r\n 6.11 分组函数的空值问题\r\n 6.12 NVL函数在分组函数中的使用\r\n 6.13 是否在分组函数中使用NVL函数的商业背景\r\n 6.14 其他的分组函数和分组函数的小结\r\n 6.15 应该掌握的内容 \r\n第7章 多表查询 \r\n 7.1 数据库的规范化(Normalization)\r\n 7.2 主键(Primary Key)和实体完整性(Entity Integrity)\r\n 7.3 第一范式(1NF)\r\n 7.4 消除部分依赖\r\n 7.5 外键(Foreign Key)和引用完整性(Referential Integrity)\r\n 7.6 第二范式(2NF)\r\n 7.7 第三范式(3NF)\r\n 7.8 规范化过程小结\r\n 7.9 多表连接\r\n 7.10 相等连接\r\n 7.11 连接中表别名的使用\r\n 7.12 笛卡尔乘积(乘积连接)\r\n 7.13 自连接(Selfjoin)\r\n 7.14 两个以上的表的连接\r\n 7.15 不等连接\r\n 7.16 外连接\r\n 7.17 SQL:1999语法的连接\r\n 7.18 SQL:1999语法的自然连接\r\n 7.19 使用USING子句的连接\r\n 7.20 使用ON子句的连接\r\n 7.21 使用ON子句的多表连接和附加条件\r\n 7.22 左外连接\r\n 7.23 右外连接\r\n 7.24 全外连接\r\n 7.25 应该掌握的内容 \r\n第8章 子查询 \r\n 8.1 为什么引入单行子查询\r\n 8.2 WHERE子句中的单行子查询\r\n 8.3 HAVING子句中的单行子查询\r\n 8.4 FROM子句中的单行子查询\r\n 8.5 多行子查询\r\n 8.6 使用IN操作符的多行子查询\r\n 8.7 使用ALL操作符的多行子查询\r\n 8.8 使用ANY操作符的多行子查询\r\n 8.9 子查询中的空值(NULL)问题\r\n 8.10 多列子查询\r\n 8.11 成对比较(Pairwise Comparison)的多列子查询\r\n 8.12 非成对比较(Nonpairwise Comparison)的多列子查询\r\n 8.13 小结\r\n 8.14 应该掌握的内容 \r\n第9章 控制SQL*PLUS的环境和数据字典简介 \r\n第10章 创建表 \r\n第11章 替代变量 \r\n第12章 数据的维护 \r\n第13章 索引与约束(Indexes and Constraints) \r\n第14章 视图(Views) \r\n第15章 序列号(Sequence)和同义词(Synonym) \r\n第16章 用户管理 \r\n附录 \r\n参考文献 \r\n结束语 \r\n鸣谢
SQL(Structured Query Language)是标准的关系数据库(Relational Database Management Systems)操作语言。它是一种非过程化的第四代高级语言,其语法与英语非常相似。因此它是一种比较容易学习的计算机语言。对初学者几乎没有任何要求,换句话说初学者可以不具备任何计算机的背景。
Oracle是一个适合于大中型企业的数据库管理系统,其市场占有率是所有的数据库管理系统中最高的。它主要的用户为:银行、电信、移动通信、航空、保险、金融、跨国公司、电子商务等。根据WTO的有关协议,我国在以上领域要逐年开放市场,因此,随着这些领域外资的大量涌入,在不远的将来对Oracle数据库管理员和开发人员的需求将急剧地增加。
Oracle SQL是Oracle数据库管理系统上的SQL语言。无论是Oracle数据库管理员(DBA)、开发人员(Developer),还是一般用户,熟练地使用Oracle SQL都是最基本的要求。其实,OCP(Oracle Certified Professional)认证考试将Oracle SQL作为Oracle数据库管理员(DBA)和开发人员(Developer)的第一门必考的课程。
Oracle SQL是美国国家标准化委员会(American National Standards Institute-ANSI)和国际标准化组织(International Standards Organization-ISO)颁布的SQL标准的超集。也就是说,如果读者学会了Oracle SQL,就很容易掌握其他数据库管理系统上的SQL语言。
目前国内已出版的Oracle教材以翻译书为主。许多是瞄准OCP考试的,其内容的编排多是以总复习的形式出现的。这些教材应付OCP考试有用,但不完全适合做培训教材,更不适于自学。Oracle Student Guide (英文)虽然是一套很好的培训教材,但这套书是不外卖的,只有参加Oracle公司培训才能得到,而它的培训费之高是一般人很难负担得起的。
Oracle Student Guide的另一问题是:它的练习题对系统资源要求很高,例如,它要求学生创建的表或表空间常常是以百兆字节为单位。还有它的许多练习题,必须使用Oracle提供的脚本文件才能运行。也就是说,如果不参加Oracle公司的培训,许多练习题学生是很难实现的。
这本书是源于我在新西兰GZ Comtech(NZ)LTD(现为:New Zealand Institute of Science and Technology Ltd-新西兰科学技术学院)从事Oracle数据库管理员(DBA)培训课程的讲稿和为学生编写的上机题。当时为了使学生能有足够的上机练习的机会,我为几乎每一讲都设计了大量的上机练习题。为了使学生能在家里练习这些上机题,每一道题都进行了精心的设计,使其对系统的资源消耗都限制在一般PC机允许的范围(当时的PC机一般硬件配置:CPU 300 MHz左右,内存64MB,硬盘8GB左右)。而且这些上机题完全是自封闭的,即学生不需要任何CD,不需要运行任何脚本文件,除Oracle系统外也不需要安装任何其他的软件。
之后,这些讲稿和上机练习题曾在多个培训机构的多种Oracle培训课程上使用。其中包括:中国计算机软件与技术服务总公司培训中心(北京)、昆仑瑞通高级技术培训中心(北京)、中国UNIX协会、Oracle大学(Etake Technology Inc)等。部分讲稿也在新西兰的Unitec Institute of Technology-新西兰奥克兰技术学院(公立)为大学本科生讲授数据库概论时使用过多次。
从学生和同事们那里得到了大量有益的反馈。许多学生本身就是工作在电信、移动通信和航空等大型企业的数据库管理员或数据库开发人员,他们提出了很多在工作中遇到的实际问题,许多实际问题和它们的解决方案后来也都加到了讲稿或上机题中。一些我做信息系统管理员、分析员、IT顾问中所遇到的实际问题和解决方案也逐步地加到了该讲稿或上机题中。
考虑到参加培训的许多学生正在工作,而且一些学生基本上没有计算机背景,他们或者是没时间或者是没能力来理解难懂而乏味的学术术语,本书使用生动而简单的生活中的例子来解释复杂的计算机和数据库概念,避免用计算机的例子来解释计算机和数据库的概念。由于以上的设计,本书对学生的计算机专业知识几乎是没有任何要求。对以前培训的学生的跟踪表明,这样的设计是合理的。
许多概念和例题都给出了商业应用背景。许多例题是用场景或故事的形式出现的。不少例题和它们的解决方案是企业中的数据库管理员或数据库开发人员在实际工作中经常遇到或可能遇到的。因此,很多例题可以不加修改或略加修改后应用于实际工作中。
本书的内容和例题设计由浅入深,为了消除初学者对计算机教材常有的畏惧感,本书把那些难懂而且又不常用的内容尽量放在书的后面章节里或放在附录中,并去掉了个别非常难懂而且一般的Oracle工作人员都很少听到的内容。根据我多年的IT工作和教学经验,一个人在某个系统中所使用的功能是很少的,相信还不到一半。因为绝大多数难懂的操作可以通过其他操作的组合来实现。因此,没有必要为了解释清楚5%非常难懂的内容吓跑了95%的读者。
本书是一本Oracle SQL的实用教材。虽然它覆盖了OCP这部分考试的几乎全部内容,但重点放在实际工作能力的训练。该书全面而详细地介绍了关系数据库(Relational Database Management Systems)的标准操作语言,SQL(Structured Query Language)语言。它包括了数据查询语言、DML(数据操作语言)、DDL(数据定义语言)、DCL(数据控制语言)和事务处理。该书也详细地介绍了常用的SQL函数,及Oracle8i和Oracle9i所提供的一些高级功能。
在刚开始写这本书时,我曾经想为读者构造一个小型的订单系统并以光盘的形式随书分发给读者。但是经过了仔细地权衡利弊之后终于打消了这个念头。因为如果这样做的话,就要求读者在开始做练习之前先学会安装光盘的内容,这样势必增加读者开始学习的难度。考虑到不少读者可能是初学者这-事实,最后还是决定在开始时使用Oracle系统自带的几个表。而随着学习的深入,再教读者们自己构造一些所需要的表和其他的对象。
因为学习这门课的许多人可能是第一次接触Oracle,对如何设置Oracle的环境是一无所知,因此在计算机上配置Oracle的运行环境的操作越简单越好。这正是本书为什么选用在Windows环境下运行Oracle数据库管理系统的主要原因。因为Windows环境下运行的Oracle数据库管理系统可能是最容易安装的一种。
选用Windows作为学习环境的另一个原因是学习的成本。因为Windows是一个相对很便宜的操作系统,而且它很容易得到。绝大多数人对这一操作系统都有所了解,因此在学习Oracle之前不需要再学习操作系统了。
因为Oracle数据库管理系统是独立于任何IT平台的,所以当您在一个操作系统上学会了Oracle的SQL语言使用之后,您就可以在任何操作系统上使用Oracle的SQL了。您也可以把SQL语句或脚本文件几乎不做任何修改地从一个操作系统移植到另一个操作系统上。另外,许多大型的Oracle数据库系统,尽管它们的服务器是安装在Unix或其他的操作系统上,但是用户的前台终端还是使用Windows操作系统。
本书的每一章中都配有大量的例题。从我的工作和教学实践中得来的经验表明:通过自己亲自上机作练习是一种很好的学习方法。这样做往往比只看书效果好。数据库是一门实践性很强的课程,只有通过大量的上机操作实践(练习)才能悟出SQL语言的真谛,才能上到一个新的层次。正像毛主席说的那样:"要在游泳中学会游泳。"如果不跳到水中就永远学不会游泳,如果不坐在计算机前真正地操作Oracle数据库系统,是很难真的学会使用Oracle数据库系统。因此建议,如果读者有条件的话,最好把本书中的例题在自己的计算机上重做一遍或多遍。
本书中几乎每一道例题都给出了显示结果。其目的有两个。第一,当读者重做例题后,这个显示结果可以帮助读者检查所做的是否正确。第二,如果读者手头很紧,根本就没有能力买一台计算机的话,这些显示结果可以帮助读者更好地理解书中的内容。
当阅读本书时,会发现本书没有指定的练习题。这是因为每一章有很多例题的缘故。读者只要把这些例题重做一两遍也就达到了练习的目的。另外,本书在每章的结尾处并未给出思考题,而使用了"您应该掌握的内容"这样的句子。其实与思考题差不多。之所以没有使用思考题这个词是为了避免束缚读者的想象力。使用"您应该掌握的内容"这样比较宽松的句子的好处是:当思考所列出的内容时只要已经理解了它们就可以了,至于如何解释和回答它们已经变得不重要了。
在我的教学实践中经常遇到这样的情况:有的学生看到书中的讨论或解释时就觉得很吃力,有时甚至想睡觉,但是上机做练习时他们马上就精神起来,而且做得还挺好。如果这种情况有时也适合您的话,请不用担心,只要能理解书中所介绍的内容就达到了目的。至于是通过上机做练习还是通过阅读书中的解释学会的并不重要。还是那句话:"不管白猫黑猫,抓住老鼠就是好猫"。科学已经证明:文字作为一种交流的工具,它的承载能力要比声音和图像小。这可能也是为什么提倡多媒体教学的原因之一吧!所以当您看书时,有些内容看一遍看不懂是很正常的。
如果真的有一段的内容看了几遍都不能完全理解,您也用不着害怕,可以先把这段的内容放过去,继续下面的学习。因为本书的编排不是严格的一环扣一环的。等看完了几章之后,回过头来再看这段的内容可能就比较容易理解了。
书作为一种古老的单向交流工具,它的承载能力是很有限的,因此产生二义性几乎是不可避免的。为了减少二义性的产生,我曾把本书中许多章的初稿分别发给了多个培训机构的学生们,并根据他们阅读后反馈回来的意见对相关的章节做了相应的修改。其中有些章节几乎是全部重写。尽管作了这些努力,但也很难保证该书像武侠或爱情小说那样容易理解,因为它毕竟不是一本消遣的书。
记得我在做硕士论文时,我的导师一再嘱咐在论文中要避免使用第一人称(我)和第二人称(您),要尽量避免口语化,最好使用被动语态。我在写论文时确实是那样做的。不是我喜欢,因为不那样做就可能毕不了业。
但是这本书却使用了不少口语,因为这本书的读者不少是初学者而不是专家。使用口语的目的主要是为了减少初学者学习的难度。本书在解释SQL语句或概念时没有追求学术上的完美,而只是给出了实用的解释。在本书中甚至几乎没有使用语法这个词。
在本书中有不少虚构的故事,在这些故事中使用了不少夸张性的语言。其目的只是增加读者的兴趣。因为我深知看有用的书时多数人都很容易产生睡意,使用这些夸张性的语言可能会使读者在阅读时不至于睡着了。
本书中使用的"您"并不是指读者。这样的写法是想让读者在阅读此书时尽量地投入。读者可以把书中所讲的故事看成一出戏,而您正是这出戏中的一个主角。这样或许对您理解书中所介绍的内容会有所帮助。书中常提到的"您的老板","您的经理"和"您的上司"等都不是现实中的人。相信现实中的他们可能都是大好人、大善人、灰衣天使、黑衣天使……
许多人认为学习IT,特别是学习Oracle数据库管理系统是一件既枯燥又令人生畏的事。一些人即使下了决心去学Oracle,他们可能用几个月的时间拼命地学完了Oracle公司所要求的课程并通过了考试,在这一段时间里没有什么娱乐。等拿到证书后就把所有的书都丢到一边,痛痛快快地放松一下一直绷紧的神经。
希望这本书的写法能在枯燥的Oracle学习与娱乐之间达到某种程度的平衡,从而不至于使读者在整个的学习过程中神经一直绷得很紧。
参加应试培训可能出现的另一个问题是:有些学生拿到了证书之后还不能进行熟练地上机操作。有的培训中心的课程基本上只进行应试培训,只教学生如何做考题。这样,学生的动手能力就比较差,在应聘或面对实际工作时就将处在一种不利的位子。因为没有哪个公司愿意请一个只会说而不会千的人,最后检验学生能力的还是市场而不是考场。
这本书对以上的这些人会有很大的帮助。因为这本书的重点是放在了能力的培养,即教您怎样干活的。一个人既会说又会干一定是市场上最需要的人才。
本书既可作为企业或培训机构的Oracle SQL课程的培训教材也可作为自学教材。
这本书的目的有3个:
把那些没有计算机或Oracle背景但想加入IT产业的人带入Oracle这个就业市场中来。
为那些有计算机或Oracle经验但没受过Oracle正规培训的人提供一套系统而完整的Oracle培训教材。
为那些非计算机人员,如管理或行政人员,了解和使用Oracle提供一套完整易学的培训教材。
本书中的绝大多数例题都分别在Oracle的8.0.4,8.0.5,8.1.5和8.1.7等版本上测试过。最后,所有的例题都在Oracle的9.0.1版本上测试过。所以对您所使用的Oracle版本几乎没什么要求。
如果您需要安装Oracle数据库管理系统,可以参考本书的附录。另外,如果这是您第一次使用SQL*PLUS,或Oracle数据库管理系统,或您并不熟悉Oracle数据库系统的一些术语和约定的话,也应该先阅读一下本书的附录。
如果读者对本书有任何意见或要求,欢迎来信提出。我的电子邮箱为:
sql_minghe@yahoo.com.cn
最后,预祝读者Oracle SQL的学习之旅轻松而愉快!