Oracle?表之间的连接分为三种:
1.?内连接(自然连接)
2.?外连接
(1)左外连接?(左边的表不加限制)
?????? (2)右外连接(右边的表不加限制)
??????? (3)全外连接(左右两表都不加限制)
3.?自连接(同一张表内的连接)
?
?
SQL的标准语法:
select?table1.column,table2.column
from?table1?[inner?|?left?|?right?|?full?]?join?table2?on?table1.column1?=?table2.column2;
?
inner?join?表示内连接;
left?join表示左外连接;
right?join表示右外连接;
full?join表示完全外连接;
on子句?用于指定连接条件。
?
注意:
如果使用from子句指定内、外连接,则必须要使用on子句指定连接条件;
?????? 如果使用(+)操作符指定外连接,则必须使用where子句指定连接条件。
?
?
?
?
?
?
一.?内连接(Inner?Join/Join)
?
?
1.1??Inner?Join?
Inner?join逻辑运算符返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行。这个和用select查询多表是一样的效果,所以内连接用的很少。
还有一点要说明的就是Join?默认就是inner?join。?所以我们在写内连接的时候可以省略inner?这个关键字。?
?
?
?
1.2?下面举例来说明内连接:
1.2.1?先创建2张测试表并插入数据:
SQL>?select?*?from?dave;
ID? NAME
----------?----------
1? dave
2? bl
1? bl
2? dave
SQL>?select?*?from?bl;
ID? NAME
----------?----------
1? dave
2? bl
?
1.2.3?用内链接进行查询:
SQL>?Select?a.id,a.name,b.name?from?dave?a?inner?join?bl?b?on?a.id=b.id;???--?标准写法
????????ID?NAME???????NAME
----------?----------?----------
?????????1?dave???????dave
?????????2?bl?????????bl
?????????1?bl?????????dave
?????????2?dave???????bl
SQL>?Select?a.id,a.name,b.name?from?dave?a?join?bl?b?on?a.id=b.id;??--?这里省略了inner?关键字
????????ID?NAME???????NAME
----------?----------?----------
?????????1?dave???????dave
?????????2?bl?????????bl
?????????1?bl?????????dave
?????????2?dave???????bl
SQL>?Select?a.id,a.name,b.name?from?dave?a,bl?b?where?a.id=b.id;??--?select?多表查询
????????ID?NAME???????NAME
----------?----------?----------
?????????1?dave???????dave
?????????2?bl?????????bl
?????????1?bl?????????dave
?????????2?dave???????bl
?
???从这三个SQL?的结果我们也可以看出,他们的作用是一样的。
?
?
?
1.3?自然连接(Natural?join)
自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。
先看一下自然连接的例子:
SQL>?Select?id,name?from?dave?a?natural?join?bl?b;??
????????ID?NAME
----------?----------
?????????1?dave
?????????2?bl
?
这里我们并没有指定连接的条件,实际上oracle为我们自作主张的将,dave表中的id和name字段与bl表中的id和name字段进行了连接。也就是实际上相当于
SQL>?Select?dave.id,bl.name?From?dave?join?bl?on?dave.id?=?bl.id?and?dave.name=bl.name;
????????ID?NAME
----------?----------
?????????1?dave
?????????2?bl
?
因此,我们也可以将自然连接理解为内连接的一种。?
?
?
?
有关自然连接的一些注意事项:
(1).如果做自然连接的两个表的有多个字段都满足有相同名称个类型,那么他们会被作为自然