您的位置:首页 > 数据库 > Oracle

oracle之连接实战

2016-02-21 13:07 453 查看
1.多表连接

语法:

select t1.字段1,t1.字段2......,t2.字段1,t2.字段2......from table1 t1,table2 t2 where t1.column = t2.column(建立两者连接的column)

说明:

两个表通过关联字段关联,分别在select中分别表的别名查询出目标字段

实例:

create table mytest(
id number(11) primary key,
name varchar2(10),
age number(3)
)

insert into mytest values(1,'one',18);
insert into mytest values(2,'two',18);
insert into mytest values(3,'three',22);
commit;

create table myline(
id number(11) primary key,
mytest_id number(11),
any_comment varchar(225)
)
insert into myline values(1,1,'第一');
insert into myline values(2,2,'第二');
insert into myline values(3,3,'第三');
commit;

select mt.id,mt.name,mt.age,me.any_comment from mytest mt,myline me where mt.id = me.mytest_id;


2.连接类型

(1)等值连接

where子句可以通过and增加多个连接条件,用表的别名简化查询,

select mt.id,mt.name,mt.age,me.any_comment from mytest mt,myline me where mt.id = me.mytest_id;


(2)非等值连接

使用不等号等建立连接关系

(3)自然连接(natural join)

基于两个表的同名列建立连接

select id,mt.name,mt.age,me.any_comment
from mytest mt natural join myline me
mytest表的id与myline表的id同名,根据两者建立两个表的关联关系。

同名列前不能有前缀,如上id为两个表的同名列,前面不能有前缀,显示两个同名列相同的数据行。

(4)Using

对于natural join连接时,是自动去匹配同名列,我们可以使用using指定两个表之间的连接桥梁,

参照列名id不能带前缀。

select id,mt.name,mt.age,me.any_comment
from mytest mt join myline me using(id)


(5)on

非同名列建立连接,通过on建立两个表之间的等值连接或任意不同名之间的关联。

select mt.id,mt.name,mt.age,me.any_comment
from mytest mt left outer join myline me on mt.id = me.mytest_id


(6)外链接

左外连接:以左边的表为主,返回左右能关联的数据,同时返回左边不能关联的数据,右边不能关联的不显示。

select mt.id,mt.name,mt.age,me.any_comment
from mytest mt,myline me where mt.id(+) = me.mytest_id;

select mt.id,mt.name,mt.age,me.any_comment
from mytest mt left outer join myline me on mt.id = me.mytest_id
 


右外连接:以右边的表为主,返回左右能关联的数据,同时返回右边不能关联的数据,左边不能关联的不显示。

select mt.id,mt.name,mt.age,me.any_comment
from mytest mt,myline me where mt.id = me.mytest_id(+);

select mt.id,mt.name,mt.age,me.any_comment
from mytest mt right outer join myline me on mt.id = me.mytest_id

 


全外连接:

(7)交叉连接

select mt.id,mt.name,mt.age,me.any_comment
from mytest mt cross join myline me


(8)内连接

查询所有满足连接条件的数据。

select mt.id,mt.name,mt.age,me.any_comment
from mytest mt inner join myline me on mt.id = me.mytest_id
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: