分类: Mysql/postgreSQL
2009-04-26 15:56:26
不管执行OUTER JOIN还是INNER JOIN,DBMS总是一次执行两个表的联合,因此为了在单一查询中连接3个或者3个以上的表,就需要进行多次JOIN连接。
实例24 多表连接的综合运用(一)
从TEACHER表、STUDENT表和COURSE表中查询所有教师的姓名、所在系、开设的课程名称以及选修这门课程的学生姓名及成绩。并要求显示的教师信息必须是他开设的课程在STUDENT表中有同学选修。
分析:教师姓名、所在系信息是在TEACHER表中存储的,而教师开设的课程名称是在COURSE表中存储的,这里没有要求开设的课程名不能为
NULL,所以STUDENT表和COURSE表采用左外连接的方式,而学生姓名和课程成绩信息是在COURSE表中存储的,这里要求教师所开设的课程在
STUDENT表中有同学选修,也就是说,学生姓名和课程成绩信息不能为NULL,所以与STUDENT表的连接需要采用内连接。
实例代码:
SELECT TNAME, T.DNAME,CNAME,SNAME,MARK |
运行结果如图9.40所示。
图9.40 多表连接的综合运用 |
下面再给出一个UNION集合并运算与多表连接联合使用的实例。
实例25 多表连接的综合运用(二)
从STUDENT表中查询至少修过“计算机入门”或者“生物工程概论”两门课程中的一门的学生的学号、姓名及所修课程名和课程成绩。
分析:课程名及课程成绩信息在USE表中存储,而学生的学号、姓名信息在STUDENT表中存储,显然需要对二表通过课程号CNO字段进行等值内连接,分别查询满足两门课程之一的信息,而后进行集合并运算即可得到查询结果。
实例代码:
SELECT SNO, SNAME, CNAME,MARK |
运行结果如图9.41所示。
图9.41 UNION集合并在多表连接联合中应用 |