这么久终于可以静下来整理一下工作上学到的东西了(主要还是自己太懒了。。)
废话少说,正文开始
在公司里,数据库用的基本都是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替代。