第1章 简单查询限制性查询和Word文档下载推荐.docx
- 文档编号:22311518
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:14
- 大小:77.95KB
第1章 简单查询限制性查询和Word文档下载推荐.docx
《第1章 简单查询限制性查询和Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第1章 简单查询限制性查询和Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
LAST_NAMEVARCHAR2(25)
FIRST_NAMEVARCHAR2(25)
SUBJECT_IDNUMBER(9)
如果要显示每位老师的全名,同时显示每位老师所负责教授的科目(subject)号,则应该使用以下哪个查询语句?
A.SELECT*FROMteacher;
B.SELECTlast_name,subject_idFROMaccount;
C.SELECTlast_name,first_nameFROMaccount;
D.SELECTlast_name,first_name,subject_idFROMaccount;
这一题还是测试对*和投影操作的理解,只要理解了*的用法,就可以确定选项A不可能是正确答案,因为在这个查询结果中将包括ID列,而按照题目的要求,这一列是不应该显示的。
所以答案只能是选项D,因为在选项B中缺少first_name列,而在选项C中缺少subject_id列。
D。
3.EMPLOYEES表包括了如下的列:
EMPLOYEE_IDNUMBERPrimaryKey
DEPARTMENT_IDNUMBER(3)
POSITIONVARCHAR2(30)
MANAGER_IDNUMBER
SALARYNUMBER(6,2)
如果使用了如下的查询语句,请问哪个选项是正确的?
SELECTDISTINCTdepartment_id,manager_id
FROMemployees;
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)表,哪一个值会第一个显示?
SELECTid_number
FROMinventory
WHEREpriceBETWEEN5.00AND15.00
ORDERBYdescription,manufacturer_id;
A.25023
B.25026
C.32096
D.45025
这一题首先测试对WHERE子句中使用BETWEENAND比较运算符(在本章
1.11节中)的理解,其次是测试对ORDERBY子句的理解。
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的排序顺序。
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也肯定不是正确答案。
补充练习题和解答
1.如果要显示库存超过100的所有产品(product)的产品标识号(id_number),并且想以这样的方式来显示:
首先以制造商(manufacturer)的字母顺序,之后按产品号由小到大的顺序,应该使用如下的哪个语句来完成这一工作?
注意所有的数据也都存放在练习题4的INVENTORY表中。
A.SELECTid_number
WHEREquantity>
100
ORDERBYmanufacturer_id,id_number;
B.SELECTid_number
WHEREquantity=>
SORTBYmanufacturer_id,id_number;
C.SELECTid_number
ORDERBYmanufacturer_id,id_numberDESC;
D.SELECTid_number
补充练习题解释:
这一题是测试对WHERE子句和ORDERBY子句的理解。
因为SORTBY不是SQL的关键字,所以选项B和选项D肯定不是正确答案。
而且在选项C的ORDERBY子句中的id_number之后使用了DESC,这表示要以id_number的降序方式来显示结果,显然与题目的由小到大方式排序的要求不符,所以选项C也不可能是正确的答案。
在所有的选项中只有A满足题目的要求。
补充练习题的答案是:
2.想要按如下方式显示INVENTORY表中每个产品的标识号(id_number)和描述(description):
(1)产品的价格(price)必须是0.25或8.25。
(2)产品必须是在1997年6月10日之前订购的。
(3)显示的结果必须按照产品的描述(description)的字母顺序显示。
如果使用以下的SQL查询语句,将可能获得的结果是哪个?
注意所有的数据都存放在习题4的INVENTORY表中。
SELECTid_number,description
WHEREpriceIN(8.25,0.25)
ORDERBYdescriptiondesc;
A.一个希望的结果
B.两个希望的结果
C.全部希望的结果
D.因为这个语句将不会执行,所以没有结果
E.虽然这个语句会执行,但是没有所需的结果
这一题首先测试对WHERE子句中使用IN比较运算符(在本章1.13节中)的理解,其次测试对ORDERBY子句的理解。
通过在查询语句中使用“WHEREpriceIN(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是正确的。
这里需要指出的是查询语句中的ORDERBY子句并不符合题目的要求,因为按照这个子句显示的结果是按description的降序排序的。
3.如要使用一个SELECT语句来显示价格(price)小于5.0的id_number,应使用如下的哪个子句?
A.WHEREprice<
5.00
B.HAVINGprice<
C.ORDERBYprice<
D.GROUPBYprice<
这一题测试对WHERE子句和ORDERBY子句的理解。
根据本章1.16~1.18节有关ORDERBY子句的介绍,或根据本章1.19节SELECT语句中的ORDERBY子句的定义,可知ORDERBY关键字之后是不能跟条件表达式的,所以选项C肯定是错的。
再根据本章1.9节SELECT语句中的WHERE子句的定义,或本章1.10节有关WHERE子句的介绍,WHERE关键字之后要跟条件表达式,所以选项A是正确的答案。
虽然到目前为止还没有介绍HAVING子句和GROUPBY子句的用法,但是利用学过的内容仍然可以断定A是正确选项。
指点迷津:
以上的方法也适用于OCP考试。
考试时同样也可能遇到某个或某几个选项不是很清楚,此时如果用已经掌握的知识能够确定出某个选项是正确的答案,选出正确答案就行了,不要在不理解的选项上花过多的时间。
4.以下是表SERVICE中的内容,如果使用如下的查询语句,哪个MACHINE_ID将最后一个显示?
SELECTmachine_id,service_date
FROMservice
ORDERBYtechnician_id,service_date;
A.458745
B.687523
C.785214
D.789874
E.980076
这一题测试对ORDERBY子句的理解。
根据本章1.16节有关ORDERBY子句的介绍,可以知道ORDERBY子句排序的默认顺序是升序,也就是由小到大。
在以上的语句中ORDERBY子句首先是按technician_id由小到大的顺序排序的,但是这里有一个棘手的问题,那就是technician_id列有一个空值。
实际上,Oracle在进行升序排序时,空值是放在最后的。
虽然到目前为止还没有讲述这一点,但是可以通过下面的实验来验证这一点。
首先,启动SQL*Plus并以SCOTT用户登录Oracle数据库,之后运行如下的查询语句。
注意:
一定要使用Orderbycomm子句,并将显示的结果按佣金(comm)的升序方式来排序。
SQL>
SELECTename,job,comm
2FROMemp
3Orderbycomm;
ENAMEJOBCOMM
------------------------------------------------------------
TURNERSALESMAN0
ALLENSALESMAN300
WARDSALESMAN500
MARTINSALESMAN1400
SCOTTANALYST
KINGPRESIDENT
ADAMSCLERK
……
以上查询语句的结果清楚地表明comm为空的数据行都排列在显示结果的最后。
基于以上的讨论,可以断定technician_id列为空值的那一行记录将显示在结果的最后一行,而这一行的MACHINE_ID为980076,所以选项E是正确答案。
E。
虽然某些知识没有学过,但是利用已经掌握的知识和技能,通过上机实践,同样可以正确地回答问题并获取新的知识。
这也是在实际工作中常用的一种学习方法,因为在实际工作中所遇到的问题千奇百怪,不少问题的解决方法常常在书本上很难找到,是靠自己在实践中寻找来的。
其实,答案就在手边。
5.还是使用上一题中的表SERVICE,如果使用如下的查询语句,第一个显示的是哪一个值?
SELECTmachine_id
B.600252
C.687523
D.980076
其实,这一题比上一题要简单。
该题还是测试对ORDERBY子句的理解。
根据本章1.16节有关ORDERBY子句的介绍,已经知道ORDERBY子句排序的默认顺序是升序,也就是由小到大。
在以上的语句中,ORDERBY子句首先是按technician_id由小到大的顺序排序的,如果technician_id相同,再按service_date的升序排序,所以technician_id为456123的两行记录为最小,因此在查询结果中排在第一位,而service_date为1997年6月21日的这行记录的machine_id为458745,此值较小,所以正确答案一定是选项A。
6.还是使用上一题中的表SERVICE,如果使用如下的SQL语句对数据库进行查询,这个语句在执行时将会失败。
要如何修改语句才能纠正这一问题?
SELECTmachine_id"
Machine"
technician_id"
Technician"
service_date"
LastServiceDate"
WHERE"
>
700000
ORDERBY"
;
A.在ORDERBY子句中必须指定ASC或DESC的排序顺序
B.从WHERE子句中去掉列的别名而使用真正的列名
C.从ORDERBY子句中去掉列的别名而使用真正的列名
D.将所有括住的列别名的双引号全部改成单引号
这一题测试对WHERE子句的理解。
根据本章1.10节有关WHERE子句的介绍,可知WHERE是关键字,其后跟限制条件,而条件是由列名、字符串、算术表达式、常量和比较运算符组成的。
根据这一论述,列的别名不能包括在WHERE子句的条件中,所以造成这个SELECT语句执行失败的原因是在WHERE子句的条件中使用了列别名"
,因此纠正问题的方法是从WHERE子句中去掉列的别名而使用真正的列名,即选项B是正确的。
在ORDERBY子句中可以不使用ASC或DESC,ORDERBY子句默认的排序是ASC排序,所以选项A是错误的。
而根据本章1.19节有关ORDERBY子句的定义,可以知道ORDERBY子句中是允许别名的,所以从ORDERBY子句中去掉列的别名而使用真正的列名这一陈述是错误的,即选项C是不成立的。
根据本章1.6节有关别名的解释,如果别名中包含了特殊字符(如中文字符),或想让别名原样显示,要使用双引号把别名括起来。
所以,将所有括住的列别名的双引号全部改成单引号也是不成立的,即选项D也是错误的。
7.学生(STUDENT)表包括了如下的列定义:
IDNUMBER(9)PK
比较以下的两个SQL语句,其结果将有哪些不同?
(1)SELECTDISTINCTsubject_id,last_name,first_name
FROMstudent
ORDERBY1;
(2)SELECTid,last_name,first_name,subject_id
ORDERBYsubject_id;
A.第一个语句的结果将以字母顺序排序,而第二个语句则不是
B.第一个语句将限制重复的subject_id,而第二个语句则不是
C.第二个语句将从输出结果中去掉重复行,而第一个语句则不能
D.第一和第二个语句将显示学生(STUDENT)表中一些值的不同组合
这一题测试对DISTINCT、主键(primarykey)和ORDERBY子句的理解。
根据本章1.18节有关ORDERBY子句的介绍,可知第一个SQL语句中的“ORDERBY1”子句是对SELECT列表中的第一列subject_id进行升序排序。
根据学生(STUDENT)表中subject_id的定义可知subject_id是数字类型,所以第一个语句只能以数字的顺序排序,而不可能以字母顺序排序,所以选项A肯定是错误的。
由于id是STUDENT表中的主键,按照关系数据库的理论,在关系表中主键必须唯一,所以第二个语句返回的结果中每一行肯定都是唯一的。
而由于第一个语句的SELECT列表中使用了DISTINCT关键字,所以这一语句返回的结果的每一行肯定也是唯一的(不同的)。
所以选项B和选项C都不可能正确,因为它们各有一个语句的结果不是唯一的。
因此,在所有的四个选项中只有选项D才适用于这两个SQL语句。
8.下列数据类型中哪种数据类型的默认显示是右对齐?
A.CHAR
B.DATE
C.NUMBER
D.VARCHAR2
这一题相对比较简单,它是测试对列标题和数据的默认显示格式的理解。
根据本章1.4节有关列标题和数据的默认显示格式的介绍,可知字符和日期型数据为左对齐而数字型数据为右对齐,所以选项C是正确的。
补充习题的答案是:
C。
9.ITEM表包含了如下的列:
ITEM_IDNUMBER(9)
COSTNUMBER(7,2)
RETAILNUMBER(7,2)
其中,RETAIL和COST列的值都大于0。
查看以下的两个SQL语句,请问其结果是什么?
(1)SELECTitem_id,(retail*1.25)+5.00-(cost*1.10)-(cost*.10)
FROMitem;
(2)SELECTitem_id,retail*1.25+5.00-cost*1.10-cost*.10
A.第一个语句返回的结果将比第二个语句返回的低
B.第一和第二个语句将返回相同的结果
C.第一个语句返回的结果将比第二个语句返回的高
D.两个语句中只有一个将被执行
这一题测试对算术运算符的优先级的熟悉程度。
根据本章1.5节中有关算术运算符的优先级的介绍,可知乘法的运算优先级本身就高于加减法,所以在本题中第一个SQL语句与第二个SQL语句中算术运算的优先级是相同的,即括号并未真正改变第一个SQL语句中任何算术表达式的优先级。
由于这两个SQL语句中的所有表达式都是相同的(除了括号之外),所以这两个语句返回的结果也将完全相同,因此选项B是正确的。
要注意的是这两个语句都是正确的,都可以执行,所以选项D肯定是错的。
10.在将投影(projection)操作与选择(selection)操作进行比较时,以下的陈述哪个是正确的?
A.SQL提供了选择的功能,但是SQL没有提供投影的功能
B.选择是用来考虑(表的)纵向分区的,而投影是用来考虑(表的)横向分区的
C.选择允许选择一个表中的行,而投影则允许选择一个表中的列
D.选择提供了限制一个查询返回的行数的能力,而投影返回表中的所有行
这一题测试对投影操作和选择操作的理解。
根据本章1.2节有关投影操作的介绍可知,在查询语句中选择指定的列的操作就是关系数据库中所称的投影(project),以及本章1.10节有关选择操作的介绍,可知在一个查询语句中,使用WHERE子句来限制哪些行(记录)要显示,这在关系数据库中称为选择(selection)操作。
所以,只有选项C是正确的。
选项A中的后半部分,SQL没有提供投影的功能显然是错误的,因为SQL既提供了选择又提供了投影操作,所以选项A是错误的。
因为选择常常被看成表的横向分区而投影常常被看成(表的)纵向分区,所以选项B也是错误的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第1章 简单查询限制性查询和 简单 查询 限制性