Oracle数据库管理与开发(套装共2册)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-11 04:43:51

点击下载

作者:何明

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Oracle数据库管理与开发(套装共2册)

Oracle数据库管理与开发(套装共2册)试读:

前言

Preface

这本书的习题绝大部分是OCP试题。

这本补充教材不仅给出了原教材——《Oracle数据库管理与开发(适用于OCP认证)》每一道题的答案,而且还对解题的步骤进行了详细的解释,并在解题过程中给出了求解所需要的知识和技巧。为了方便读者复习,还标明了这些知识所在的章节。有一些题还给出了不同的解法,如上机直接操作或使用帮助信息等。

书中的练习题都是精心设计的,其目的是帮助读者从不同的角度来进一步加深对所学内容的理解和掌握,因为书中所介绍的许多知识可能将会伴随读者IT职业生涯的很多年,甚至是一生。

为了进一步强化读者对原教材中知识的深入理解,本习题集还设计了大量的补充练习题。与原教材中的练习题一样,这些补充练习题也给出了详细的解答过程并标明了所需知识的出处。这些补充练习题将从更宽广的视角来强化读者所学过的知识。另外,本习题集还对原教材中的个别内容做了进一步的解释,以扩充读者在Oracle方面的知识。

通过这样大量的训练之后,相信读者的Oracle水平应该能够达到甚至超过国内许多Oracle培训机构培训出来的学生的水平。

通过做大量不同类型的习题,读者可以从不同的角度和高度重新思考学习过的知识。在一些习题中,要正确地回答一个问题可能需要结合几个不同章节的知识,而且往往要求读者对相关的知识理解之后才能给出正确的答案,这无疑会提高读者综合运用Oracle知识的水平。

对于一些比较复杂、乍一看无从下手的难题,运用已经掌握的知识抽丝剥茧、一步一步地进行分析,读者就会发现实际上解决这些问题所需的知识都是书中已经介绍过的,只不过将不同章节的知识进行了组合并将书中的内容换了一种陈述方法而已。只要读者真正理解了书中所讲述的内容(当然还要记住),再经过一些训练,正确地回答这些问题就不会有什么障碍。等您知道了最终的答案时,往往会发现其实解题所用的知识多数是比较简单的,只不过自己当时没有想到而已。

为了方便老师对学生进行测验,本书的网站www.tup.com.cn,,包含了全部的练习题和补充练习题,老师们可登录该网站,找到本书的页面后下载,这样主讲老师就可以根据实际的教学进度和教学要求便捷地重新组合和生成考试或测验的题目。为了帮助有兴趣参加OCP或OCA考试的读者,本书还适度地介绍了一些在OCP或OCA考试中可能用到的解题技巧。

通过解答大量的习题,不仅能够提高您的Oracle水平,而且能让您在面对真正的OCP考试时更加自信、更加从容。更重要的是可以为您将来应对实际工作打下坚实的基础,因为在管理和维护实际的商业或生产数据库系统时,如果数据库出了问题,负责管理和维护数据库的人员必须在最短的时间内发现并解决问题以便数据库系统尽快恢复到正常状态。要知道对于真正的商业或生产数据库系统来说,数据库系统对外停止服务每多一分钟(甚至几秒钟),公司的损失就会越大。此时,谁能在最短的时间让系统恢复正常,谁就最牛。

在现实的工作环境中,当系统出现问题时,只要没有时间限制,很多人往往都能解决问题。而真正的商业或生产数据库系统给管理和维护人员解决问题的时间非常短,而且最好是立即解决。在这样一个弱肉强食的工作环境中,那些弱者(用很长时间才能解决问题的人)会被渐渐地淘汰。强者并不是天生的,是通过后天的不断学习和锻炼成长起来的。通过本教材大量的系统训练,相信您最终一定会成为Oracle方面的强者,在这残酷的竞争环境中生存下来(找到一个相对稳定的工作),之后拥有自己的领地(当上一官半职),最后繁衍生息(有了自己的徒子徒孙)。

研究科学技术发展史的专家和学者们发现了一个令人深思的现象,就是许多历史上失传的设计或技术,研究者们怎么也想不出古人是如何设计或制造的,但是当新的考古发现摆在他们面前时,他们常常感到震撼,因为古人使用的几乎都是他们没想到却是最简单的设计或技术。

其实,解决Oracle数据库系统的问题,您也可以沿用这一最有效的模式,即当Oracle系统出问题时,首先从最简单的解决方案下手。不过,这就需要您把那些看上去简单但是可能会经常使用的知识和技术理解透并能够熟练地应用。其实,在实际工作中,真正特别难的问题并不多,如果您能解决绝大多数貌似复杂但实际上比较简单的问题,您就可以在公司或单位中站住脚了。偶尔有一个难题解决不了,老板或上司也不会怪罪您的,因为许多公司和单位后面还有IT服务公司或IT顾问公司呢!您把问题都解决了,人家该怎么活呀?工作经验的积累需要时间,它存在一个过程,您只要能在公司或单位立足,就赢得了积累工作经验所需的时间和机会。剩下的就靠自己的努力和运气了,最起码可以解决自己的温饱问题了。先活下来,之后才能谈如何更好地发展、完善自己。

参与本书编写和资料整理的有何明、何茜颖、王莹、万妍、王逸舟、牛晨、王威、程玉萍、万群柱、王静、范萍英、黄力克、王超英、万洪英、范秀英、万节柱、王洁英、万如更、李菊、万民柱、王莉、万晓轩、赵菁、张民生和杜蘅等,在此对他们辛勤而出色的工作表示衷心的感谢。

如果您对本书有任何意见或要求,欢迎来信提出。我们的电子邮箱为sql_minghe@yahoo.com.cn,sql_minghe@aliyun.com,liulm75@163.com。最后,预祝所有读者的Oracle学习之旅轻松而愉快!编 者关于Oracle OCP认证

Oracle DBA认证分为三个级别,以Oracle 11g为例,Oracle 11g DBA认证体系结构如下:认证种考试代需要参加培训的相关课程类码Oracle Database 11g: SQL Fundamentals IOCA1Z0-051Oracle Database 11g: Administration I1Z0-052Oracle Database 11g: Administration IIOCP1Z0-05311GOCOracle Database 11g Certified Master ExamOCMM

OCP是Oracle Certified Professional(Oracle数据库认证专家)的缩写。OCP认证是Oracle公司的Oracle公司认证中有关数据库DBA(Database Administrator数据库管理员)方面的认证。通过这个考试,一般表明具备管理大型数据库,或者能够开发可以部署到整个企业的强大应用的能力。

Oracle 11g OCP培训课程主要内容有:

Oracle Database 11g: SQL Fundamentals I(SQL基础I)

Oracle Database 11g: Administration Workshop I(管理课程练习I)

Oracle Database 11g: Administration Workshop II(管理课程练习II)

有关Oracle更详细的信息,请登录www.oracle.com.cn查询。  第1章 简单查询、限制性查询和数据的排序练习题和解答

1. ACCOUNT表包括了如下的列:ACCOUNT_INUMBER(12)DNEW_BALANUMBER(7,2)NCEPREV_BALANUMBER(7,2)NCEFINANCE_CNUMBER(7,2)HARGE

如果要用最简单的方法显示ACCOUNT表中所有的记录,则应该使用以下哪个查询语句?

A. SELECT * FROM account;

B. SELECT any FROM account;

C. SELECT all FROM account;

D. SELECT account_id, new_balance,

prev_balance ,finance_charge FROM account;

练习题解释:这一题主要是测试对*和投影操作的理解。在查询语句中*表示所有的列,只要理解了*的用法,就可以确定答案是选项A。而在Select列表中并未包括any和all,有关这一点可以参阅本章1.9节中Select语句的定义。由这个定义可知SELECT关键字之后可以跟*,也可以跟Select列表。这个列表可以是列名,也可以是表达式,但是并未包括any和all。

  其实,选项D也可以获取与选项A完全相同的结果,但这一问题要求使用最简单的方法,显然选项A比选项D简单。如果没有选项A,选项D就是正确的答案了。

练习题的答案是:A。

2. TEACHER表包括了如下的列:NUMBER(9)Primary KeyIDLAST_NAMEVARCHAR2(25)FIRST_NAMEVARCHAR2(25)SUBJECT_IDNUMBER(9)

如果要显示每位老师的全名,同时显示每位老师所负责教授的科目(subject)号,则应该使用以下哪个查询语句?

A. SELECT * FROM teacher;

B. SELECT last_name, subject_id FROM account;

C. SELECT last_name, first_name FROM account;

D. SELECT last_name, first_name, subject_id FROM account;

练习题解释:这一题还是测试对*和投影操作的理解,只要理解了*的用法,就可以确定选项A不可能是正确答案,因为在这个查询结果中将包括ID列,而按照题目的要求,这一列是不应该显示的。所以答案只能是选项D,因为在选项B中缺少first_name列,而在选项C中缺少subject_id列。

练习题的答案是:D。

3. EMPLOYEES表包括了如下的列:EMPLOYEE_IDPrimary KeyNUMBERLAST_NAMEVARCHAR2(25)FIRST_NAMEVARCHAR2(25)DEPARTMENT_IDNUMBER(3)VARCHAR2(30)POSITIONMANAGER_IDNUMBERNUMBER(6,2)SALARY

如果使用了如下的查询语句,请问哪个选项是正确的?SELECT DISTINCT department_id, manager_idFROM employees;

A. 某一特定的部门号(DEPARTMENT_ID)只能显示一次

B. 某一特定的经理号(MANAGER_ID)可能显示不止一次(多

次)

C. MANAGER_ID和DEPARTMENT_ID可能会显示不止一次

D. 查询语句将失败,因为DISTINCT关键字只可以使用在单一列

的SELECT列表中

练习题解释:这一题主要是测试对本章1.8节DISTINCT运算符的理解。在本章的例1-20中,读者已经看到了DISTINCT可以作用于多列,而此时显示的结果为每一种列组合只显示一行。因此这一查询语句是MANAGER_ID和DEPARTMENT_ID的每种组合只显示一行(一次),而不是DEPARTMENT_ID只显示一次,所以选项A肯定是错的。而基于同样的理由,选项C也肯定是错的。由于DISTINCT关键字可以作用于多列,所以选项D的“DISTINCT关键字只可以使用在单一列的SELECT列表中”的这一陈述显然是站不住脚的,因此选项D也是错的。由于查询语句是MANAGER_ID和DEPARTMENT_ID的每种组合只显示一行(一次),所以经理号(MANAGER_ID)是可能会显示多次的,即选项B是正确答案。

练习题的答案是:B。

4. 以下是表INVENTORY中的内容:

如果使用如下的SQL语句查询这个库存(INVENTORY)表,哪一个值会第一个显示?id_numberSELECTinventoryFROMprice BETWEEN 5.00 AND 15.00WHEREdescription, manufacturer_id;ORDER BY

A. 25023

B. 25026

C. 32096

D. 45025

练习题解释:这一题首先测试对WHERE子句中使用BETWEEN AND比较运算符(在本章 1.11节中)的理解,其次是测试对ORDER BY子句的理解。Oracle服务器将首先选择出价格(price)在5.00~15.00之间的所有记录,之后按照description和manufacturer_id组合按升序排序——首先按description以升序排序,当description相同时,再按manufacturer_id升序排序。由于在满足WHERE条件的记录中,Cable是description列中的最小值,而这个记录的ID_NUMBER是25023,所以选项A是正确的。要注意的是,在查询的这个表中只有一条记录的description列的值是Cable,所以已经没有必要再考虑manufacturer_id了,否则还要考虑manufacturer_id的排序顺序。

练习题的答案是:A。

5. 在一个SELECT语句中,应该使用WHERE子句来完成以下的哪些工作?

A. 指定INVENTORY表的位置(地址)

B. 将MANUFACTURER_ID的值与897898进行比较

C. 仅显示MANUFACTURER_ID的值

D. 限制SUM(price)函数的输出

练习题解释:这一题主要测试对WHERE子句用法的理解。在本章的1.10节中有关WHERE子句的解释是这样的:WHERE是关键字,其后跟限制条件;而条件是由列名、字符串、算术表达式、常量和比较运算符组成的。理解了这段解释就不难看出选项B是正确的。因为WHERE子句无法指定一个表的位置,所以选项A肯定是错误的。WHERE子句没法限定显示列表中的列,显示特定的列是投影操作(见本章的1.2节),是SELECT子句的工作,而WHERE子句完成的是选择操作(见本章的1.10节),因此选项C不可能是正确答案。WHERE子句不能限制分组函数,如SUM、AVG或MAX等,所以选项D也肯定不是正确答案。

练习题的答案是:B。补充练习题和解答

1. 如果要显示库存超过100的所有产品(product)的产品标识号(id_number),并且想以这样的方式来显示:首先以制造商(manufacturer)的字母顺序,之后按产品号由小到大的顺序,应该使用如下的哪个语句来完成这一工作?注意所有的数据也都存放在练习题4的INVENTORY表中。

补充练习题解释:这一题是测试对WHERE子句和ORDER BY子句的理解。因为SORT BY不是SQL的关键字,所以选项B和选项D肯定不是正确答案。而且在选项C的ORDER BY子句中的id_number之后使用了DESC,这表示要以id_number的降序方式来显示结果,显然与题目的由小到大方式排序的要求不符,所以选项C也不可能是正确的答案。在所有的选项中只有A满足题目的要求。

补充练习题的答案是:A。

2. 想要按如下方式显示INVENTORY表中每个产品的标识号(id_number)和描述(description):(1)产品的价格(price)必须是0.25或8.25。(2)产品必须是在1997年6月10日之前订购的。(3)显示的结果必须按照产品的描述(description)的字母顺序显示。

如果使用以下的SQL查询语句,将可能获得的结果是哪个?注意所有的数据都存放在习题4的INVENTORY表中。id_number, descriptionSELECTinventoryFROMprice IN (8.25, 0.25)WHEREdescription desc;ORDER BY

A. 一个希望的结果

B. 两个希望的结果

C. 全部希望的结果

D. 因为这个语句将不会执行,所以没有结果

E. 虽然这个语句会执行,但是没有所需的结果

补充练习题解释:这一题首先测试对WHERE子句中使用IN比较运算符(在本章1.13节中)的理解,其次测试对ORDER BY子句的理解。通过在查询语句中使用“WHERE price IN (8.25, 0.25)”子句,Oracle返回的查询结果只包括了两行数据——1996年10月11日订购的25027号产品(价格为0.25)和1997年9月11日订购的45025号产品(价格为8.25)。而按照题目的要求产品必须是在1997年6月10日之前订购的,所以只有1996年10月11日订购的25027号产品满足题目的要求,因此选项A是正确的。这里需要指出的是查询语句中的ORDER BY子句并不符合题目的要求,因为按照这个子句显示的结果是按description的降序排序的。

补充练习题的答案是:A。

3. 如要使用一个SELECT语句来显示价格(price)小于5.0的id_number,应使用如下的哪个子句?

A. WHERE price < 5.00

B. HAVING price < 5.00

C. ORDER BY price < 5.00

D. GROUP BY price < 5.00

补充练习题解释:这一题测试对WHERE子句和ORDER BY子句的理解。根据本章1.16~1.18节有关ORDER BY子句的介绍,或根据本章1.19节SELECT语句中的ORDER BY子句的定义,可知ORDER BY关键字之后是不能跟条件表达式的,所以选项C肯定是错的。再根据本章1.9节SELECT语句中的WHERE子句的定义,或本章1.10节有关WHERE子句的介绍,WHERE关键字之后要跟条件表达式,所以选项A是正确的答案。虽然到目前为止还没有介绍HAVING子句和GROUP BY子句的用法,但是利用学过的内容仍然可以断定A是正确选项。

补充练习题的答案是:A。

指点迷津:以上的方法也适用于OCP考试。考试时同样也可能遇到某个或某几个选项不是很清楚,此时如果用已经掌握的知识能够确定出某个选项是正确的答案,选出正确答案就行了,不要在不理解的选项上花过多的时间。

4. 以下是表SERVICE中的内容,如果使用如下的查询语句,哪个MACHINE_ID将最后一个显示?machine_id, service_dateSELECTFROMservicetechnician_id, service_date;ORDER BY

A. 458745

B. 687523

C. 785214

D. 789874

E. 980076

补充练习题解释:这一题测试对ORDER BY子句的理解。根据本章1.16节有关ORDER BY子句的介绍,可以知道ORDER BY子句排序的默认顺序是升序,也就是由小到大。在以上的语句中ORDER BY子句首先是按technician_id由小到大的顺序排序的,但是这里有一个棘手的问题,那就是technician_id列有一个空值。实际上,Oracle在进行升序排序时,空值是放在最后的。虽然到目前为止还没有讲述这一点,但是可以通过下面的实验来验证这一点。

首先,启动SQL*Plus并以SCOTT用户登录Oracle数据库,之后运行如下的查询语句。

注意:一定要使用Order by comm子句,并将显示的结果按佣金(comm)的升序方式来排序。SQL> SELECT ename, job, comm 2 FROM emp 3 Order by comm;ENAMEJOBCOMM------------------------------------------------------------TURNERSALESMAN0ALLENSALESMAN300WARDSALESMAN500MARTINSALESMAN1400SCOTTANALYSTKINGPRESIDENTADAMSCLERK……

以上查询语句的结果清楚地表明comm为空的数据行都排列在显示结果的最后。基于以上的讨论,可以断定technician_id列为空值的那一行记录将显示在结果的最后一行,而这一行的MACHINE_ID为980076,所以选项E是正确答案。

补充练习题的答案是:E。

指点迷津:虽然某些知识没有学过,但是利用已经掌握的知识和技能,通过上机实践,同样可以正确地回答问题并获取新的知识。这也是在实际工作中常用的一种学习方法,因为在实际工作中所遇到的问题千奇百怪,不少问题的解决方法常常在书本上很难找到,是靠自己在实践中寻找来的。其实,答案就在手边。

5. 还是使用上一题中的表SERVICE,如果使用如下的查询语句,第一个显示的是哪一个值?machine_idSELECTFROMservicetechnician_id, service_date;ORDER BY

A. 458745

B. 600252

C. 687523

D. 980076

补充练习题解释:其实,这一题比上一题要简单。该题还是测试对ORDER BY子句的理解。根据本章1.16节有关ORDER BY子句的介绍,已经知道ORDER BY子句排序的默认顺序是升序,也就是由小到大。在以上的语句中,ORDER BY子句首先是按technician_id由小到大的顺序排序的,如果technician_id相同,再按service_date的升序排序,所以technician_id为456123的两行记录为最小,因此在查询结果中排在第一位,而service_date为1997年6月21日的这行记录的machine_id为458745,此值较小,所以正确答案一定是选项A。

补充练习题的答案是:A。

6. 还是使用上一题中的表SERVICE,如果使用如下的SQL语句对数据库进行查询,这个语句在执行时将会失败。要如何修改语句才能纠正这一问题?machine_id "Machine", technician_id "Technician", SELECTservice_date "Last Service Date"FROMserviceWHERE"Machine" > 700000"Technician";ORDER BY

A. 在ORDER BY子句中必须指定ASC或DESC的排序顺序

B. 从WHERE子句中去掉列的别名而使用真正的列名

C. 从ORDER BY子句中去掉列的别名而使用真正的列名

D. 将所有括住的列别名的双引号全部改成单引号

补充练习题解释:这一题测试对WHERE子句的理解。根据本章1.10节有关WHERE子句的介绍,可知WHERE是关键字,其后跟限制条件,而条件是由列名、字符串、算术表达式、常量和比较运算符组成的。根据这一论述,列的别名不能包括在WHERE子句的条件中,所以造成这个SELECT语句执行失败的原因是在WHERE子句的条件中使用了列别名"Machine",因此纠正问题的方法是从WHERE子句中去掉列的别名而使用真正的列名,即选项B是正确的。

在ORDER BY子句中可以不使用ASC或DESC,ORDER BY子句默认的排序是ASC排序,所以选项A是错误的。而根据本章1.19节有关ORDER BY子句的定义,可以知道ORDER BY子句中是允许别名的,所以从ORDER BY子句中去掉列的别名而使用真正的列名这一陈述是错误的,即选项C是不成立的。根据本章1.6节有关别名的解释,如果别名中包含了特殊字符(如中文字符),或想让别名原样显示,要使用双引号把别名括起来。所以,将所有括住的列别名的双引号全部改成单引号也是不成立的,即选项D也是错误的。

补充练习题的答案是:B。

7. 学生(STUDENT)表包括了如下的列定义:NUMBER(9)IDPKLAST_NAMEVARCHAR2(25)FIRST_NAMEVARCHAR2(25)SUBJECT_IDNUMBER(9)

比较以下的两个SQL语句,其结果将有哪些不同?(1DISTINCT subject_id, last_name, first_nameSELECT)FROMstudentORDER 1;BY(2id, last_name, first_name, subject_idSELECT)FROMstudentORDER subject_id;BY

A. 第一个语句的结果将以字母顺序排序,而第二个语句则不是

B. 第一个语句将限制重复的subject_id,而第二个语句则不是

C. 第二个语句将从输出结果中去掉重复行,而第一个语句则不

D. 第一和第二个语句将显示学生(STUDENT)表中一些值的不

同组合

补充练习题解释:这一题测试对DISTINCT、主键(primary key)和ORDER BY子句的理解。根据本章1.18节有关ORDER BY子句的介绍,可知第一个SQL语句中的“ORDER BY 1”子句是对SELECT列表中的第一列subject_id进行升序排序。

根据学生(STUDENT)表中subject_id的定义可知subject_id是数字类型,所以第一个语句只能以数字的顺序排序,而不可能以字母顺序排序,所以选项A肯定是错误的。

由于id是STUDENT表中的主键,按照关系数据库的理论,在关系表中主键必须唯一,所以第二个语句返回的结果中每一行肯定都是唯一的。而由于第一个语句的SELECT列表中使用了DISTINCT关键字,所以这一语句返回的结果的每一行肯定也是唯一的(不同的)。所以选项B和选项C都不可能正确,因为它们各有一个语句的结果不是唯一的。因此,在所有的四个选项中只有选项D才适用于这两个SQL语句。

补充练习题的答案是:D。

8. 下列数据类型中哪种数据类型的默认显示是右对齐?

A. CHAR

B. DATE

C. NUMBER

D. VARCHAR2

补充练习题解释:这一题相对比较简单,它是测试对列标题和数据的默认显示格式的理解。根据本章1.4节有关列标题和数据的默认显示格式的介绍,可知字符和日期型数据为左对齐而数字型数据为右对齐,所以选项C是正确的。

补充习题的答案是:C。

9. ITEM表包含了如下的列:ITEM_IDNUMBER(9)NUMBER(7,2)COSTNUMBER(7,2)RETAIL

其中,RETAIL和COST列的值都大于0。查看以下的两个SQL语句,请问其结果是什么?(1SELEitem_id, (retail * 1.25) + 5.00 - (cost * 1.10) - (cost * .10))CTFROitem;M(2SELEitem_id, retail * 1.25 + 5.00 - cost * 1.10 - cost * .10)CTFROitem;M

A. 第一个语句返回的结果将比第二个语句返回的低

B. 第一和第二个语句将返回相同的结果

C. 第一个语句返回的结果将比第二个语句返回的高

D. 两个语句中只有一个将被执行

补充练习题解释:这一题测试对算术运算符的优先级的熟悉程度。根据本章1.5节中有关算术运算符的优先级的介绍,可知乘法的运算优先级本身就高于加减法,所以在本题中第一个SQL语句与第二个SQL语句中算术运算的优先级是相同的,即括号并未真正改变第一个SQL语句中任何算术表达式的优先级。由于这两个SQL语句中的所有表达式都是相同的(除了括号之外),所以这两个语句返回的结果也将完全相同,因此选项B是正确的。要注意的是这两个语句都是正确的,都可以执行,所以选项D肯定是错的。

补充练习题的答案是:B。

10. 在将投影(projection)操作与选择(selection)操作进行比较时,以下的陈述哪个是正确的?

A. SQL提供了选择的功能,但是SQL没有提供投影的功能

B. 选择是用来考虑(表的)纵向分区的,而投影是用来考虑(表的)横向分区的

C. 选择允许选择一个表中的行,而投影则允许选择一个表中的

D. 选择提供了限制一个查询返回的行数的能力,而投影返回表

中的所有行

补充练习题解释:这一题测试对投影操作和选择操作的理解。根据本章1.2节有关投影操作的介绍可知,在查询语句中选择指定的列的操作就是关系数据库中所称的投影(project),以及本章1.10节有关选择操作的介绍,可知在一个查询语句中,使用WHERE子句来限制哪些行(记录)要显示,这在关系数据库中称为选择(selection)操作。所以,只有选项C是正确的。

选项A中的后半部分,SQL没有提供投影的功能显然是错误的,因为SQL既提供了选择又提供了投影操作,所以选项A是错误的。因为选择常常被看成表的横向分区而投影常常被看成(表的)纵向分区,所以选项B也是错误的。

补充练习题的答案是:C。  第2章 常用的SQL*Plus命令和环境变量练习题和解答

1. DESC[RIBE]命令会显示以下值的哪几个?(选择3个)

A. 表的属主(owner)

B. 列名

C. 表名

D. 列的数据类型

E. NOT NULL列

练习题解释:这一题测试对SQL*Plus命令DESC[RIBE]的理解。根据本章2.1节有关DESC命令的介绍,可知DESC命令是用来显示一个表的结构的,即该表中包含了多少个列,每一列的数据类型和它的最大长度,以及该列是否可以为空(NULL)。在此可以非常轻松地确定只有选项B、D和E满足以上所述,即选项B、D和E为正确答案。

练习题的答案是:B、D和E。

指点迷津:在OCP考试中,多项选择题的选择框是复选框。答这类题时,一定要谨慎,要看清楚问题有几个正确答案,因为无论是多选了还是少选了都是错的,选择的答案数目必须与题目要求完全相同。

2. 下列命令中,哪个是SQL*Plus命令?

A. UPDATE

B. CHANGE

C. SELECT

D. ALTER TABLE

练习题解释:这一题测试对SQL*Plus命令的熟悉程度。如果回顾一下本章所介绍的SQL*Plus命令,就会发现只有CHANGE命令在本章的2.7节中介绍过。如果还不能确定,那么可以复习一下本书第0章的0.5节。在此节的SQL语言介绍中,SQL命令包括了UPDATE、SELECT、和ALTER命令。因此,可以断定只有选项B是正确的。

练习题的答案是:B。

3. 评估如下的SQL*Plus命令:SPOOL dog.lst

这一SQL*Plus命令将产生哪个结果?

A. 它将查询的结果存入DOG.LST文件

B. 它将执行存储在DOG.LST文件中的命令

C. 它将存储在DOG.LST文件中的内容存入SQL缓冲区

D. 它将把DOG.LST文件的输出内容送到系统打印机

练习题解释:这一题测试对SQL*Plus命令SPOOL的理解。根据本章2.11节有关SPOOL命令的介绍,只有选项A是正确答案。执行存放在脚本文件中内容的命令为@或START(参见本章2.10节),而不是SPOOL,所以选项B是错的。将存在DOG.LST文件中的内容存入SQL缓冲区的命令是GET(参见本章2.9节),而不是SPOOL,所以选项C也是错的。SPOOL OUT命令是将屏幕上显示的输出内容送到系统打印机,所以选项D也肯定是错的。

练习题的答案是:A。

4. 请看如下的SQL*Plus命令:COLUMN product_name HEADING 'Product Name' FORMAT A20

这个命令将完成哪些工作?(选择两个正确答案)

A. 它将使PRODUCT_NAME列的标题居中

B. 它将把PRODUCT_NAME列的标题设置为'Product Name'

C. 它将限制PRODUCT_NAME列的标题为20个字符

D. 它将把PRODUCT_NAME列的显示宽度设置为20

E. 它将显示PRODUCT_NAME列的当前设置

练习题解释:这一题测试对SQL*Plus的COLUMN格式化命令的熟悉程度。根据本章2.15节有关COLUMN格式化命令的介绍,完全可以断定选项B和D是正确的。因为在本题的COLUMN命令的选项HEADING之后,并未指定JUS[TIFY],所以按照第1章1.4节列标题和数据的默认显示格式中有关的介绍,可知字符和日期型数据为左对齐,而数字型数据为右对齐,PRODUCT_NAME列的标题不可能居中显示(因为它只能为左或右对齐)。

如果记不住以上内容也没有关系,可以登录SQL*Plus后使用如下的SQL*Plus命令help,轻松地理解为什么选项A是错误的。

SQL> help col COLUMN ------ Specifies display attributes for a given column, such as: - text for the column heading - alignment for the column heading - format for NUMBER data - wrapping of column data Also lists the current display attributes for a single column or all columns. COL[UMN] [{column | expr} [option ...] ] where option represents one of the following clauses: ALI[AS] alias CLE[AR] ENTMAP {ON|OFF} FOLD_A[FTER] FOLD_B[EFORE] FOR[MAT] format HEA[DING] text JUS[TIFY] {L[EFT] | C[ENTER] | R[IGHT]} LIKE {expr | alias} NEWL[INE] NEW_V[ALUE] variable NOPRI[NT] | PRI[NT] NUL[L] text OLD_V[ALUE] variable ON|OFF WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]

也可以通过SQL*Plus连接到SCOTT用户,注意tiger是该用户的密码(最好不要当着其他人的面使用这一方法,因为这样做会使密码泄露的)。

SQL> connect scott/tiger

已连接

之后,使用如下的查询语句获取员工表中属于第20号部门的所有员工的工号、名字和雇员日期。SQL> SELECT empno, ename, hiredate 2 FROM emp 3 WHERE deptno = 20;EMPNO ENAMEHIREDATE------------------ ------------------------------------------------7369 SMITH17-12月-807566 JONES02-4月 -817788 SCOTT19-4月 -877876 ADAMS23-5月 -877902 FORD03-12月-81

接下来,对问题中的SQL*Plus命令略加修改以适应员工(emp)表中的相应列的数据类型,并发出如下的三个SQL*Plus格式化命令:SQL> COLUMN ename HEADING 'Product Name' FORMAT A20SQL> COLUMN empno HEADING 'Product ID' FORMAT 9999999999SQL> COLUMN hiredate HEADING 'Order Date' FORMAT A20

最后,使用SQL*Plus的运行SQL语句命令“/”重新运行SQL缓冲区中的SQL语句。

SQL> /Product ID Product NameOrder Date-------------- ----------------------------------------------------7369 SMITH17-12月-807566 JONES02-4月 -817788 SCOTT19-4月 -877876 ADAMS23-5月 -877902 FORD03-12月-81

从执行以上SQL语句的输出结果可以清楚地看出:与格式化之前的结果比较,在显示结果中除了列标题和列的宽度发生了变化,其他都没有变,所以选项A肯定是错误的。因为COLUMN格式化命令限制的是列的显示宽度而不是列标题的宽度,所以选项C肯定是错误的。因为显示PRODUCT_NAME列的当前设置的命令是COLUMN product_name,列名product_name后面不能跟任何东西,所以选项E也是错误的。

练习题的答案是:B和D。

5. 请问SQL*Plus命令“SET LINESIZE 68”将完成以下的哪项工作?

A. 将每页所输出行数指定为68

B. 将LONG值的最大显示宽度设置为68

C. 将报告的每行设置为68个字符

D. 将一个查询所返回的最大记录数设置为68

练习题解释:这一题是测试对SQL*Plus的SET LINE[SIZE]命令用法的熟悉程度。根据本章2.2节有关SQL*Plus命令SET LINE[SIZE] {80| n}的介绍,完全可以断定选项C是正确的。

根据本章2.14节的有关介绍,可以知道设置每页所输出行数的命令为SET PAGE[SIZE] { 24|n };设置LONG值的最大显示宽度的命令为SET LONG { 80|n };设置一个查询所返回的最大记录数的命令为SET ARRAY[SIZE] { 20|n },所以选项A、B和D肯定都是错误的。

练习题的答案是:C。补充练习题和解答

1. 请问“START superdog”这个SQL*Plus命令将完成以下的哪项工作?

A. 它将执行SUPERDOG函数

B. 它将执行SUPERDOG过程

C. 它将运行SUPERDOG.SQL脚本文件

D. 它将使用默认扩展名创建SUPERDOG文件

E. 它将调用编辑器编辑SUPERDOG文件的内容

补充练习题解释:这一题是测试对在SQL*Plus中直接运行脚本文件方法的熟悉程度。根据本章2.10节有关在SQL*Plus中如何直接运行脚本文件的介绍,完全可以断定选项C是正确的。因为SQL*Plus的START命令只能运行Oracle的脚本文件,所以选项A和B肯定是错误的。根据本章2.8节有关在SQL*Plus中如何生成脚本文件的介绍,可以知道创建脚本文件的SQL*Plus命令是SAVE,所以选项D也肯定是错误的。根据本章2.9节有关在SQL*Plus中如何编辑脚本文件的介绍,可以知道编辑脚本文件的SQL*Plus命令是EDIT(ED),所以选项E也肯定是错误的。

补充练习题的答案是:C。

2. 在SQL缓冲区中存储了一个包含五行正文的命令(SQL语句),此时,您在SQL提示符处发出了这样的SQL*Plus命令:DEL 2 3

请问当前SQL缓冲区中的状态如何?

A. 缓冲区已经清空

B. 缓冲区中存放两行的正文

C. 缓冲区中存放五行的正文

D. 缓冲区中存放三行的正文

E. 缓冲区中存放着DEL 2 3命令

补充练习题解释:这一题是测试对SQL*Plus的DEL命令用法的熟悉程度。根据本章2.6节有关SQL*Plus命令DEL的介绍,我们知道DEL 2 3命令删除了SQL缓冲区中的第2~3行正文,即一共删除了2行,而在SQL缓冲区中原来一共有5行,5-2=3行,因此我们完全可以断定选项D是正确的。根据以上的分析,同样可以确定选项A、B和C肯定是错误的。而DEL 2 3是一个SQL*Plus命令,所以这个命令不可能存入SQL缓冲区,因此选项E肯定也是错误的。

补充练习题的答案是:D。

3. 请评估以下这个SQL*Plus命令:START supercat.sql

下列SQL*Plus命令中的哪个将与上述命令获取相同的结果?

A. &supercat.sql

B. @supercat.sql

C. GET supercat.sql

D. SAVE supercat.sql

E. EXECUTE supercat.sql

补充练习题解释:这一题是测试对在SQL*Plus中直接运行脚本文件方法的熟悉程度。根据本章2.10节有关在SQL*Plus中如何直接运行脚本文件的介绍,完全可以断定选项B是正确的答案,因为只有“@”或START命令可以将指定脚本文件的内容装入SQL缓冲区中并运行。根据本章2.9节有关在SQL*Plus中如何编辑脚本文件的介绍,可知SQL*Plus命令GET是用来将脚本文件装入到SQL缓冲区中的,所以选项C肯定是错误的。根据本章2.8节有关在SQL*Plus中如何生成脚本文件的介绍,可知SQL*Plus命令SAVE是用来创建脚本文件的,所以选项D也肯定是错误的。我们并未介绍过&和EXECUTE命令。其实只要确定只有“@”或START命令可以直接运行脚本文件这一点,即使其他的命令都没有记住,也能正确回答这一问题。

补充练习题的答案是:B。

4. 以下的命令中,哪个是SQL*Plus命令?

A. INSERT

B. UPDATE

C. SELECT

D. DESCRIBE

E. DELETE

F. RENAME

补充练习题解释:这一题是测试对常用的SQL*Plus命令的掌握程度。如果熟悉本章所介绍的SQL*Plus命令,那么应该可以确定只有选项D是正确的。

如果对SQL比较熟悉,可以根据第0章的0.5节来获取这一题的正确答案。根据第0章的0.5节有关SQL(Structured Query Language)语言的介绍,可知INSERT、UPDATE、SELECT和DELETE都属于SQL语言的DML语句,所以选项A、B、C和E都不可能是正确答案;而RENAME属于SQL语言的DDL语句,所以选项F也不可能是答案。在本题的所有命令中只有DESCRIBE不属于SQL语言,所以选项D肯定是正确答案。

补充练习题的答案是:D。  第3章 函数、NULL值的处理以及逻辑操作练习题和解答

1. 以下哪个运算将返回一个数字值?

A. '03-FEB-1999' + 28

B. '06-DEC-1998' – 20

C. '06-JUL-1987' + (360/24)

D. TO_DATE('03-JAN-1999')-TO_DATE('03-DEC-1997')

练习题解释:这一题是测试对日期型数据处理的熟悉程度。根据本章3.6节有关日期型数据处理的介绍,可以知道:一个日期型数据和一个数字相减,其结果仍为日期型;一个日期型数据和一个数字相加,其结果仍为日期型。所以选项A、B和C肯定是错误的。

同样根据本章3.6节有关日期型数据处理的介绍,可以知道两个日期型数据相减,其结果为数字型,所以选项D肯定是正确的。

练习题的答案是:D。

2. 以下哪个查询语句将返回一个数字值?A. SELECT order_date / 7FROM  inventory;B. SELECT (order_date + 366/24)FROM  inventory;C. SELECT (SYSDATE, order_date) / 7FROM   inventory;D. SELECT (SYSDATE - order_date) / 7FROM  inventory;

练习题解释:这一题是测试对日期型数据的处理的熟悉程度。根据本章3.6节有关日期型数据处理的介绍,可以断定选项D是正确的。其分析方法与第1题几乎完全相同,这里不再重复。

练习题的答案是:D。

3. 使用如下的SQL语句查询数据库:SELECT CONCAT(UPPER(SUBSTR(location, 1, 3)), dept_number) "Department Location"FROM department;

最后一个求值的函数是哪一个?

A. UPPER

B. CONCAT

C. SUBSTR

练习题解释:这一题是测试对单值函数嵌套的理解。根据本章3.18节有关单值函数嵌套的介绍,可以断定选项B是正确的,因为函数的解算次序为从里到外,最外层的函数最后计算,在这个SQL语句中,最后一个计算的函数是CONCAT。

练习题的答案是:B。

指点迷津:在OCP考试中,类似这样的题时常有,其难度不大,但是阅读题时一定要仔细。常常有学生看到这么简单的题一高兴就没仔细读题,而将其答成了最先(第一个)计算的函数了。

4. 以下单行函数中的哪一个可以用于VARCHAR2列?

A. NVL

B. ROUND

C. TRUNC

D. SYSDATE

练习题解释:这一题是测试对单行函数NVL的理解。根据本章3.16节有关单行函数NVL的介绍,可知NVL中的表达式可以是数字型、字符型或日期型,所以可以断定选项A是正确的。

根据本章3.5和3.8节有关单行函数ROUND和TRUNC的介绍,可以知道这两个函数用于数字型或日期型的列,但不能用于字符型的列,所以选项B和C肯定都是错误的。

根据本章3.6节有关单行函数SYSDATE的介绍,可以知道这个函数是系统日期函数,其功能是返回当前的系统时间,它可以用于日期型的列,但不能用于字符型的列,所以选项D肯定也是错误的。

练习题的答案是:A。

5. 评估如下这个SQL语句:SELECT*productFROMLOWER(description) = 'CABLE';WHERE

这个SQL语句将产生以下哪个结果?

A. 这个SQL语句将执行,但是它不会检索任何数据

B. 因为在WHERE子句中没有使用TO_CHAR函数,所以它将返

回一个语法错误

C. 它将显示所有描述是‘cable’并且描述(description)是以

小写字符存储的产品(product)的细节

D. 它将显示所有描述是‘cable’的产品(product)的细节,并

且不考虑description的大小写

练习题解释:这一题是测试对单行函数LOWER的理解。根据本章3.3节有关单行函数LOWER的介绍,可知该函数用于把字符转换成小写,并检查本题SQL语句中的WHERE子句,我们会发现“LOWER(description) = 'CABLE'”这个条件永远也不可能成立,因为等号左边永远是小写字符串而等号右边永远是大写字符串CABLE,所以选项A是正确的(这个SQL语句是正确的SQL语句)。

练习题的答案是:A。

指点迷津:在OCP考试中,如果遇到了类似这样的题(有时SQL语句可能很长),也可以采用本题的解法,即只把注意力集中在与回答问题有关的部分,如只集中在WHERE子句上,可以很快地得到正确的答案,这样就可以节省很多宝贵的时间。

6. 客户(CUSTOMER)表包括如下的列:CUSTOMERNUMBER(9)_IDLAST_NAMVARCHAR2(20)EFIRST_NAMVARCHAR2(20)ESTREET_AVARCHAR2(30)DDRESSVARCHAR2(20)CITYVARCHAR2(15)STATEPOSTAL_CVARCHAR2(9)ODE

请问有关下列两个SQL语句的陈述哪一个是正确的?(1)SELECT CONCAT(INITCAP(first_name), INITCAP(last_name))   FROM  customer;(2)SELECT INITCAP(first_name) || INITCAP(last_name)   FROM  customer;

A. 这两个SQL语句将显示相同的输出结果

B. 这两个SQL语句将不显示相同的数据

C. 这两个SQL语句查询到的数据是相同的,但是显示将是不同

D. 其中一个语句将执行失败,因为有语法错误

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载