计算机认证考试-oracle认证分类模拟1
Oracle认证分类模拟1
不定项选择题
1、ACCOUNT表包括了如下的列:
ACCOUNT_ID NUMBER(12)
NEW_BALANCE NUMBER(7, 2)
PREV_BALANCE NUMBER(7, 2)
FINANCE_CHARGE NUMBER(7, 2)
如果要用最简单的方法显示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;
2、TEACHER表包括了如下的列:
ID NUMBER(9) Primary Key
LAS_NAME VARCHAR2(25)
FIRST_NAME VARCHAR2(25)
SUBJECT_ID NUMBER(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;
3、EMPLOYEES表包括了如下的列:
EMPLOYEE_ID NUMBER Primary Key
LAST_NAME VARCHAR2(25)
FIRST_NAME VARCHAR2(25)
DEPARTMENT_ID NUMBER(3)
POSITION VARCHAR2(30)
MANAGER_ID NUMBER
SALARY NUMBER(6, 2)
如果使用了如下的查询语句,请问哪个选项是正确的?
SELECT DISTINCT department_id, manager_id
FROM employees;
A(某一特定的部门号(DEPARTMENT_ID.只能显示一次
B(某一特定的经理号(MANAGER_ID.可能显示不止一次(多次)
C(MANAGER ID和DEPARTMENT_ID可能会显示不止一次
D(查询语句将失败,因为DISTINCT关键字只可以使用在单一列的SELECT列表中
4、以下是表INVENTORY中的
:
如果使用如下的SQL语句查询这个库存(INVENTORY)表,哪一个值会第一个显示?
SELECT id_number
FROM inventory
WHERE price BETWEEN 5.00 AND 15.00
ORDER BY description, manufacturer_id;
A(25023
B(25026
C(32096
D(45025
5、在一个SELECT语句中,应该使用WHERE子句来完成以下的哪些工作?
A(指定INVENTORY表的位置(地址)
B(将MANUFACTURER_ID的值与897898进行比较
C(仅显示MANUFACTURER_ID的值
D(限制SUM(price)函数的输出
6、如果要显示库存超过100的所有产品(product)的产品标识号(id_number),并且想以这样的方式来显示:首先以制造商(manufacturer)的字母顺序,之后按产品号由小到大的顺序,应该使用如下的哪个语句来完成这一工作?注意所有的数据也都存放在INVENTORY表中。
A(SELECT id_number
FROM inventory
WHERE quantity,100
ORDER BY manufacturer_id, id_number;
B(SELECT id_number
FROM inventory
WHERE quantity=,100
SORT BY manufacturer_id, id_number;
C(SELECT id_number
FROM inventory
WHERE quantity,100
ORDER BY manufacturer_id, id_number DESC;
D(SELECT id_number
FROM inventory
WHERE quantity,100
SORT BY manufacturer_id, id_number;
7、想要按如下方式显示INVENTORY表中每个产品的标识号(id_number)和描述(description):
(1)产品的价格(price)必须是0.25或8.25。
(2)产品必须是在1997年6月10日之前订购的。
(3)显示的结果必须按照产品的描述(description)的字母顺序显示。
如果使用以下的SQL查询语句,将可能获得的结果是哪个?注意所有的数据都存放在INVENTORY表中。
SELECT id_number, description
FROM inventory
WHERE price IN(8.25, 0.25)
ORDER BY description desc;
A(一个希望的结果
B(两个希望的结果
C(全部希望的结果
D(因为这个语句将不会执行,所以没有结果
E(虽然这个语句会执行,但是没有所需的结果
8、如要使用一个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
9、以下是表SERVICE中的内容,如果使用如下的查询语句,哪个MACHINE_ID将最后一个显示?
SELECT machine_id, service_date
FROM service
ORDER BY technician_id, service_date;
A(458745
B(687523
C(785214
D(789874
E(980076
10、见下表SERVICE,如果使用如下的查询语句,第一个显示的是哪一个值?
SELECT machine_id
FROM service
ORDER BY technician_id, service_date;
A(458745
B(600252
C(687523
D(980076
11、见下表SERVICE,如果使用如下的SQL语句对数据库进行查询,这个语句在执行时将会失败。要如何修改语句才能纠正这一问题?
SELECT machine_id "Machine", technician_id "Technician",
service_date "Last Service Date"
FROM service
WHERE "Machine",700000
ORDER BY "Technician";
A(在ORDER BY子句中必须指定ASC或DESC的排序顺序
B(从WHERE子句中去掉列的别名而使用真正的列名
C(从ORDER BY子句中去掉列的别名而使用真正的列名
D(将所有括住的列别名的双引号全部改成单引号
12、学生(STUDENT)表包括了如下的列定义:
ID NUMBER(9) PK
LAST_NAME VARCHAR2(25)
FIRST_NAME VARCHAR2(25)
SUBJECT_ID NUMBER(9)
比较以下的两个SQL语句,其结果将有哪些不同?
(1)SELECT DISTINCT subject_id, last_name, first_name
FROM student
ORDER BY 1;
(2)SELECT id, last_name, first_name, subject_id
FROM student
ORDER BY subject_id;
A(第一个语句的结果将以字母顺序排序,而第二个语句则不是
B(第一个语句将限制重复的subject_id,而第二个语句则不是
C(第二个语句将从输出结果中去掉重复行,而第一个语句则不能
D(第一和第二个语句将显示学生(STUDENT)表中一些值的不同组合
13、下列数据类型中哪种数据类型的默认显示是右对齐?
A(CHAR
B(DATE
C(NUMBER
D(VARCHAR2
14、ITEM表包含了如下的列:
ITEM_ID NUMBER(9)
COST NUMBER(7, 2)
RETAIL NUMBER(7, 2)
其中,RETAIL和COST列的值都大于0。查看以下的两个SQL语句,请问其结果是什么?
(1)SELECT iterm_id, (retail*1.25)+5.00-(cost*1.10)-(cost*.10)
FROM item;
(2)SELECT item_id, retail*1.25+5.00-cost*1.10-cost*.10
FROM item;
A(第一个语句返回的结果将比第二个语句返回的低
B(第一和第二个语句将返回相同的结果
C(第一个语句返回的结果将比第二个语句返回的高
D(两个语句中只有一个将被执行
15、在将投影(projection)操作与选择(selection)操作进行比较时,以下的陈述哪个是正确的?
A(SQL提供了选择的功能,但是SQL没有提供投影的功能
B(选择是用来考虑(表的)纵向分区的,而投影是用来考虑(表的)横向分区的
C(选择允许选择一个表中的行,而投影则允许选择一个表中的列
D(选择提供了限制一个查询返回的行数的能力,而投影返回表中的所有行
16、DESC[RIBE.命令会显示以下值的哪几个?
A(表的属主(owner)
B(列名
C(表名
D(列的数据类型
E(NOTNULL列
17、下列命令中,哪个是SQL*Plus命令?
A(UPDATE
B(CHANGE
C(SELECT
D(ALTER TABLE
18、评估如下的SQL*Plus命令:
SPOOL dog.1st
这一SQL*Plus命令将产生哪个结果?
A(它将查询的结果存入DOG.LST文件
B(它将执行存储在DOG.LST文件中的命令
C(它将存储在DOG.LST文件中的内容存入SQL缓冲区
D(它将把DOG.LST文件的输出内容送到系统打印机
19、请看如下的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列的当前设置
20、请问SQL*Plus命令“SET LINESIZE 68”将完成以下的哪项工作?
A(将每页所输出行数指定为68
B(将LONG值的最大显示宽度设置为68
C(将报告的每行设置为68个字符
D(将一个查询所返回的最大记录数设置为68
21、请问“START superdog”这个SQL*Plus命令将完成以下的哪项工作?
A(它将执行SUPERDOG函数
B(它将执行SUPERDOG过程
C(它将运行SUPERDOG.SQL脚本文件
D(它将使用默认扩展名创建SUPERDOG文件
E(它将调用编辑器编辑SUPERDOG文件的内容
22、在SQL缓冲区中存储了一个包含五行正文的命令(SQL语句),此时,您在SQL提示符处发出了这
样的SQL*Plus命令:DEL 2 3
请问当前SQL缓冲区中的状态如何?
A(缓冲区已经清空
B(缓冲区中存放两行的正文
C(缓冲区中存放五行的正文
D(缓冲区中存放三行的正文
E(缓冲区中存放着DEL 2 3命令
23、请评估以下这个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
24、以下的命令中,哪个是SQL*Plus命令?
A(TNSERT
B(UPDATE
C(SELECT
D(DESCRIBE
E(DELETE
F(RENAME
25、以下哪个运算将返回一个数字值?
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')
26、以下哪个查询语句将返回一个数字值?
A(SELECT order_date/7
FROM inventory;
B(SELECT (order_date+366/24)
FROM inventory;
C(SELECT (SYSDATE, order_date)/7
FROM inventory;
D(SELECT (SYSDATE-order_date)/7
FROM inventory;
27、使用如下的SQL语句查询数据库:
SELECT CONCAT (UPPER (SUBSTR (location, 1, 3) ), dept_number) "Department
Location"
FROM department;
最后一个求值的函数是哪一个?
A(UPPER
B(CONCAT
C(SUBSTR
28、以下单行函数中的哪一个可以用于VARCHAR2列?
A(NVL
B(ROUND
C(TRUNC
D(SYSDATE
29、评估如下这个SQL语句:
SELECT *
FROM product
WHERE LOWER(description)='CABLE';
这个SQL语句将产生以下哪个结果?
A(这个SQL语句将执行,但是它不会检索任何数据
B(因为在WHERE子句中没有使用TO CHAR函数,所以它将返回一个语法错误
C(它将显示所有描述是„cable?并且描述(description)是以小写字符存储的产品(product)的细节
D(它将显示所有描述是„cable?的产品(product)的细节,并且不考虑description的大小
写
30、客户(CUSTOMER)表包括如下的列:
CUSTOMER_D NUMBER(9)
LAST_NAME VARCHAR2(20)
FIRST_NAME VARCHAR2(20)
STREET_ADDRESS VARCHAR2(30)
CITY VARCHAR2(20)
STATE VARCHAR2(15)
POSTAL_CODE VARCHAR2(9)
请问有关下列两个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(其中一个语句将执行失败,因为有语法错误
31、下列脚本(SQL语句)中哪个会将23-MAY-00显示为01-JAN-00?
A(SELECT ROUND(order_date, 'DAY')
FROM inventory;
B(SELECT ROUND(order_date, 'YEAR')
FROM inventory;
C(SELECT ROUND(order_date, 'MONTH')
FROM inventory;
D(SELECT ROUND(TO_CHAR(order_date, 'YYYY'))
FROM inventory;
32、使用哪个字符函数来返回一个值中字符的个数?
A(NVL
B(SUBSTR
C(LENGTH
D(CONCAT
E(INITCAP
33、如果使用如下的SQL语句查询数据库:
SELECT id_number "Part Number", SUM(price*quantity)TOTAL, description
FROM inventory
WHERE price,5.00
ORDER BY "Part Number", 3;
以下哪个子句将造成错误?
A(FROM inventory
B(WHERE price,5.00
C(ORDER BY "Part Number", 3
D(SELECT id_number "Part Number", SUM(price*quantity)TOTAL, description
34、使用分组函数可完成以下的哪个操作?
A(以„DD MON YYYY?的
显示订单(orders)的订货日期(order date)
B(将字符串„January 23 2010?转换成日期格式
C(产生PRODUCT表中COST列所有值的总和
D(以小写字母的形式显示PRODUCT表中DESCRIPTION列所有的值
35、以下是包含了所有列的ACCOUNT表的定义:
ACCOUNT_ID NUMBER(12)
NEW_BALANCE NUMBER(7, 2)
PREV_BALANCE NUMBER(7, 2)
FINANCE_CHARGE NUMBER(7, 2)
现在您想获取如下的结果:
(1)新余额(new balance)小于之前的余额(previous balance)的账户。
(2)显示所有财务收费(finance charge)少于$25.00的账户。
(3)还要包括没有财务收费的账户。
请评估下面的SQL语句,该语句将完成下列工作中的哪一个?
SELECT account_id
FROM account
WHERE new_balance,prey_balance
AND NVL(finance_charge, 0),25;
A(获取全部所希望的结果
B(获取所希望结果中的一个
C(获取所希望结果中的两个
D(没有获取任何所希望的结果
36、以下是产品(PRODUCT)表中的数据:
PRODUCT
MANUFACTUREID NUMBER DESCRIPTION QUANTITY COST R ID
AAA 215 NF10032 546 3.00 6pk-battery
AA 140 EL7968 2000 2pk-battery
D 603 OT456 318 1.10 2pk-battery
C 725 OT456 239 .75 2pk-battery
AAA 218 OT456 980 3.25 6pk-battery
AAA 220 NF10032 4.20 8pk-battery
AA 126 NF10032 2513 2pk-battery
C 751 EL7968 84 100 2pk-battery
SELECT description, quantity, cost
FROM product
WHERE manufacturer_id LIKE 'NF10032'
AND NVL(cost, 0),5.00
ORDER BY quantity DESC, cost;
以上的查询语句将产生如下的哪个结果?
A(DESCRIPTION QUANTITY COST
----------------- --------- ------
AA 2pk-battery 2513
AAA 6pk-battery 546 3
B(DESCRIPTION QUANTITY COST
----------------- --------- ------
AAA 8pk-battery 4.2
AA 2pk-battery 2513
AAA 6pk-battery 546 3
C(DESCRIPTION QUANTITY COST
----------------- --------- ------
AAA 6pk-battery 546 3
AAA 8pk-battery 4.2
AA 2pk-battery 2513
D(DESCRIPTION QUANTITY COST
----------------- --------- ------
AA 2pk-battery 2513
AAA 6pk-battery 546 3
AAA 8pk-battery 4.2
37、请看如下的SQL语句:
SELECT line_item_id, orderid, product_id
FROM line_item;
使用以下的哪个WHERE子句能测试出quantity列是否包含空值(NULL)?
A(WHERE quantity=NULL;
B(WHERE quantity,,NULL;
C(WHERE quantity!=NULL;
D(WHERE quantity IS NULL;
38、使用如下的SQL语句查询数据库:
SELECT bonus
FROM salary
WHERE bonus BETWEEN 1 AND 250
OR (bonus IN (190, 500, 600)
AND bonus BETWEEN 250 AND 500);
请问这个SQL语句将返回如下的哪个值?
A(100
B(260
C(400
D(600
39、以下是教师(TEACHER)表中的数据:
TEACHER
ID LAST_NAME FIRST_NAME SUBJECT_ID
88 Tsu Ming HST AMER
70 Smith Ellen HST INDIA
56 Jones Karen
58 Hann Jeff HST CURR
63 Hopewell Mary Elizabeth HST_RELIG
请评估如下的SQL语句,当这个查询语句执行时将首先显示如下的哪条信息?
SELECT last_name‖', '‖first_name
FROM teacher
WHERE subject_id!=NULL
ORDER BY last_name;
A(Tsu, Ming
B(Hann, Jeff
C(Smith, Ellen
D(不显示任何值
40、以下哪个逻辑操作符在Where子句中使用时,只有两个条件同时为真(TRUE.才返回真(TRUE.?
A(OR
B(NOT
C(AND
D(LIKE
41、以下是CLASS表中的数据:
CLASS
CLASS_ID CLASS_NAME HOURS_CREDIT INSTRUCTOR_ID
Incroduction to 1 3 4 Accouncting
2 Computer Basics3 1
Tax Accouncing 3 3 4 Principles
American 4 3 2 History
Basic 5 3 Engineering
请评估如下的SQL语句,当使用这个查询语句查询数据库时将显示以下哪个值?
SELECT COUNT(instructor_id)
FROM class;
A(2
B(3
C(4
D(5
E(这个语句将不会成功地执行
42、请评估如下的SQL语句:
SELECT manufacturer_id, COUNT(*), order_date
FROM inventory
WHERE price,5.00
GROUP BY order_date, manufacturer_id
HAVING COUNT(*),10
ORDER BY order_date DESC;
在以上的查询语句中,指定从INVENTORY(库存)表中返回哪些行的子句是哪个?
A(SELECT manufacturer_id, COUNT(*), order_date
B(WHERE price,5.00
C(GROUP BY orderdate, manufacturer_id
D(ORDER BY order_date DESC
E(HAVING COUNT(*),10
43、使用如下的SQL语句查询数据库:
SELECT id_number, 100/quantity
FROM inventory;
如果QUANTITY的值为空值(NULL),Oracle将显示哪个值?
A(一个空格字符
B(一个空值(NULL)
C(一个0
D(一个100
E(关键字NULL
44、如果QUANTITY的值为空值(null),在执行以下哪个语句时会显示一个0?
A(SELECT id_number, 100/quantity
FROM inventory;
B(SELECT id_number, NVL(100/quantity, 0)
FROM inventory;
C(SELECT id_number, NULL(100/quantity, 0)
FROM inventory;
D(SELECT id_number, TO_CHAR(100/quantity, 0)
FROM inventory;
E(SELECT id_number, NVL(100/quantity, '999.00')
FROM inventory;
45、产品(PRODUCT)表的结构如下:
PRODUCT
PRODUCT_ID NUMBER NOT NULL, Primary Key
PRODUCT_NAME VARCHAR2(25)
Foreign key to
SUPPLIER_ID NUMBER SUPPLIER_ID of the
SUPPLIER table
LIST_PRICE NUMBER(7, 2)
COST NUMBER(7, 2)
QTY_IN_STOCK NUMBER
QTY_ON_ORDER NUMBER
REORDER_LEVEL NUMBER
REORDER_QTY NUMBER
如果使用如下的SQL语句,哪个子句将会产生错误?
SELECT supplier_id,AVG(cost)
FROM product
WHERE AVG(list_price),60.00
GROUP BY supplier_id
ORDER BY AVG(cost)DESC;
A(FROM
B(WHERE
C(GROUP BY
D(ORDER BY
46、使用如下的SQL语句将完成哪一种类型的连接?
SELECT i.id_number, m.manufacturer_id
FROM inventory i, inventory m
WHERE i.manufacturerl_id=m.region_id_number;
A(自连接(SelfJoin)
B(外连接(Outer Join)
C(相等连接(Equi Join)
D(不相等连接(Non-equijoin)
47、外连接(Outer Join)符号应放在外连接条件的哪一边?
A(有匹配数据行的一边
B(没有匹配数据行的一边
C(放在连接条件的两边
D(连接条件的哪一边都不放
48、当显示的数据来自两个或两个以上的表时,以下哪个子句会使用连接条件?
A(FROM
B(WHERE
C(SELECT
D(HAVING
E(GROUP BY
49、以下有关不等连接(Non-equijoin)查询语句的陈述中哪个是正确的(true)?
A(不需要使用表的别名来
有可能混淆的列名
B(在不相等连接查询语句的连接条件中使用的不是等于操作符
C(可以使用不等连接来获取通常不满足连接条件的数据行
D(WHEERE子句说明一个表中的某一列如何直接对应于第2个表中的一列
50、以下的查询语句中哪一个表示相等连接?
A(SELECT i.id_number, m.manufacturer_id
FROM inventory i, manufacturer m
WHERE i.manufacturer_id=m.manufacturerid;
B(SELECT i.id_number, m.manufacturer_id
FROM inventory i, manufacturer m
WHERE i.manufacturer_id=m.manufacturer_id(+);
C(SELECT i.id_number, m.manufacturer_id
FROM inventory i, manufacturer m
WHERE i.manufacturer_id(+)=m.manufacturer_id;
D(SELECT i.id_number, m.manufacturer_id
FROM inventory i, manufacturer m
WHERE i.manufacturer_id=i.manufacturer_id
AND i.id_number=2365;
51、以下哪个操作符最适用于单行子查询?
A(=
B(IN
C(LIKE
D(BETWEEN
52、在SQL:999语法中,以下哪两个操作符可以用于外连接的条件中?
A(=
B(OR
C(IN
D(AND
53、以下是产品(PRODUCT)表和供应商(SUPPLIER)表的结构:
PRODUCT
-----------
PRODUCT_ID NUMBER
PRODUCT_NAME VARCHAR2(25)
SUPPLIER_ID NUMBER
CATEGORY_ID NUMBER
QTY_PER_UNIT NUMBER
UNIT_PRICE NUMBER(7, 2)
QTY_IN_STOCK NUMBER
QTY_ON_ORDER NUMBER
REORDER_LEVEL NUMBER
SUPPLIER
------------
SUPPLIER_ID NUMBER
SUPPLIER_NAME VARCHAR2(25)
ADDRESS VARCHAR2(30)
CITY VARCHAR2(25)
REGION VARCHAR2(10)
POSTAL_CODE VARCHAR2(11)
要求创建一个查询,这个查询将以字母顺序返回产品的清单,其中包括了每个产品的供应商。要求只有在产品表中有供应商的那些产品才可以包括在清单(报告)中。请问使用以下的哪两个查询能完成此项查询?
A(SELECT p.product_name, s.supplier_name
FROM product p
LEFT OUTER JOIN supplier s
ON p.supplier_id=s.supplier_id
ORDER BY p.product_name;
B(SELECT p.product_name, s.supplier_name
FROM product P
JOIN supplier s
ON (supplier_id)
ORDER BY p.product_name;
C(SELECT p.product_name, s.supplier_name
FROM product p
NATURAL JOIN supplier s
ORDER BY p.product_name;
D(SELECT p.product_name, s.supplier_name
FROM product p
JOIN supplier s
USING (p.supplier_id)
ORDER BY p.product_name;
E(SELECT product_name, supplier_name
FROM product
JOIN supplier
USING (supplier_id)
ORDER BY p.product_name;
54、以下是PERSONNEL表的定义:
ID NUMBER(9)
LAST_NAME VARCHAR2(25)
FIRST_NAME VARCHAR2(25)
MANAGER_ID NUMBER(9)
DEPT_ID NUMBER(9)
请看如下的SQL语句,它将返回以下的哪个结果?
SELECT p.dept_id, p.first_name‖''‖p.last_name employee,
c.first_name‖''‖c.last_name coworker
FROM personnel p,personnel c
WHERE p.dept id=c.dept_id
AND p.id,,c.id;
A(它将显示每一个员工(employee)的部门号、名字和他们的经理的名字
B(它将显示每一个员工的部门号、名字和他们的全部同事(coworker)的名字
C(它将显示每一个部门、每一个部门中的经理和每一个部门中的全体员工
D(它将返回语法错误
55、以下是PRODUCT表和SHIPPING COST表的结构:
PRODUCT
---------------------------------
PRODUCT_ID NUMBER(9)
PRODUCT_NAME VARCHAR2(20)
COST NUMBER(5, 2)
RETAIL_PRICE NUMBER(5, 2)
WEIGHT NUMBER(5, 2)
SHIPPING_COST
---------------------------------
ID NUMBER(9)
LOWWEIGHT NUMBER(5, 2)
HIGHWEIGHT NUMBER(5, 2)
COST NUMBER(5, 2)
如果需要显示包括了每个产品运输价格(shipping cost)的产品名(product name),而运输价格是通过比较SHIPPING COST表中产品重量的下限和上限来计算的。现在请问,应使用如下查询语句中的哪两个语句?
A(SELECT product_name, cost
FROM product NATURAL JOIN shipping_cost;
B(SELECT p.product_name, s.cost
FROM product p, shipping_cost s
WHERE p.product_id=s.id(+);
C(SELECT p.product_name, s.cost
FROM product p, shipping_cost s
WHERE p.weight BETWEEN s.lowweight AND s.highweight;
D(SELECT p.product_name, s.cost
FROM product p, shipping_cost s
USING (p.weight, BETWEEN s.lowweight AND s.highweight);
E(SELECT p.product name.s.cost
FROM product p JOIN shipping_cost s
ON (p.weight BETWEEN s.lowweight AND s.highweight);
56、以下是课程(CLASS)表和教师(INSTRUCTOR)表中的数据:
CLASS
CLASS_ID CLASS_NAME HOURS_CREDIT INSTRUCTOR_ID
Introduction to 1 3 4 Accounting
2 Computer Basics3 1
Tax Accounting 3 3 4 Principles
American 4 3 2 History
Basic 5 3 Engineering
INSTRUCTOR
INSTRUCTOR_ID LAST_NAME FIRST_NAME
1 Chao Ling
2 Vanderbilt Herbert
3 Wigley Martha
4 Page Albert
要生成一个包括每个教师所教课程的报表,该报表必须包括所有的教师,即使那些目前没有任课的教师也要包括在报表中。请问,应使用以下查询语句中的哪两个?
A(SELECT i.last_name, i.first_name, c.class_name
FROM instructor i, class c;
B(SELECT i.last name, i.first_name,c.class_name
FROM class c LEFT OUTER JOIN instructor I
ON (i.instructor_id=c.instructor_id)
ORDER BY i.instructor_id;
C(SELECT i.last_name, i.first_name, c.class_name
FROM instructor i, class c
WHERE i.instructor_id=c.instructor_id (+)
ORDER BY i.instructor_id;
D(SELECT i.last_name, i.first_name, c.class_name
FROM instructor i LEFT OUTER JOIN class c
ON (i.instructor id=c.instructor_id)
ORDER BY i.instructor_id;
E(SELECT i.last_name, i.first_name, c.class_name
FROM instructor i, class c
WHERE i.instructor_id (+)=c.instructor_id
ORDER BY i.instructor_id;
F(SELECT i.last_name, i.first_name, c.class_name
FROM instructor i NATURAL JOIN class c
ON (i.instructor_id=c.instructor_id);
57、在一个使用了“,,”操作符的子查询中可以返回多少个值?
A(只能1个
B(最多2个
C(最多10个
D(没有限制
58、以下是客户(CUSTOMER)表和客户_订单(CURR_ORDER)表的结构:
CUSTOMER
------------------------------------
CUSTOMER_ID NUMBER(5)
NAME VARCHAR2(25)
CREDIT_LIMIT NUMBER(8, 2)
ACCT_OPEN_DATE DATE
CURR_ORDER
------------------------------------
ORDER_ID NUMBER(5)
CUSTOMER_ID NUMBER(5)
ORDER_DATE DATE
TOTAL NUMBER(8, 2)
以下哪种情况下应该使用子查询来返回所需的结果?
A(需要显示今天下了订单的全部客户的名字
B(需要确定CUSTOMER_ID为30450的客户今年所下的订单数量
C(需要确定今年开了账号的所有客户的平均信用限额(CREDIT_LIMIT)
D(需要确定那些信用限额比CUSTOMER_ID为30450的客户的信用限额高(大)的客户
59、现在需要基于一个未知条件来返回数据,应使用以下哪种结构?
A(一个子查询
B(一个GROUP BY子句
C(一个ORDER BY子句
D(一个带有OR条件的WHERE子句
60、以下是PATIENT、PHYSICIAN和ADMISSION表的结果:
PATIENT
PATIENT_ID NUMBER NOT NULL, Primary Key
LAST_NAME VARCHAR2(30) NOT NULL
FIRST_NAME VARCHAR2(25) NOT NULL
DOB DATE
INS_CODE NUMBER
PHYSICIAN
PHYSICIAN_ID NUMBER NOT NULL, Primary Key
LAST_NAME VARCHAR2(30) NOT NULL
FIRST_NAME VARCHAR2(25) NOT NULL
LICENSE_NO NUMBER(7) NOT NULL
HIRE_DATE DATE
ADHISSION
NOT NULL, Primary
Key, References PATIENT_ID NUMBER PATIENT_ID column of
the PATIENT table
NOT NULL, Primary
Key, References
PHYSICIAN_ID NUMBER PHYSICIAN_ID column
of the PHYSICIAN
table
ADMIT_DATE DATE
DISCHG_DATE DATE
Foreign key to
ROOH_ID NUHBER ROOM_ID of the ROOM
table
如果想提取在某个理疗师(physician)被雇佣之后所有注册的病人(patient),应使用如下的哪种结构?
A(一个分组函数
B(一个HAVING子句
C(一个MERGE语句
D(一个单行子查询
61、要创建一个报表,这个报表将显示那些信用限额大于所有客户平均信用限额的客户,应使用如下的哪个查询语句?
A(SELECT last_name, first_name
FROM customer
WHERE credit_limit,AVG(credit_limit);
B(SELECT last_name, first_name, AVG(credit_limit)
FROM customer
GROUP BY AVG(credit_limit);
C(SELECT last_name, firs_name, AVG(credit_limit)
FROM customer
GROUP BY AVG(credit_limit)
HAVING credit_limit,AVG(credit_limit);
D(SELECT last_name, first_name
FROM customer
WHERE credit_limit,(SELECT AVG(credit_limit)
FROM customer);
E(SELECT last_name, first_name
FROM customer
WHERE credit_limit=(SELECT AVG(credit_limit)
FROM customer);
62、以下病人(PATIENT)和理疗师(PHYSICIAN)表的结构:
PATIENT
PATIENT_ID NUMBER NOT NULL, Primary Key
LAST_NAME VARCHAR2(30) NOT NULL
FIRST_NAME VARCHAR2(25) NOT NULL
DOB DATE
INS_CODE NUMBER
PHYSICIAN
PHYSICIAN_ID NUMBER NOT NULL, Primary Key
LAST_NAME VARCHAR2(30) NOT NULL
FIRST_NAME VARCHAR2(25) NOT NULL
LICENSE_NO NUMBER(7) NOT NULL
HIRE_DATE DATE
要产生一个所有指派了一名理疗师的病人的报表,而且报表要包括病人的名字和理疗师的名字,请问应该使用以下的哪种类型的连接?
A(相等连接
B(交叉连接(Cross Join)
C(自然连接
D(没法完成这一要求,因为两个表中没有相同的列
63、请看如下的SQL语句,执行这个语句时将失败,请问怎样修改可以解决这一问题?
SELECT c.customer_id, o.order_id, o.order_date, p.product_name
FROM customer c, curr_order o, product p
WHERE customer.customer_id=curr_order.customer_id
AND oproduct_id=p.product_id
ORDER BY o.ordei_amount;
A(在ORDER BY子句中使用表名
B(将表的别名从WHERE子句中去掉
C(在SELECT列表中包括order_amount列
D(在WHERE子句中使用表的别名以替代表名
E(从ORDER BY子句中去掉表的别名并且只使用列名
答案:
不定项选择题
1、A
[解析] 这一题主要是测试对*和投影操作的理解。在查询语句中*表示所有的列,只要理解了*的用法,就可以确定答案是选项A。而在Select列表中并未包括any和all,有关这一点可以参阅Select语句的定义。由这个定义可知SELECT关键字之后可以跟*,也可以跟Select列表。这个列表可以是列名,也可以是表达式,但是并未包括any和all。
其实,选项D也可以获取与选项A完全相同的结果,但这一问题要求使用最简单的方法,显然选项A比选项D简单。如果没有选项A,选项D就是正确的答案了。
2、D
[解析] 这一题还是测试对*和投影操作的理解,只要理解了*的用法,就可以确定选项A不可能是正确答案,因为在这个查询结果中将包括ID列,而按照题目的要求,这一列是不应该显示的。所以答案只能是选项D,因为在选项B中缺少first_name列,而在选项C中缺少subject_id列。 3、B
[解析] 这一题主要是测试DISTINCT运算符的理解。读者已经看到了DISTINCT可以作用于多列,而此时显示的结果为每一种列组合只显示一行。因此这一查询语句是MANAGER_ID和DEPARTMENT_ID的每种组合只显示一行(一次),而不是DEPARTMENT_ID只显示一次,所以选项A肯定是错的。而基于同样的理由,选项C也肯定是错的。由于DISTINCT关键字可以作用于多列,所以选项D的“DISTINCT关键字只可以使用在单一列的SELECT列表中”的这一陈述显然是站不住脚的,因此选项D也是错的。由于查询语句是MANAGER_ID和DEPARTMENT_ID的每种组合只显示一行(一次),所以经理号(MANAGER_ID)是可能会显示多次的,即选项B是正确答案。 4、A
[解析] 这一题首先测试对WHERE子句中使用BETWEEN AND比较运算符的理解,其次是测试对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的排序顺序。
5、B
[解析] 这一题主要测试对WHERE子句用法的理解。有关WHERE子句的解释是这样的:WHERE是关键字,其后跟限制条件;而条件是由列名、字符串、算术表达式、常量和比较运算符组成的。理解了这段解释就不难看出选项B是正确的。因为WHERE子句无法指定一个表的位置,所以选项A肯定是错误的。WHERE子句没法限定显示列表中的列,显示特定的列是投影操作,是SELECT子句的工作,而WHERE子句完成的是选择操作,因此选项C不可能是正确答案。WHERE子句不能限制分组函数,如SUM、AVG或MAX等,所以选项D也肯定不是正确答案。
6、A
[解析] 这一题是测试对WHERE子句和ORDER BY子句的理解。因为SORT BY不是SQL的关键字,所以选项B和选项D肯定不是正确答案。而且在选项C的ORDER BY子句中的id number之后使用了DESC,这表示要以id number的降序方式来显示结果,显然与题目的由小到大方式排序的要求不符,所以选项C也不可能是正确的答案。在所有的选项中只有A满足题目的要求。
7、A
[解析] 这一题首先测试对WHERE子句中使用IN比较运算符的理解,其次测试对ORDER BY子句的理解。通过在查询语句中使用“WHERE priceIN(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的降序排序的。
8、A
[解析] 这一题测试对WHERE子句和ORDER BY子句的理解。根据有关ORDER BY子句的介绍,或根据SELECT语句中的ORDERBY子句的定义,可知ORDER BY关键字之后是不能跟条件表达式的,所以选项C肯定是错的。再根据SELECT语句中的WHERE子句的定义,或有关WHERE子句的介绍,WHERE关键字之后要跟条件表达式,所以选项A是正确的答案。虽然到目前为止还没有介绍HAVING子句和GROUP BY子句的用法,但是利用学过的内容仍然可以断定A是正确选项。
9、E
[解析] 这一题测试对ORDERBY子句的理解。根据有关ORDER BY子句的介绍,可以知道ORDERBY子句排序的默认顺序是升序,也就是由小到大。在以上的语句中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;
ENAME JOB COM
-------- ------------ ---------
TURNER SALESMAN 0
ALLEN SALESMAN 300
WARD SALESMAN 500
MARTIN SALESMAN 1400
SCOTT ANALYST
KING PRESIDENT
ADAMS CLERK
……
以上查询语句的结果清楚地表明comm为空的数据行都排列在显示结果的最后。基于以上的讨论,可以断定technician_id列为空值的那一行记录将显示在结果的最后一行,而这一行的MACHINE_ID为980076,所以选项E是正确答案。
10、A
[解析] 其实,这一题比上一题要简单。该题还是测试对ORDER BY子句的理解。根据有关ORDER BY子句的介绍,已经知道ORDER BY子句排序的默认顺序是升序,也就是由小到大。在以上的语句中,ORDER BY子句首先是按technician_id由小到大的顺序排序的,如果technician_id相同,再按service_date的升序排序,所以technician_id为456123的两行记录为最小,因此在查询结果中排在第一位,而service_date为1997年6月21日的这行记录的machine_id为458745,此值较小,所以正确答案一定是选项A。
11、B
[解析] 这一题测试对WHERE子句的理解。根据有关WHERE子句的介绍,可知WHERE是关键字,其后跟限制条件,而条件是由列名、字符串、算术表达式、常量和比较运算符组成的。根据这一论述,列的别名不能包括在WHERE子句的条件中,所以造成这个SELECT语句执行失败的原因是在WHERE子句的条件中使用了列别名”Machine”,因此纠正问题的方法是从WHERE子句中去掉列的别名而使用真正的列名,即选项B是正确的。
在ORDER BY子句中可以不使用ASC或DESC,ORDER BY子句默认的排序是ASC排序,所以选项A是错误的。而根据有关ORDER BY子句的定义,可以知道ORDER BY子句中是允许别名的,所以从ORDER BY子句中去掉列的别名而使用真正的列名这一陈述是错误的,即选项C是不成立的。根据有
关别名的解释,如果别名中包含了特殊字符(如中文字符),或想让别名原样显示,要使用双引号把别名括起来。所以,将所有括住的列别名的双引号全部改成单引号也是不成立的,即选项D也是错误的。
12、D
[解析] 这一题测试对DISTINCT、主键(primaiy key)和ORDER BY子句的理解。根据有关ORDER BY子句的介绍,可知第一个SQL语句中的“ORDER BY 1”子句是对SELECT列表中的第一列subject_id进行升序排序。
根据学生(STUDENT)表中subject_id的定义可知subject_id是数字类型,所以第一个语句只能以数字的顺序排序,而不可能以字母顺序排序,所以选项A肯定是错误的。
由于id是STUDENT表中的主键,按照关系数据库的理论,在关系表中主键必须唯一,所以第二个语句返回的结果中每一行肯定都是唯一的。而由于第一个语句的SELECT列表中使用了DISTINCT关键字,所以这一语句返回的结果的每一行肯定也是唯一的(不同的)。所以选项B和选项C都不可能正确,因为它们各有一个语句的结果不是唯一的。因此,在所有的四个选项中只有选项D才适用于这两个SQL语句。
13、C
[解析] 这一题相对比较简单,它是测试对列标题和数据的默认显示格式的理解。根据有关列标题和数据的默认显示格式的介绍,可知字符和日期型数据为左对齐而数字型数据为右对齐,所以选项C是正确的。
14、B
[解析] 这一题测试对算术运算符的优先级的熟悉程度。根据有关算术运算符的优先级的介绍,可知乘法的运算优先级本身就高于加减法,所以在本题中第一个SQL语句与第二个SQL语句中算术运算的优先级是相同的,即括号并未真正改变第一个SQL语句中任何算术表达式的优先级。由于这两个SQL语句中的所有表达式都是相同的(除了括号之外),所以这两个语句返回的结果也将完全相同,因此选项B是正确的。要注意的是这两个语句都是正确的,都可以执行,所以选项D肯定是错的。 15、C
[解析] 这一题测试对投影操作和选择操作的理解。根据有关投影操作的介绍可知,在查询语句中选择指定的列的操作就是关系数据库中所称的投影(project),以及有关选择操作的介绍,可知在一个查询语句中,使用WHERE子句来限制哪些行(记录)要显示,这在关系数据库中称为选择(selection)操作。所以,只有选项C是正确的。
选项A中的后半部分,SQL没有提供投影的功能显然是错误的,因为SQL既提供了选择又提供了投影操作,所以选项A是错误的。因为选择常常被看成表的横向分区而投影常常被看成(表的)纵向分区,所以选项B也是错误的。
16、BDE
[解析] 这一题测试对SQL*Plus命令DESC[RIBE]的理解。根据有关DESC命令的介绍,可知DESC命令是用来显示一个表的结构的,即该表中包含了多少个列,每一列的数据类型和它的最大长度,以及该列是否可以为空(NULL)。在此可以非常轻松地确定只有选项B、D和E满足以上所述,即选项B、D和E为正确答案。
17、B
[解析] 这一题测试对SQL*Plus命令的熟悉程度。如果回顾一下介绍的SQL*Plus命令,就会发现只有CHANGE命令介绍过。在SQL语言介绍中,SQL命令包括了UPDATE、SELECT、和ALTER命令。因此,可以断定只有选项B是正确的。
18、A
[解析] 这一题测试对SQL*Plus命令SPOOL的理解。根据有关SPOOL命令的介绍,只有选项A是正确答案。执行存放在脚本文件中内容的命令为@或START,而不是SPOOL,所以选项B是错的。将存在DOG.LST文件中的内容存入SQL缓冲区的命令是GET,而不是SPOOL,所以选项C也是错的。SPOOL OUT命令是将屏幕上显示的输出内容送到系统打印机,所以选项D也肯定是错的。 19、BD
[解析] 这一题测试对SQL*Plus的COLUMN格式化命令的熟悉程度。根据有关COLUMN格式化命令的介绍,完全可以断定选项B和D是正确的。因为在本题的COLUMN命令的选项HEADING之后,并未指定
JUS[TIFY],所以按照列标题和数据的默认显示格式中有关的介绍,可知字符和日期型数据为左对齐,而数字型数据为右对齐,PRODUCT_NAME列的标题不可能居中显示(因为它只能为左或右对齐)。
如果记不住以上内容也没有关系,可以登录SQL*Plus后使用如下的SQL*Plus命令help,轻松地理解为什么选项A是错误的。
也可以通过SQL*Plus连接到SCOTT用户,注意tiger是该用户的密码(最好不要当着其他人的面使用这一方法,因为这样做会使密码泄露的)。
SQL,connect scott/tiger
已连接
之后,使用如下的查询语句获取员工表中属于第20号部门的所有员工的工号、名字和雇员日期。
SQL,SELECT empno, ename, hiredate
2 FROM emp
3 WHERE deomo=20;
EMPNO ENAME HIREDATE
----------- --------- ---------------
7369 SMITH 17-12月-80
7566 JONES 02-4月 -81
7788 SCOTT 19-4月 -87
7876 ADAMS 23-5月 -87
7902 FORD 03-12月-81
接下来,对问题中的SQL*Plus命令略加修改以适应员工(emp)表中的相应列的数据类型,并发出如下的三个SQL*Plus格式化命令:
SQL,COLUMN ename HEADING 'Product Name' FORMAT A20
SQL,COLUMN empno HEADING 'Product ID' FORMAT 9999999999
SQL,COLUMN hiredate HEADING 'Order Date' FORMAT A20
最后,使用SQL*Plus的运行SQL语句命令“/”重新运行SQL缓冲区中的SQL语句。
SQL,/
Product ID Product Name Order Date
---------- ----------------- ----------------
7369 SMITH 17-12月-80
7566 JONES 02-4月 -81
7788 SCOTT 19-4月 -87
7876 ADAMS 23-5月 -87
7902 FORD 03-12月-81
从执行以上SQL语句的输出结果可以清楚地看出:与格式化之前的结果比较,在显示结果中除了列标题和列的宽度发生了变化,其他都没有变,所以选项A肯定是错误的。因为COLUMN格式化命令限制的是列的显示宽度而不是列标题的宽度,所以选项C肯定是错误的。因为显示PRODUCT NAME列的当前设置的命令是COLUMN product name,列名product name后面不能跟任何东西,所以选项E也是错误的。
20、C
[解析] 这一题是测试对SQL*Plus的SET LINE[SIZE]命令用法的熟悉程度。根据有关SQL*Plus命令的介绍,完全可以断定选项C是正确的。
根据有关介绍,可以知道设置每页所输出行数的命令为SET PAGE[SIZE];设置LONG值的最大显示宽度的命令为;设置一个查询所返回的最大记录数的命令为
,所以选项A、B和D肯定都是错误的。
21、C
[解析] 这一题是测试对在SQL*Plus中直接运行脚本文件方法的熟悉程度。根据有关在SQL*Plus中如何直接运行脚本文件的介绍,完全可以断定选项C是正确的。因为SQL*Plus的START命令只能运行Oracle的脚本文件,所以选项A和B肯定是错误的。根据有关在SQL*Plus中如何生成脚本文件的介绍,可以知道创建脚本文件的SQL*Plus命令是SAVE,所以选项D也肯定是错误的。根据有关在SQL*Plus中如何编辑脚本文件的介绍,可以知道编辑脚本文件的SQL*Plus命令是EDIT(ED),所以选项E也肯定是错误的。
22、D
[解析] 这一题是测试对SQL*Plus的DEL命令用法的熟悉程度。根据有关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肯定也是错误的。
23、B
[解析] 这一题是测试对在SQL*Plus中直接运行脚本文件方法的熟悉程度。根据有关在SQL*Plus中如何直接运行脚本文件的介绍,完全可以断定选项B是正确的答案,因为只有“@”或START命令可以将指定脚本文件的内容装入SQL缓冲区中并运行。根据有关在SQL*Plus中如何编辑脚本文件的介绍,可知SQL*Plus命令GET是用来将脚本文件装入到SQL缓冲区中的,所以选项C肯定是错误的。根据有关在SQL*Plus中如何生成脚本文件的介绍,可知SQL*Plus命令SAVE是用来创建脚本文件的,所以选项D也肯定是错误的。我们并未介绍过&和EXECUTE命令。其实只要确定只有“@”或START命令可以直接运行脚本文件这一点,即使其他的命令都没有记住,也能正确回答这一问题。 24、D
[解析] 这一题是测试对常用的SQL*Plus命令的掌握程度。如果熟悉SQL*Plus命令,那么应该可以确定只有选项D是正确的。
如果对SQL比较熟悉,根据有关SQL(Structured Query Langruage)语言的介绍,可知:
INSERT、UPDATE、SELECT和DELETE都属于SQL语言的DML语句,所以选项A、B、C和E都不可能是正确答案;而RENAME属于SQL语言的DDL语句,所以选项F也不可能是答案。在本题的所有命令中只有DESCRIBE不属于SQL语言,所以选项D肯定是正确答案。
25、D
[解析] 这一题是测试对日期型数据处理的熟悉程度。根据有关日期型数据处理的介绍,可以知道:一个日期型数据和一个数字相减,其结果仍为日期型;一个日期型数据和一个数字相加,其结果仍为日期型。所以选项A、B和C肯定是错误的。
同样根据有关日期型数据处理的介绍,可以知道两个日期型数据相减,其结果为数字型,所以选项D肯定是正确的。
26、D
[解析] 这一题是测试对日期型数据的处理的熟悉程度。根据有关日期型数据处理的介绍,可以断定选项D是正确的。
27、B
[解析] 这一题是测试对单值函数嵌套的理解。根据有关单值函数嵌套的介绍,可以断定选项B是正确的,因为函数的解算次序为从里到外,最外层的函数最后计算,在这个SQL语句中,最后一个计算的函数是CONCAT。
28、A
[解析] 这一题是测试对单行函数NVL的理解。根据有关单行函数NVL的介绍,可知NVL中的表达式可以是数字型、字符型或日期型,所以可以断定选项A是正确的。
根据有关单行函数ROUND和TRUNC的介绍,可以知道这两个函数用于数字型或日期型的列,但不能用于字符型的列,所以选项B和C肯定都是错误的。
根据关单行函数SYSDATE的介绍,可以知道这个函数是系统日期函数,其功能是返回当前的系统时间,它可以用于日期型的列,但不能用于字符型的列,所以选项D肯定也是错误的。 29、A
[解析] 这一题是测试对单行函数LOWER的理解。根据有关单行函数LOWER的介绍,可知该函数用于把字符转换成小写,并检查本题SQL语句中的WHERE子句,我们会发现
“LOWER(description)='CABLE'”这个条件永远也不可能成立,因为等号左边永远是小写字符串而等号右边永远是大写字符串CABLE,所以选项A是正确的(这个SQL语句是正确的SQL语句)。 30、A
[解析] 这一题是测试对单行函数CONCAT和INITCAP的理解。根据关单行函数CONCAT的介绍,可知该函数用于把第1个字符串和第2个字符串连接成一个字符串,而根据有关单行函数INITCAP的介绍,可知该函数用于把每个词的头一个字符转换成大写,其余的转换成小写,再根据有关连接运算符的介绍,可知连接运算符由两个竖线(‖)表示,它用于把一个或多个列或字符串连接在一起,所以可以得出本题中的两个SQL语句将产生完全相同的显示结果,所以选项A肯定是正确的。因为本题的两个SQL语句的语法都是正确的,所以选项D肯定是错误的。
31、B
[解析] 这一题是测试对ROUND函数用于日期型数据的理解。根据有关单行函数ROUND的介绍,只有在ROUND函数中指明操作的单位为年(YEAR)时,它才能将23-MAY-00四舍五入成01-JAN-00,因为23-MAY-00是属于2000年的上半年,所以只有选项B是正确的。
32、C
[解析] 这一题是测试对单行字符型函数的理解。根据有关单行字符型函数的介绍,可知只有LENGTH函数用于返回列或表达式中字符串的长度,所以只有选项C是正确的。
因为NVL函数是空值转换函数,所以A肯定是错误的答案。因为SUBSTR函数用于返回指定的子串,所以选项B肯定是错误的。而CONCAT函数用于把两个字符串连接成一个字符串,所以选项D肯定也是错误的。又因为INITCAP函数用于把每个字的头一个字符转换成大写而其余的转换成小写,所以选项E肯定也是错误的。
33、D
[解析] 这一题是测试对分组函数和GROUP BY子句的理解。根据有关GROUP BY子句的特殊用法以及非法操作的介绍,可知如果在一个查询中使用了分组函数,则任何不在分组函数中的列或表达式必
须在GROUP BY子句中,所以本题的SQL语句中的SELECT子句会产生错误,因为id_number既没有在分组函数中也没有在GROUPBY子句中,因此选项D肯定是正确的。而其他三个子句都是正确的子句,所以选项A、B和C不可能是正确的答案。
34、C
[解析] 这一题是测试对分组函数SUM的理解。根据有关分组函数SUM的介绍,可知该函数用于返回表达式的总和,可以断定选项C肯定是正确的。
因为要将订单的订货日期以„DD MON YYYY?的格式显示要使用TO_CHAR函数进行转换,而TO_CHAR函数并不是分组函数,所以选项A肯定是错误的。因为要将字符串„January 23 2010?转换成日期格式需要使用TO_DATE函数进行转换,而TO DATE函数也不是分组函数,所以选项B肯定是错误的。因为将某一类的值全部转换成小写字母需要使用LOWER函数进行转换,而LOWER函数也不是分组函数,所以选项D肯定是错误的。
35、A
[解析] 这一题是测试对单行函数NVL和逻辑运算符AND的理解。根据本有关单行函数NVL的介绍和有关逻辑运算符AND的介绍,我们可以确定只有选项A是正确的,而其他的三个选项都不可能正确。在这个SQL语句中正是NVL(finance_charge, 0),25使得要求(2)和(3)可以同时满足。 36、B
[解析] 这是一个比较复杂的问题,该题是测试对单行函数NVL、逻辑运算符AND以及空值排序的理解。参考的知识包括有关单行函数NVL的介绍、有关逻辑运算符AND的介绍以及有关空值的排序的介绍。
接下来,详细解释一下这个SQL语句的大致执行
:
(1)首先根据WHERE manufacturer_id LIKE 'NF10032'子句获取全部manufacturer_id为NF10032的数据行(产品),实际上一共有三行,它们的价格(cost)分别是3.00、4.20和NULL。
(2)执行AND NVL(cost, 0),5.00子句中的NVL(cost, 0)函数,将NULL转换成0。随后选择那些COST小于5.00的全部数据行,实际上三行数据都满足。此时,就可以排除所有只有两行数据的结果了,因此选项A完全可以排除。
(3)利用ORDER BY quantity DESC, cost子句对选取的所有数据行进行排序,由于在这个题中所选中的三行数据的quantity各不相同,所以根本不用考虑COST的排序。要注意的是这里的description为AAA 8pk-battery的产品的quantity为NULL,所以按降序应该排列在最前面,其实到此为止已经可以确定正确的答案肯定是选项B了,因为只有在选项B中description为AAA 8pk-battery的产品排在最前面。接下来的description为从2pk-battery的产品排列在第2位,最后一个是description为AAA 6pk-battery的产品。
37、D
[解析] 这个问题并不较复杂,它只是测试对空值操作的理解。根据有关含有空值的表达式运算的介绍,可知无法证明NULL等于某个值,也无法证明NULL不等于某个值,我们可以断定选项A、B和C肯定是错误的,这里选项B中的“,,”和选项C中的“!=”都是不等于运算符。判断一个列的值是否为空值(NULL)要使用IS NULL,所以只有选项D是正确的。
38、A
[解析] 这一题是测试对逻辑操作符AND和OR以及运算符的优先级的理解。根据有关逻辑表达式和逻辑运算符的介绍和有关运算符优先级的介绍,可以知道逻辑与(AND)操作优先于逻辑或(OR)操作。接下来,详细解释一下这个SQL语句大致的执行流程:
(1)根据运算符的优先级,该SQL语句将首先计算表达式bonus IN(190, 500, 600) AND
bonus BETWEEN 250 AND 500,根据有关逻辑与的规则,可知只有当两个条件都为T时,AND逻辑表达式的结果才为T,所以这个表达式的返回值为500
(2)接下来,SQL语句将计算表达式(bonus BETWEEN 1 AND 250)OR 500。实际上,这个表达式结果是1,250(包括1和250)或500的全部值,在所给的选项中只有100满足这个条件,所以只有选项A正确。
39、D
[解析] 这道题并不复杂,它只是测试对于空值操作的理解,可以轻而易举地确定选项D是正确的。因为WHERE subject_id!=NULL子句中的“!=”操作符不能用于空值,subject_id!=NULL将永
远是假(FALSE),所以这个查询不会产生任何结果。
40、C
[解析] 这个问题并不较复杂,它只是测试对逻辑操作符AND的理解。根据有关逻辑操作符AND的介绍,可知只有当两个条件都为T时AND逻辑表达式的结果才为T,从而可以确定只有选项C是正确的,而其他三个都是错的。
41、C
[解析] 这一题是测试对分组函数COUNT的理解。根据有关分组函数COUNT的介绍,可知该函数用于返回查询的行数而且COUNT(表达式)将返回表中所有表达式为非空的行数,而从CLASS表的最后一列可知这个表中的5行数据中有一行的instructor_id为空值(NULL),所以这个SQL语句将显示4(因为NULL不参与计数运算),也就是说选项C是正确的。
42、B
[解析] 这一题是测试对HAVING子句、WHERE子句、GROUP BY子句、ORDER BY子句以及SELECT子句的理解。因为SELECT子句与限制查询语句的返回行无关,所以选项A可以排除。因为GROUP BY子句进行分组操作并不限制查询语句的返回行,所以选项C同样可以排除。因为ORDER BY子句用于排序操作也与限制查询语句的返回行无关,所以选项D也可以排除。
根据关于如何限制所选择的数据行(选择操作)的介绍,可知用WHERE子句来限制哪些行(记录)要显示,所以我们可以确定选项B是正确的。在这一题中可能造成混淆的是选项E,不过根据有关HAVING子句的介绍,可知HAVING子句用来限制查询语句所返回的是分组而不是具体的行,所以可以肯定选项E不是正确答案。
43、B
[解析] 这一题并不是很复杂,它只是测试对含有空值的表达式运算的理解。根据有关含有空值表达式运算的介绍,可知只要在一个表达式中包含任何NULL,该表达式的值就为NULL,所以完全可以确定只有选项B是正确的,因为如果quantity的值为空值,那么表达式100/quantity肯定也是空值。 44、B
[解析] 这一题是测试对NVL函数的理解。根据有关NVL函数向介绍,可以确定只有选项B是正确的。
根据上一题的分析,选项A中的SQL语句的表达式应该返回NULL,所以可以排除。因为并没有NULL这个函数而TO_CHAR是将一个数字转换成一个字符串,所以选项C和D也可以排除。在选项E的SQL语句中,NVL(100/quantity, '999.00')中的数据类型不匹配,所以系统不会正确执行这个语句,因此选项E也不可能是正确答案。
45、B
[解析] 这一题是测试对HAVING子句的理解。根据有关HAVING子句的介绍,可知WHERE子句不能用于限制分组函数,在Oracle中应该使用HAVING子句来限制分组函数,所以可以确定WHERE AVG(list_price),60.00子句是错误的,即选项B是正确的。
在本题的SQL语句中,子句FROM product、GROUP BY supplier_id和ORDER BY AVG(cost)DESC都是正确的,所以选项A、C和D都不是本题的答案。
46、A
[解析] 这一题是测试对多表连接的熟悉程度。根据有关自连接的介绍可知,可以通过把一个表定义两个不同的别名的方法来完成自连接,通过观察FROM子句可以断定选项A是正确的,因为FROM之后的两个表的别名都是通过同一个表inventory来定义的。
47、A
[解析] 这一题是测试对外连接的熟悉程度。根据有关外连接的介绍,可知外连接的连接运算符为“(+)”,该连接运算符既可以放在等号的左边也可以放在等号的右边,但一定要放在缺少相应信息的那一边,所以可以确定选项A是正确的。
48、B
[解析] 这一题是测试对多表连接的熟悉程度。根据有关相等连接的介绍可知,连接的条件放在WHERE子句中,我们可以断定选项B是正确的。
49、B
[解析] 这一题是测试对不相等连接的熟悉程度。根据有关不等连接的介绍可知,使用除了等号以外的其他的运算符所产生的连接叫不等连接,可以确定选项B是正确的。如果列名可能混淆的话,应该
在列名前冠以表名或表的别名,所以选项A肯定是错误的。
50、A
[解析] 这一题是测试对相等连接的熟悉程度。根据有关相等连接的介绍,可以断定选项A是正确的。因为所有在连接条件中使用了“(+)”的都是外连接,也就是说它们不是相等连接,所以选项B和C肯定可以排除。在选项D的WHERE子句中的条件i.manufacturer id=i.manufacturer_id不是一个正确的连接条件,因为等号两边的manufacturer_id来自同一个表,所以选项D也可以排除。 51、A
[解析] 这一题是测试对单行子查询的熟悉程度。根据有关WHERE子句中的单行子查询的介绍,可知单行子查询的比较关系符包括“,”(大于)、“,=”(大于等于)、“,”(小于)、“,=”(小于等于)、“=”(等于)和“,,”或“!=”(不等于),所以可以断定选项A是正确的。
52、AD
[解析] 这一题是测试对外连接和连接附加条件的熟悉程度。根据有关连接附加条件的介绍可知,可以直接在查询语句中用AND加入附加条件,所以可以确定选项D是正确答案。
根据有关左外连接和右外连接的介绍,以及有关全外连接的介绍得知所有种类的外连接的连接条件都是由ON子句定义的,再根据有关使用ON子句的介绍,可知相等连接条件放在ON子句中,从而可以确定选项A也是正确的。
53、CE
[解析] 这一题测试的范围比较广,该题是测试对SQL:1999语法的连接的熟悉程度。因为题目要求为只有在产品表中有供应商的那些产品才可以包括在清单中,所以可以确认所需要的连接肯定不是外连接,所以选项A可以排除,因为左连接是外连接,而实际上所需的连接是相等连接。
根据有关使用ON子句的连接的介绍,可知相等连接条件放在ON子句中,选项B也可以排除,因为ON (supplier_id)有语法错误。
从PRODUCT和SUPPLIER表的定义可以看出:在这两个表中都包含了supplier_id而且它们的数据类型也相同,根据有关SQL:1999语法的自然连接的介绍,可以断定选项C是正确的。
根据有关使用USING子句的连接的介绍,可知USING子句引用的列在SQL语句中的任何地方都不能冠以表名或别名,选项D也可以排除,因为USING(p.supplie_id)有语法错误。
同样根据有关使用USING子句的连接的介绍,可以断定选项E是另外一个正确的答案。其实,只要排除了选项A、B和D之后,根据题目的要求就可以确定选项C和E是答案了。
54、B
[解析] 这一题比较复杂,该题测试对自连接的熟悉程度。根据本题的FROM子句,可以断定这是一个自连接语句,因为两个表名相同。根据WHERE子句中的条件,选项A可以排除,因为连接条件中都是使用的dept_id,这里并没有上下级的关系。基于同样的原因,选项C也可以排除。由于这个SQL语句是一个正确的语句,所以选项D是错误的。
实际上,这个SQL语句将显示每一个员工的部门号、名字和他们的全部同事(coworker)的名字,所以选项B是正确的。
在SELECT子句中,p.dept_id显示部门号,p.first_name‖''‖p.last_name employee将员工的姓和名连在一起显示并将列的标题显示为EMPLOYEE, c.first_name‖''‖c.last_namecoworker将同事的姓和名连在一起显示并将列的标题显示为COWORKER。
在WHERE子句中AND p.id,,c.id这一条件的目的是防止一个员工又显示成自己的同事(coworker)。
55、CE
[解析] 这一题是比较复杂的,该题测试对不等连接的熟悉程度。首先仔细阅读本题的要求——运输价格是通过比较SHIPPING COST表中产品重量的下限和上限来计算的,从这一要求可知所需要的连接只能是不等连接,因此选项A和B可以排除。根据有关使用USING子句连接的介绍,选项D也可以排除,因为USING后面只能跟列名。其实,现在结果已经很清楚了,即选项C和E是正确答案。
根据有关不等连接的介绍,可以确定选项C是正确的。根据有关使用ON子句连接的介绍,可以确定选项E也是正确的。
56、CD
[解析] 这一题看上去比较复杂,该题测试对外连接的熟悉程度。首先,仔细阅读本题的要求——该报
表必须包括所有的教师,即使那些目前没有任课的教师也要包括在报表中,从这一要求可知所需要的连接只能是外连接,所以选项A可以排除,因为它是笛卡尔乘积。
根据有关外连接的介绍,可知外连接的连接运算符为“(+)”而且该运算符一定要放在缺少相应信息的那一边,所以选项C肯定是正确的而选项E是错误的,因为class(别名为c)中可能缺少某些教师的信息(即这些教师没有任课)。根据有关左外连接的介绍,我们可以确定选项D也是正确的。
选项B的左外连接SQL语句将列出所有的课程,其中也包括了那些没有教师任课的课程,所以选项B肯定是错误的。
根据有关使用ON子句连接的介绍,可知NATURAL JOIN子句和ON子句是互斥的,所以选项F可以排除。
57、A
[解析] 这一题是测试对单行子查询的熟悉程度。根据有关WHERE子句中的单行子查询的介绍可知,单行子查询的比较关系符包括“,”、“,=”、“,”、“,=”、“=”和“,,”或“!=”,而且单行子查询必须返回单一的行,所以只有选项A是正确的。
58、D
[解析] 这一题比较复杂,该题测试对单行子查询的熟悉程度(在这一题中实际上是寻找最佳的答案)。根据有关WHERE子句中的单行子查询的介绍,可以确定选项D是正确的答案。选项D其查询语句可以如下:
SELECT CUSTOMER_ID, name
FROM CUSTOMER
WHERE CREDIT_LIMIT,
(SELECT CREDIT_LIMIT
FROM CUSTOMER
WHERE CUSTOMER_ID=30450);
因为今天下了订单的全部客户的名字的操作可以使用连接操作来完成,所以选项A可以排除,其查询语句可以如下:
SELECT CUSTOMER_ID, name
FROM CUSTOMER C, CURR_ORDER O
WHERE C.CUSTOMER_ID=O.CUSTOMER_ID
AND O.ORDER_DATE=SYSDATE;
因为确定CUSTOMER_ID为30450的客户今年所下的订单数量的操作根本就不需要子查询,所以选项B同样也可以排除。其查询语句可以如下:
SELECT COUNT(TOTAL)
FROM CURR_ORDER
WHERE CUSTOMER_ID=30450
AND ORDER_DATE,=TRUNC(SYSDATE, 'YEAR');
因为确定今年开了账号的所有客户的平均信用限额同样不需要子查询,所以选项C也可以排除。其查询语句可以如下:
SELECT avg(CREDIT_IMIT)
FROM CUSTOMER C, CURR_ORDER O
WHERE C.CUSTOMER_ID=O.CUSTOMER_ID
AND ORDER_DATE,=TRUNC(SYSDATE, 'YEAR'); 59、A
[解析] 这一题测试对单行子查询的理解,要找到职位与SMITH相同的所有员工,显然员工SMITH的职位是未知的。另外,上一题的查询语句中CUSTOMER ID为30450的客户的信用限额也同样是未知的,而子查询正适合于这类情况,所以选项A是正确的。
因为GROUP BY子句用于分组操作,所以选项B是错误的。因为ORDER BY子句是用于排序操作,所以选项C是错误的。因为一个带有OR条件的WHERE子句表示至少有两个条件,所以选项D也应该排除。
60、D
[解析] 这一题是测试对单行子查询的熟悉程度。根据有关WHERE子句中的单行子查询的介绍,可以确定选项D是正确的。实际上,选项D是子查询与主查询使用了两个不同的表,其查询语句可以如下:
SELECT patient_id
FROM PATIENT
WHERE admit_date,
(SELECT hire_date
FROM PHYSICIAN
WHERE PHYSICIAN ID=某个理疗师的ID);
因为分组函数(SUM、AVG、MIN、MAX和COUNT)无法显示某个理疗师(physician)被雇佣之后所有注册的病人(patient),所以选项A肯定可以排除。因为HAVING子句是用来限制分组之后的数据行的,所以选项B也肯定可以排除。
MERGE语句并未介绍过,其实即使不了解MERGE语句也可以正确地回答这一问题。下面简单地介绍一下MERGE语句:
MERGE语句是Oracle9i引入的一个DML语句,这个语句是为了将数据从一个表导入到另一表而设计的,其目的主要是支持数据仓库的操作。随着时间的流逝,在生产数据库中,一些大型表如订单表中的一些旧的订单在日常工作中已经很少使用,但是这些数据还可以用作商业智能的分析以帮助管理者快速地做出正确的决策,因此就需要将这些数据从生产表中转移到数据仓库表中。大型和超大型公司可能有许多DBA,因此在进行这类数据转移操作时,很难确定之前是否有其他的DBA已经完成了这样工作(也可能自己忘了)。在这种情况下,可以使用MERGE语句。
MERGE语句的操作是这样的。如果将数据导入目标表时,数据已经存在,则执行UPDATE(更新)操作,否则就执行INSERT(插入)操作,这样就不会出现一行数据被多次插入的现象。基于以上的介绍,可以肯定选项C不可能是正确的。
61、D
[解析] 这一题是测试对单行子查询的熟悉程度和对分组操作的理解。因为在WHERE子句中不允许使用分组函数,所以选项A的SQL语句会返回语法错误,因此选项A可以排除。如果在一个SQL语句中使用了分组函数,在SQL语句中的每一列要么在分组函数中,要么在GROUP BY子句中的规则,选项B和C都是错误的。
虽然选项D和E的语法都是正确的,但是根据题目的要求——显示那些信用限额大于所有客户平均信用限额的客户,选项E肯定是错误的,因为它的WHERE子句中使用的是“=”。而选项D的WHERE子句中使用的是“ ,”运算符,所以只有选项D是正确的。
62、D
[解析] 这一题是测试对表之间的连接概念的理解。根据外键和引用完整性的介绍,可知关系数据库工作的机制是控制冗余,控制冗余就是数据库中的表通过共享相同的键属性的介绍(列)把它们链接在了一起。仔细检查PATIENT和PHYSICIAN表中的每一列,可以发现在这两个表中没有能够产生控制冗余的相同列(common column),所以选项D是正确的。
这里需要指出的是PATIENT表中的last_name和first_name与PHYSICIAN表中的last_name和first_name并不相同,因为它们分别代表病人和理疗师的名字。 63、D
[解析] 这一题是测试对在连接操作中表别名的使用的理解。根据有关连接中表别名使用的介绍,可知别名一经定义,在整个查询语句中就只能使用表的别名而不能再使用表名,因此完全可以确定只有选项D是正确的。
本题的ORDER BY子句是正确的,所以不需要做任何修改。如果在该子句中使用表名反倒变成错误的了,所以选项A是错误的。如果从该子句中去掉表的别名,并且只使用列名该子句也是错误的,所以选项E是错误的。因为在WHERE子句中根本就没有使用表的别名,所以也就没法去掉。而且造成这个SQL语句出问题的原因正是在WHERE子句没有使用表的别名,因此选项B也肯定是错误的。因为在SELECT列表中包括order_amount列并不能更改在WHERE子句中的错误,所以选项C也是错误的。