您的位置:首页 > 数据库 > Oracle

基础知识系列--Oracle的连接

2012-02-25 20:46 211 查看
从今天开始我决定每周抽出一些空闲时间,记录一下Oracle的一些基础知识,也算是方便用baidu和google的人吧。

今天介绍一个非常有数学气息的--连接。

首先介绍我今天需要使用的两张表,test1和test2。test1是学生基本信息表,包括学生的名字和学号;test2是成绩表,有学生学号,成绩这两列。

表的数据如下图:

test1:



test2:



这两个表由stu_id进行关联。

好了,现在介绍第一种连接形式:内连接。代码如下:

SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
FROM TEST1 T1
INNER JOIN TEST2 T2
ON T1.STU_ID = T2.STU_ID;


这中查询的结果是:



很不幸,玄烨同学没去考试。因此查不出成绩来。但是我现在很想很想得到一张完全的成绩单,包括没去考试的玄烨同学,因为我要开家长会了,怎么办呢?这个时候就可以用到外连接:

SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
FROM TEST1 T1
LEFT OUTER JOIN TEST2 T2
ON T1.STU_ID = T2.STU_ID;


结果如下:



这里的基本原理就是关系代数,可以参考《数据库系统概论》(王珊,萨师煊)第二章的内容。

有左连接就有右连接。给test2增加几行,stu_id不在test1的记录。然后写这个SQL:

SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
FROM TEST1 T1
RIGHT OUTER JOIN TEST2 T2
ON T1.STU_ID = T2.STU_ID;


这样就取到了并不满足相等条件的test2中的记录,下图红框框中的:



现在我想取到所有的,也就是说test1中没成绩的和test2中没有名字的记录,这个时候就要用到全外连接

SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
FROM TEST1 T1
FULL OUTER JOIN TEST2 T2
ON T1.STU_ID = T2.STU_ID;


得到的结果:



还有种自然连接,平时我也不用,结果嘛,自己看吧。先看SQL:

SELECT STU_ID, STU_NAME, SCORE FROM TEST1 T1 NATURAL JOIN TEST2 T2;


结果:



我感觉这个和以下的SQL结果是一样的:

SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE FROM TEST1 T1, TEST2 T2 WHERE T1.STU_ID = T2.STU_ID;


也和第一个内连接的一样。自然连接还有好几种写法,这里就不一一介绍了,因为我平时工作也用不到,基本上不会,也就不抄书了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: