问题 多项选择题

以下是课程(CLASS)表和教师(INSTRUCTOR)表中的数据:

CLASS
CLASS_ID CLASS_NAME HOURS_CREDIT INSTRUCTOR_ID
1 Introduction to Accounting 3 4
2 Computer Basics 3 1
3 Tax Accounting Principles 3 4
4 American History 3 2
5 Basic Engineering 3
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);

答案

参考答案:C,D

解析: 这一题看上去比较复杂,该题测试对外连接的熟悉程度。首先,仔细阅读本题的要求——该报表必须包括所有的教师,即使那些目前没有任课的教师也要包括在报表中,从这一要求可知所需要的连接只能是外连接,所以选项A可以排除,因为它是笛卡尔乘积。
根据有关外连接的介绍,可知外连接的连接运算符为“(+)”而且该运算符一定要放在缺少相应信息的那一边,所以选项C肯定是正确的而选项E是错误的,因为class(别名为c)中可能缺少某些教师的信息(即这些教师没有任课)。根据有关左外连接的介绍,我们可以确定选项D也是正确的。
选项B的左外连接SQL语句将列出所有的课程,其中也包括了那些没有教师任课的课程,所以选项B肯定是错误的。
根据有关使用ON子句连接的介绍,可知NATURAL JOIN子句和ON子句是互斥的,所以选项F可以排除。

单项选择题
单项选择题