oracle中的join方式汇总

概述:  平常用的左连接、右连接,都是外连接中的一种

  • 所有的join连接,都可以加上类似where a.id='1'的条件,达到同样的效果。
  • 除了cross join不可以加on外,其它join连接都必须加上on关键字,后都可加where条件
  • 虽然都可以加where条件,但是他们只在标准连接的结果集上查找where条件

 不加任何条件,原始的 TableA 和 TableB 在表中的数据记录如下: 

 

  • 自连接示例:join ,inner join,如下3个sql的执行结果都一样

select * from TableA a inner join TableB b on a.classid=b.classid;
select * from TableA a join TableB b on a.classid=b.classid;
select * from TableA a,TableB b where a.classid=b.classid;

查询结果:

  • 左外连接示例:left join ,如下2个sql的执行结果都一样

select * from TableA a left join TableB b on a.classid=b.classid;
select * from TableA a,TableB b where a.classid=b.classid(+);

1 --左连接 :列出左边表全部的,及右边表符合条件的,不符合条件的以空值代替。
2 --在(+)计算时,哪个带(+)哪个需要条件符合的,另一个全部的。即放左即右连接,放右即左连接。

  • 右外连接示例:right join ,如下2个sql的执行结果都一样

select * from TableA a right join TableB b on a.classid=b.classid;
select * from TableA a,TableB b where a.classid(+)=b.classid;

  • 右外连接示例:full join 
--全连接 :产生M+N的结果集,列出两表全部的,不符合条件的,以空值代替
select * from TableA a full join TableB b on a.classid=b.classid;

  • 笛卡尔连接,cross join
  • 1 --笛卡儿乘积连接 :即不加任何条件,达到 M*N 的结果集。
    2 --以下两种查询结果一样。

select * from TableA a cross join TableB b;

select * from TableA a,TableB b;

注意:如果cross join加上where a.classid=b.classid条件,会产生跟自连接一样的结果:

select * from TableA a cross join TableB b on a.classid=b.classid;

create table TABLEA
(
STUID NUMBER(10) not null,
CLASSID VARCHAR2(20) not null,
STUNAME VARCHAR2(20)
)

create table TABLEB
(
CLASSID VARCHAR2(20) not null,
CLASSNAME VARCHAR2(20)
)

原文地址:https://www.cnblogs.com/xiaofeng91/p/15687868.html