这么久终于能够静下来整理一下工做上学到的东西了(主要仍是本身太懒了。。)sql
废话少说,正文开始数据库
在公司里,数据库用的基本都是Oracle,因此就学了一下Oracle的一点知识,如今整理一下本身遇到的问题和学到的一些东西。spa
先说说本身常常搞混的内链接、外链接(大学里一直没搞懂。。)3d
数据表之间有不少种链接方式,如:内外链接等code
一(内链接):blog
内链接就是咱们常常说的等值链接或者天然链接。class
内链接用链接 inner join(join)关键字链接表(或者直接用where和“=”号)。select
直接上例子:sql语句
设有表以下:im
学生表:
班级表,对应学生表中的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;
天然链接结果:
内链接(天然链接)只匹配了符合条件的记录。
二(外链接):
外链接分为左外链接、右外链接以及全外链接。
一、左外链接(左边的表不加限制),用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能够用(+)表示外链接,当(+)跟在一个表的属性后面时,它表示哪一个表须要符合条件。放在左边表示右外链接,放在右边表示左外链接。
二、右外链接(右边的表不加限制),用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能够用(+)表示外链接,当(+)跟在一个表的属性后面时,它表示哪一个表须要符合条件。放在左边表示右外链接,放在右边表示左外链接。
三、全外链接(左右两表都不加限制),用full out join(full join)关键字
仍是举例子:
--全链接 :产生M+N的结果集,列出两表所有的,不符合条件的,以空值代替。 select * from student s full join class c on s.classid=c.id;
全外链接结果:
全外链接对两边的表都不加限制,列出左右两表全部的记录,没有符合条件的用null替代。