TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
上面通过一个实例介绍了两表连接。实际上,SQL的SELECT语句中可以实现任意多个表的连接。创建连接的基本规则与已经介绍的两表连接相同,即在FROM子句中列出所要连接的表,在WHERE子句中指明连接关系。下面通过一个实例介绍一下多表连接应用。
实例3 在WHERE子句中进行多表连接
根据TEACHER表、COURSE表和STUDENT表,查询所有学生的姓名、所在系、所修课程、考试时间、课程成绩及授课教师姓名。实例代码:
SELECT SNAME, STUDENT.DNAME, CNAME, CTEST, MARK, TNAME
FROM TEACHER, COURSE, STUDENT
WHERE STUDENT.CNO = COURSE.CNO
AND TEACHER.CNO = STUDENT.CNO
ORDER BY SNAME
先看相关表:
例:
SELECT SNAME, STUDENT.DNAME, CNAME, CTEST, MARK, TNAME FROM TEACHER, COURSE, STUDENT
WHERE STUDENT.CNO = COURSE.CNO AND TEACHER.CNO = STUDENT.CNO ORDER BY SNAME 运行结果如图9.3所示。

例中,TEACHER表、COURSE表和STUDENT表的连接过程可按以下方式理解。
从STUDENT表中得到学生姓名SNAME、所在系DNAME以及课程成绩MARK信息。通过课程号CNO与COURSE表相关联,从而从COURSE表中得到课程名称CNAME和考试时间CTEST信息,这些信息与STUDENT表中的课程号CNO对应。通过课程号CNO与TEACHER表相关联,从而从TEACHER表中得到STUDENT表中的课程号CNO对应的教师姓名TNAME信息。 语句“WHERE STUDENT.CNO = COURSE.CNO AND TEACHER.CNO = STUDENT.CNO”,该语句隐含的含义为:只有同时存在于TEACHER表、COURSE表和STUDENT表中的课程号CNO的信息才会作为结果表中的记录。不满足这个条件的记录,结果表中也就不会有。 注意 由于TEACHER表和STUDENT表中都存在字段“DNAME”,所以在SELECT子句中,查询DNAME字段时,一定要指明表名,否则系统会报错。 可见,创建表的基本连接,只要遵守下面的基本原则即可。
FROM子句中应列出所有连接的表的表名。WHERE子句应定义连接的关联条件。
当列名为多个表共有时,要指明列的所在表,即采用“tablename.columname”的形式。
使用表别名
在SQL中,使用AS关键字可为列起别名。同样,在SQL中也可以使用AS关键字给表取别名,它可以简化操作,同时在某些表的连接中,也是必须用到的,如下面要介绍的表的自连接。语法如下。 SELECT column FROM table AS table_alias
说明:与给列定义别名相似,给表取别名,只需在表名后面接上AS关键字和要取的别名即可。在大多数实现方式中,AS关键字也不是必需的,只要新名称紧跟在实际表名之后即可。 说明 Oracle数据库系统不支持AS关键字,给表取别名只需在表名后直接接上别名即可。如语法中的table AS table_alias就可以表示为table table_alias。
实例4 对实例3采用表别名
实例代码: SELECT SNAME, S.DNAME, CNAME, CTEST, MARK, TNAME FROM TEACHER AS T, COURSE AS C, STUDENT AS SWHERE S.CNO = C.CNOAND T.CNO = C.CNOORDER BY SNAME
采用JOIN关键字建立连接
前面介绍的表的连接,是通过FROM子句列出要连接的表、WHERE子句列出连接条件来实现的。也可以在FROM子句中,通过连接关键字实现表的连接,这样有助于将连接操作与WHERE的搜索条件区分开来。语法如下。 SELECT ?column FROM ?join_table JOIN_TYPE ?join_table ON ?(join_condition)
join_table指出参与连接操作的表名。
JOIN_TYPE为连接类型,可分为4种:自然连接、内连接、外连接和交叉连接。其中:
自然连接JOIN_TYPE的形式为: NATURAL JOIN;
内连接JOIN_TYPE的形式为: INNER JOIN;
外连接,又分为左外连接,JOIN_TYPE的形式为: LEFT OUTER JOIN或LEFT JOIN;
右外连接,JOIN_TYPE的形式为: RIGHT OUTER JOIN或RIGHT JOIN;
全外连接,JOIN_ TYPE的形式为: FULL OUTER JOIN或FULL JOIN;
交叉连接中JOIN_TYPE的形式为: CROSS JOIN。
ON (join_condition) 子句指出连接条件,由被连接表中的列和比较运算符、逻辑运算符等构成。
在下节将详细介绍各种连接类型。
源码下载:http://file.javaxxz.com/2014/10/31/000042734.zip |
|