- 论坛徽章:
- 0
|
做了两张表试验了一下,结果如下:
因为只是通过运行结果猜测,所以可能有理解错误的地方,希望大家指正
sql1:
SELECT
*
FROM
T1, T2
WHERE
T1.C1 = T2.C2(+)
AND T1.C2 = T2.C2(+)
AND T1.C3(+) = 'XXX'
AND T2.C3(+) = 'YYY'
相当于:--------------------------------------------------------------------
sql2:
SELECT
*
FROM
T1
LEFT JOIN
T2
ON
T1.C1 = T2.C2 AND T1.C2 = T2.C2 AND T2.C3 = 'YYY'
WHERE
T1.C3 = 'XXX'
T1.C3(+) = 'XXX'会影响到选择结果的纪录数,而 T2.C3(+) = 'YYY'不会影响到选择结果的纪录数,所以 T1.C3(+) = 'XXX'等同于T1.C3 = 'XXX'
也就是说,sql1 等同于:
sql3:
SELECT
*
FROM
T1, T2
WHERE
T1.C1 = T2.C2(+)
AND T1.C2 = T2.C2(+)
AND T1.C3 = 'XXX'
AND T2.C3(+) = 'YYY'
关于"字段(+)=值",是不是可以这样理解:
如果“字段(+)”是主表(T1)的字段,那么选择结果中不会出现“字段 <> 值”的记录。
如果“字段(+)”是连接表(T2)的字段,那么选择结果中,“字段 <> 值”的记录可以被选出来,但记录中T2表的相关字段的值都是NULL。
我这么理解的是否正确? 欢迎大家指正 |
|