因为使用oralce常用到左右连接,所以把他们小结了一下,以备后用。
有两张表,表user_tab
字段为:userid,username,userdesc
内容为(共3行):
表role_tab
字段为:roleid,rolename,userid
内容为(共3行):
左右连接实际上说是联合查询的结果以哪个表为准
使用左连接:
select * from user_tab left join role_tab
on user_tab.userid=role_tab.userid
(另一种写法:
select * from user_tab,role_tab
where user_tab.userid=role_tab.userid(+)
)
结果以user_tab为准,也即是以左表为准,即使role_tab表中没有记录,该行也以空代替。
使用右连接:
select * from user_tab right join role_tab
on user_tab.userid=role_tab.userid
(另一种写法:
select * from user_tab,role_tab
where user_tab.userid(+)=role_tab.userid
)
结果以role_tab为准,也即是以右表为准,role_tab表有几行,才会显示几行
这里简单说一句,oracle的这两种写法的执行计划是不一样的。
使用全连接:
select * from user_tab full join role_tab
on user_tab.userid=role_tab.userid
使用交叉连接(不带where,就相当于求联接所涉及的表的笛卡尔积)
select * from user_tab cross join role_tab
也即:
select * from user_tab,role_tab