以下是课程(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可以排除。