ORACLE 各种连接

it2022-05-05  88

数据说明:

select * from dave;ID  NAME 8 安庆 1 dave 2 bl 1 bl 2 dave 3 dba 4 sf-express 5 dmm select * from b1;ID  NAME 1 dave 2 bl 3 big bird 4 exc 9 怀宁

 

 

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  NAME 1 dave 1 dave 2 bl 2 b1 1 bl 1 dave 2 dave 2 b1 3 dba 3 big bird 4 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  NAME 1 dave 2 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  NAME 1 bl       1 dave 1 dave    1 dave 3 dba     3 big bird 4 sf-express   4 exc 2 dave     2 bl 2 bl      2 bl 5 dmm   --没有匹配到,为null 8 安庆  --没有匹配到,为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 NAME 1 dave     1 dave 2 bl       2 bl 1 bl       1 dave 2 dave      2   bl 3 dba      3 big bird 4 sf-express 4 exc 9 怀宁        --没有匹配到,为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 NAME 8 安庆   --NULL 1 dave       1 dave 2 bl         2 bl 1 bl         1 dave 2 dave       2 bl 3 dba      3 big bird 4 sf-express 4 exc 5 dmm --NULL --NULL      9 怀宁

 ---------20161125补充内容:

insert into b1 values('1','test'); insert into b1 values('1','test02'); select * from dave left join b1 on dave.id = b1.id; ID NAME       ID NAME 1 bl        1 dave 1 dave       1   dave 2 dave       2 b1 2 bl        2 b1 3 dba        3 big bird 4 sf-express    4 exc 1 bl        1 test 1 dave        1 test 1 bl        1 test02 1 dave        1 test02 5 dmm null 8 安庆    null

 

转载于:https://www.cnblogs.com/lyy-totoro/p/5927754.html


最新回复(0)