CREATE TABLE TB
(
ID VARCHAR2(50) DEFAULT(SYS_GUID()),
VAL VARCHAR2(50)
)
;CREATE TABLE TB2
(
ID VARCHAR2(50) DEFAULT(SYS_GUID()),
VAL VARCHAR2(50)
)
;CREATE TABLE TB3
(
ID VARCHAR2(50) DEFAULT(SYS_GUID()),
TBID VARCHAR2(50),
TB2ID VARCHAR2(50)
)
;INSERT INTO TB VALUES('A199FFD63CC14905B6FE4A3084ADE14D','A');
INSERT INTO TB VALUES('B2C0E92CC26749EB801B2813005ACE38','B');
INSERT INTO TB VALUES('6932B49F208E4873870657D75F3BD648','C');INSERT INTO TB2 VALUES('B71683A8C83B4FBF8538C8F3CFC1648F','1');
INSERT INTO TB2 VALUES('3919A505D8454481B9C9B6E678308523','2');
INSERT INTO TB2 VALUES('B373D1F7D2CE4B189D11B25BD693105F','3');INSERT INTO TB3 VALUES('F239229F26DC4B91BAC14411E89E681A','A199FFD63CC14905B6FE4A3084ADE14D','B373D1F7D2CE4B189D11B25BD693105F');
INSERT INTO TB3 VALUES('82BF3B599226444F8407BCC918101190','A199FFD63CC14905B6FE4A3084ADE14D','B71683A8C83B4FBF8538C8F3CFC1648F');
INSERT INTO TB3 VALUES('8BC8E6EEB3C442C0894B5ACA3EC22EDE','B2C0E92CC26749EB801B2813005ACE38','3919A505D8454481B9C9B6E678308523');
INSERT INTO TB3 VALUES('C8808C0B48AA4A06985A9B3C87F9BAB9','6932B49F208E4873870657D75F3BD648','B71683A8C83B4FBF8538C8F3CFC1648F');COMMIT;
SELECT *
FROM TB A
INNER JOIN TB2 B ON EXISTS(SELECT 1 FROM TB3 X WHERE A.ID=X.TBID AND B.ID=X.TB2ID)
ORDER BY A.VAL,B.VAL;
SELECT *
FROM TB A
LEFT JOIN TB2 B ON EXISTS(SELECT 1 FROM TB3 X WHERE A.ID=X.TBID AND B.ID=X.TB2ID)
ORDER BY A.VAL,B.VAL;
因为我不太了解Oracle的执行机制,请问为什么两查询出来的结果会不一样!
左连接
右连接
inner 是取两表条件相等的数据,
而left join 则是取左表所有的数据,右表不能关联上的数据补空显示。
我觉得你可以先找2个简单的表进行尝试一下,那样才会找出2个连接的不同之处,也会让你印象更加深刻。
是数据库原理的连接
楼主对表连接区别不清楚的话
可以好好看下数据库系统概论
可能这句话说得有语病!我是想说在10g两个语句查出来的结果集不一样,在11g或MS SQL中,两个语句查出来的结果是一样的!