TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
不管执行OUTER JOIN还是INNER JOIN,DBMS总是一次执行两个表的联合,因此为了在单一查询中连接3个或者3个以上的表,就需要进行多次JOIN连接。
实例 多表连接的综合运用(一)(下载表数据)
从TEACHER表、STUDENT表和COURSE表中查询所有教师的姓名、所在系、开设的课程名称以及选修这门课程的学生姓名及成绩。并要求显示的教师信息必须是他开设的课程在STUDENT表中有同学选修。
分析:
教师姓名、所在系信息是在TEACHER表中存储的,而教师开设的课程名称是在COURSE表中存储的,这里没有要求开设的课程名不能为NULL,所以STUDENT表和COURSE表采用左外连接的方式,而学生姓名和课程成绩信息是在COURSE表中存储的,这里要求教师所开设的课程在STUDENT表中有同学选修,也就是说,学生姓名和课程成绩信息不能为NULL,所以与STUDENT表的连接需要采用内连接。
实例代码: SELECT TNAME, T.DNAME,CNAME,SNAME,MARK FROM TEACHER AS T lEFT OUTER JOIN COURSE AS C ON T.CNO = C.CNO INNER JOIN STUDENT AS S ON T. CNO = S. CNO ORDER BY TNAME
运行结果如图所示。

再看看下面命令的结果:

下面再给出一个UNION集合并运算与多表连接联合使用的实例。
实例 多表连接的综合运用(二)
从STUDENT表中查询至少修过“计算机入门”或者“生物工程概论”两门课程中的一门的学生的学号、姓名及所修课程名和课程成绩。
分析:课程名及课程成绩信息在COURSE表中存储,而学生的学号、姓名信息在STUDENT表中存储,显然需要对二表通过课程号CNO字段进行等值内连接,分别查询满足两门课程之一的信息,而后进行集合并运算即可得到查询结果。
实例代码: SELECT SNO, SNAME, CNAME,MARK FROM STUDENT AS S INNER JOIN COURSE AS C ON S.CNO=C.CNO WHERE
CNAME = "计算机入门" UNION SELECT SNO, SNAME, CNAME,MARK FROM STUDENT AS S INNER JOIN COURSE AS C
ON S.CNO=C.CNO WHERE CNAME = "生物工程概论" ORDER BY SNO
运行结果如图所示。
源码下载:http://file.javaxxz.com/2014/10/28/235853781.zip |
|