oracle 中 inner内连接、 left左连接、right 右连接用法

来源:互联网 发布:淘宝9.9限时抢购在哪里 编辑:程序博客网 时间:2024/06/03 14:43

 

左右连接实际说是我们联合查询的结果以哪个表为准~
 1. 内连接很简单
select A.*, B.* from A,B where A.id = B.id
select A.*, B.* from A inner join B on A.id = B.id
以上两句是完全等价的

2. 左外连接
select distinct(p.person_id) from t_pbase_info p, t_pcontact_info c where p.person_id = c.person_id(+)
select distinct(p.person_id) from t_pbase_info p left join t_pcontact_info c on p.person_id = c.person_id
以上两句是完全等价的

3. 右外连接
select distinct(p.person_id) from t_pbase_info p, t_pcontact_info c where p.person_id(+) = c.person_id
select distinct(p.person_id) from t_pbase_info p right join t_pcontact_info c on p.person_id = c.person_id
以上两句是完全等价的我们以右边 t_pcontact_info 表为准,则左表( t_pbase_info )中的记录只有当其ID在右边(t_pcontact_info )中存在时才会显示出来,没有相应数据时则用NULL代替

也就是说在oracle中+号放在=右边相当于左连接,而+号放在=左边相当于右连接 4、交叉连接(完全连接)cross join 不带 where 条件的
没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生6*3=18条记录)
select  *  from t_pbase_info p cross join t_pcontact_info c 等价于 select  *  from t_pbase_info p ,t_pcontact_info c 5、自连接个部门表,里面存放了部门及其上级部门,但都放在同一张表中,我们假设现在需要用SQL查询出各部门及其上级部门! 

这里除了使用自连接外,还使用了左连接,因为省电力没有上级部门,他是老大,如果使用内连接,就会把这条记录过滤掉,因为没有和他匹配的上级部门。
自连接用的比较多的就是对权形结构的查询!类似上表!

原创粉丝点击