首页 > 代码库 > Oracle学习笔记(一)----------内、外连接

Oracle学习笔记(一)----------内、外连接

这么久终于可以静下来整理一下工作上学到的东西了(主要还是自己太懒了。。)

废话少说,正文开始

在公司里,数据库用的基本都是Oracle,所以就学了一下Oracle的一点知识,现在整理一下自己遇到的问题和学到的一些东西。

先说说自己经常搞混的内连接、外连接(大学里一直没搞懂。。)

数据表之间有很多种连接方式,如:内外连接等

 

一(内连接):

内连接就是我们经常说的等值连接或者自然连接。

内连接用连接 inner join(join)关键字连接表(或者直接用where和“=”号)。

直接上例子:

设有表如下:

学生表:

      

班级表,对应学生表中的classid:

--自连接  :只返回两张表连接列的匹配项。--以下三种查询结果一样。select * from student s inner join class c on s.classid=c.id; select * from student s join class c on s.classid=c.id;select * from student s,class c where s.classid=c.id;

自然连接结果:

内连接(自然连接)只匹配了符合条件的记录。

 

二(外连接):

外连接分为左外连接、右外连接以及全外连接。

1、左外连接(左边的表不加限制),用left out join(left join)关键字

还是举例子,还是上述的表:

--左连接 :列出左边表全部的,及右边表符合条件的,不符合条件的以空值代替。--在(+)计算时,哪个带(+)哪个需要条件符合的,另一个全部的。即放左即右连接,放右即左连接。--以下结果集相同。select * from student s left join class c on s.classid=c.id;select * from student s,class c where s.classid=c.id(+);

左外连接结果:

左外连接:列出右表符合条件的记录以及左表全部的记录,右表没有符合的用null表示。

Oracle可以用(+)表示外连接,当(+)跟在一个表的属性后面时,它表示哪个表需要符合条件。放在左边表示右外连接,放在右边表示左外连接。

 

2、右外连接(右边的表不加限制),用right out join(right join)关键字

看下面sql语句:

--右外连接 :与左连接一样,列出右边表全部的,及左边表符合条件的,不符合条件--的用 空值  替代。--(+)一样,它的位置与连接相反。select * from student s right join class c on s.classid=c.id;select * from student s,class c where s.classid(+)=c.id;

右外连接结果:

右外连接跟左外连接相同,只是要求符合条件的表不同(右外连接要求列出左表符合条件的记录)。

右外连接:列出左表符合条件的记录以及右表全部的记录,左表没有符合的用null表示。

Oracle可以用(+)表示外连接,当(+)跟在一个表的属性后面时,它表示哪个表需要符合条件。放在左边表示右外连接,放在右边表示左外连接。

 

3、全外连接(左右两表都不加限制),用full out join(full join)关键字

还是举例子:

--全连接 :产生M+N的结果集,列出两表全部的,不符合条件的,以空值代替。select * from student s full join class c on s.classid=c.id;

全外连接结果:

全外连接对两边的表都不加限制,列出左右两表所有的记录,没有符合条件的用null替代。

 

Oracle学习笔记(一)----------内、外连接