首页 > 代码库 > ORACLE 各种连接
ORACLE 各种连接
数据说明:
select * from dave;
ID NAME8 安庆1 dave2 bl1 bl2 dave3 dba4 sf-express5 dmm
select * from b1;
ID NAME1 dave2 bl3 big bird4 exc9 怀宁
1. inner join(join)
join默认为inner join.
以下3种写法的效果是一致的:
select * from dave a inner join b1 b on a.id = b.id;select * from dave a join b1 b on a.id = b.id;select * from dave a, b1 b where a.id = b.id;
ID NAME ID NAME1 dave 1 dave2 bl 2 b11 bl 1 dave2 dave 2 b13 dba 3 big bird4 sf-express 4 exc
自然连接natural join
寻找数据类型和列名相同的字段,自动将他们连接起来,并返回所有符合条件的结果。
下面两种写法的效果是一致的:
select * from dave a natural join b1 b;select a.id, b.name from dave a join b1 b on a.id = b.id and a.name = b.name;
ID NAME1 dave2 bl
注意:1. 如果自然连接的两个表有多个字段满足相同名称和类型,则会作为自然链接的条件
2. 如果数据类型不同,则会报错。
2. Outer join
LEFT JOIN /RIGHT JOIN/FULL JOIN. 通常省略OUTER。
(+)也可以用来表示外连接。
(一)+操作符只能在where子句中,不能与outer join同时使用。
(二)+操作符只能执行外连接,如果在where中包含多个条件,则所有条件都包含+操作符。
(三)+操作符只适用于列,而不能用在表达式上。
(四)+操作符不能与or in操作符一起使用。
(五)操作符只能用于实现左外连接和右外连接,不能用于全外连接。
2.1 左外连接left join +
+ 表示补充,哪个个表有加号,这个表就是匹配表。所以加号写在右表,左表就是全部显示,故是左连接。
以下三种写法的效果是一致的:
select * from dave a left join b1 b on a.id = b.id;select * from dave a left outer join b1 b on a.id = b.id;select * from dave a ,b1 b where a.id = b.id(+);ID NAME ID NAME1 bl 1 dave1 dave 1 dave3 dba 3 big bird4 sf-express 4 exc2 dave 2 bl2 bl 2 bl5 dmm --没有匹配到,为null8 安庆 --没有匹配到,为null
2.2 右外连接right join +
以下三种写法的效果是一致的:
select * from dave a right join b1 b on a.id = b.id;select * from dave a right outer join b1 b on a.id = b.id;select * from dave a ,b1 b where a.id(+) = b.id;ID NAME ID NAME1 dave 1 dave2 bl 2 bl1 bl 1 dave2 dave 2 bl3 dba 3 big bird4 sf-express 4 exc9 怀宁 --没有匹配到,为null
2.3 全外连接(full outer join/full join)
左表和右表都不做限制,所有的记录都显示,两表不足的地方用null填充。全外连接不支持(+)这种写法。
select * from dave a full join b1 b on a.id = b.id;ID NAME ID NAME8 安庆 --NULL1 dave 1 dave2 bl 2 bl1 bl 1 dave2 dave 2 bl3 dba 3 big bird4 sf-express 4 exc5 dmm --NULL--NULL 9 怀宁
ORACLE 各种连接
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。