Oracle中的联合查询-自然连接/外连接/内连接

 

自然连接
select *
from r1 natural [inner] join r2 natural [inner] join r3
where P;
 
select A1,A2
from r1
natural [inner] join
r2,r3 where r2.A=r3.B;
 
自然连接中,匹配关系(relation,表)中属性(attribute,列)的属性名称相同的所有列,只保留所有属性名称都相同的元组(tuple,行),并显示出来;列出属性的顺序:首先列出两个关系中相同的属性,然后列出那些只存在在第一个关系中的属性,最后输出只存在第二个关系中的属性。
 
为了发扬自然连接的优点,同时避免不必要的相等属性带来的危险,SQL允许用户来指定需要那些列相等:
select *
from r1 [inner] join r2 using (attri_name);
 
注意事项:
1、如果在使用using关键字时,而且select的结果列表项中包含了using关键字所指明的那个关键字,那么请不要在select的结果列表项中对该关键字指明它属于哪个表。
2、using中仅能使用一个列名。
3、natural join关键字和using关键字是互斥的,也就是说不能同时出现。
 
外连接
1.左外连接
//自然连接(左外连接)
select *
from student natural left [outer] join grade;
//另一种左外连接方式(非自然连接)
select *
from student A left [outer] join grade B on A.id=B.id;
等价于
select *
from student A,grade B
where A.id=B.id(+);
2.右外连接
//自然连接(右外连接)
select *
from student natural right [outer] join grade;
//另一种右外连接方式(非自然连接)
select *
from student A right [outer] join grade B
on A.id=B.id;
select *
from student A,grade B
where A.id(+)=B.id;
3.全外连接
//自然连接(全外连接)
select *
from student natural full [outer] join on grade;
//另一种全外连接
select *
from student A full [outer] join grade B
on A.id=B.id;
 
(+)操作符只能出现在where子句中
 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含( +)操作符
(+)操作符只适用于列,而不能用在表达式上。
(+)操作符不能与or和in操作符一起使用。
(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
 
内连接
当省略outer和inner时,默认为内连接
select *
from student A [inner] join grade B on A.id=B.id;
等价于
select *
from student A,grade B where A.id=B.id;
select *
from student [inner] join grade using(id);
的结果类似于自然连接,不重复显示id列~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章