问题 多项选择题

以下是产品(PRODUCT)表和供应商(SUPPLIER)表的结构:
PRODUCT
-----------
PRODUCT_ID NUMBER
PRODUCT_NAMEVARCHAR2(25)
SUPPLIER_IDNUMBER
CATEGORY_IDNUMBER
QTY_PER_UNITNUMBER
UNIT_PRICE NUMBER(7, 2)
QTY_IN_STOCKNUMBER
QTY_ON_ORDERNUMBER
REORDER_LEVEL NUMBER
SUPPLIER
------------
SUPPLIER_IDNUMBER
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;

答案

参考答案:C,E

解析: 这一题测试的范围比较广,该题是测试对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是答案了。

单项选择题
单项选择题