基础知识系列--Oracle的连接
2012-02-25 20:46
211 查看
从今天开始我决定每周抽出一些空闲时间,记录一下Oracle的一些基础知识,也算是方便用baidu和google的人吧。
今天介绍一个非常有数学气息的--连接。
首先介绍我今天需要使用的两张表,test1和test2。test1是学生基本信息表,包括学生的名字和学号;test2是成绩表,有学生学号,成绩这两列。
表的数据如下图:
test1:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520081551.png)
test2:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520181079.png)
这两个表由stu_id进行关联。
好了,现在介绍第一种连接形式:内连接。代码如下:
这中查询的结果是:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520213575.png)
很不幸,玄烨同学没去考试。因此查不出成绩来。但是我现在很想很想得到一张完全的成绩单,包括没去考试的玄烨同学,因为我要开家长会了,怎么办呢?这个时候就可以用到外连接:
结果如下:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520235791.png)
这里的基本原理就是关系代数,可以参考《数据库系统概论》(王珊,萨师煊)第二章的内容。
有左连接就有右连接。给test2增加几行,stu_id不在test1的记录。然后写这个SQL:
这样就取到了并不满足相等条件的test2中的记录,下图红框框中的:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520342715.png)
现在我想取到所有的,也就是说test1中没成绩的和test2中没有名字的记录,这个时候就要用到全外连接
得到的结果:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520375024.png)
还有种自然连接,平时我也不用,结果嘛,自己看吧。先看SQL:
结果:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520430191.png)
我感觉这个和以下的SQL结果是一样的:
也和第一个内连接的一样。自然连接还有好几种写法,这里就不一一介绍了,因为我平时工作也用不到,基本上不会,也就不抄书了。
今天介绍一个非常有数学气息的--连接。
首先介绍我今天需要使用的两张表,test1和test2。test1是学生基本信息表,包括学生的名字和学号;test2是成绩表,有学生学号,成绩这两列。
表的数据如下图:
test1:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520081551.png)
test2:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520181079.png)
这两个表由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;
这中查询的结果是:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520213575.png)
很不幸,玄烨同学没去考试。因此查不出成绩来。但是我现在很想很想得到一张完全的成绩单,包括没去考试的玄烨同学,因为我要开家长会了,怎么办呢?这个时候就可以用到外连接:
SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE FROM TEST1 T1 LEFT OUTER JOIN TEST2 T2 ON T1.STU_ID = T2.STU_ID;
结果如下:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520235791.png)
这里的基本原理就是关系代数,可以参考《数据库系统概论》(王珊,萨师煊)第二章的内容。
有左连接就有右连接。给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中的记录,下图红框框中的:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520342715.png)
现在我想取到所有的,也就是说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;
得到的结果:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520375024.png)
还有种自然连接,平时我也不用,结果嘛,自己看吧。先看SQL:
SELECT STU_ID, STU_NAME, SCORE FROM TEST1 T1 NATURAL JOIN TEST2 T2;
结果:
![](http://pic002.cnblogs.com/images/2012/352291/2012022520430191.png)
我感觉这个和以下的SQL结果是一样的:
SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE FROM TEST1 T1, TEST2 T2 WHERE T1.STU_ID = T2.STU_ID;
也和第一个内连接的一样。自然连接还有好几种写法,这里就不一一介绍了,因为我平时工作也用不到,基本上不会,也就不抄书了。
相关文章推荐
- java weblogic oracle相关连接基础知识收集
- 2. oracle学习入门系列之二 数据库基础知识
- Oracle基础知识(二十三) - 在Oracle的连接视图上进行数据更新操作
- SQL Server 2008高可用性系列:基础知识
- SQL连接,Oracle关联加号(+)等相关知识
- RealSense系列文章 - 2.基础连接
- oracle基础知识(2.2)
- [C#基础知识系列]全面解析C#中静态与非静态
- Oracle零散基础知识汇总
- 从零开始学_JavaScript_系列(48)——Promise(1)基础知识
- ptrace应用系列-基础知识
- PHP基础知识系列:interface 接口
- Oracle PL/SQL开发基础(第九弹:多表连接查询)
- XML系列——(一)基础知识
- oracle 客户端连接远程服务器 知识总结
- oracle基础知识,oracle sql练习
- oracle基础知识
- 【基础中心】笔记三--oracle连接远程数据库
- C#基础知识梳理系列十五:反射
- LDA基础知识系列 ----(1)共轭先验分布