概述: 平常用的左连接、右连接,都是外连接中的一种
- 所有的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)
)