用于理解join的例子

--第1组--       这个相当于全关联,只显示两个都存在的

SELECT * FROM a,b WHERE a.ID=b.ID;

 

SELECT * FROM a JOIN b ON a.ID=b.ID;

 

 

--第2组--

SELECT * FROM a LEFT JOIN b ON a.ID=b.ID AND a.NAME='a';

 

SELECT * FROM a,b WHERE a.ID=b.ID(+) AND a.NAME='a';

 

SELECT * FROM a,b WHERE a.ID=decode(a.NAME,'a',b.ID(+));

 

SELECT * FROM 

(SELECT * FROM a WHERE a.NAME='a') a LEFT JOIN b ON  a.ID=b.ID;

 

 

--第3组--

SELECT * FROM a RIGHT JOIN b ON a.ID=b.ID AND a.NAME='a';

 

SELECT * FROM a,b WHERE a.ID(+)=b.ID AND a.NAME(+)='a';

 

SELECT * FROM a,b WHERE a.ID(+)=b.ID AND a.NAME='a';

 

SELECT * FROM a RIGHT JOIN b ON a.ID=b.ID WHERE a.NAME='a';

 

SELECT * FROM a,b WHERE b.id=decode(a.NAME(+),'a',a.ID(+));

 

SELECT * FROM 

(SELECT * FROM a WHERE a.NAME='a') a RIGHT JOIN b ON  a.ID=b.ID;

 

 

--第4组--  2,3 (+)出现在and条件之后,是在关联前取它为空,然后关联,没有(+)是关联完了之后取b.id为空的情况

SELECT * FROM  a LEFT JOIN b ON a.ID=b.ID AND b.ID IS NULL;

 

SELECT * FROM  a,b WHERE a.ID=b.ID(+) AND b.ID(+) IS NULL;

 

SELECT * FROM  a,b WHERE a.ID=b.ID(+) AND b.ID IS NULL;

 

 

--第5组--

DROP TABLE c;

CREATE TABLE c 

AS

SELECT 1 ID,'a' NAME FROM dual UNION ALL

SELECT 5 ID,'x' NAME FROM dual;

 

SELECT * FROM a,b,c WHERE a.ID(+)=b.ID AND a.ID(+)=c.ID;

 

SELECT * FROM a RIGHT JOIN b ON a.ID=b.ID

RIGHT JOIN c ON a.ID=c.ID;

 

SELECT * FROM a,b WHERE a.ID(+)=b.ID OR a.NAME=b.NAME;

 

SELECT * FROM a,b WHERE a.ID(+)=b.ID OR a.NAME(+)=b.NAME;

 

SELECT * FROM a RIGHT JOIN b ON a.ID=b.ID OR a.NAME=b.NAME;

 

SELECT * FROM a,b WHERE a.ID=b.ID(+) AND a.NAME IN (SELECT 'a' FROM dual);

 

SELECT * FROM a,b WHERE a.ID=b.ID(+) AND b.NAME(+) IN (SELECT 'a' FROM dual);

 

SELECT * FROM a LEFT JOIN b ON a.ID=b.ID AND b.NAME IN (SELECT 'a' FROM dual);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值