最后再来看看那个(+),需要注意的是只有当a.cs_code>=b.cs_code 不成立时才会用b.cs_name为空来补充。 --------------------------------------------------------------------------- 楼上説的一点不錯! SELECT a.CS_Code, a.CS_Tel, b.CS_Name FROM tableA a, tableB b WHERE a.CS_Code>=b.CS_Code没有那个(+)、得結果: CS_Code CS_TEL CS_NAME ------- ---------- ---------- 1 0111 zhang Hong 2 0222 zhang Hong 3 0333 zhang Hong 4 0444 zhang Hong 3 0333 Wang Jian 4 0444 Wang Jian
補充説明: ①現在清空tableB delete from tableB②再執行: SELECT a.CS_Code, a.CS_Tel, b.CS_Name FROM tableA a, tableB b WHERE a.CS_Code >= b.CS_Code(+) 結果: CS_Code CS_TEL CS_NAME ------- ---------- ---------- 1 0111 2 0222 3 0333 4 0444
用"WHERE a.CS_Code >= b.CS_Code(+)"
誰能給一個合理的説法?这就要看你的具体情况了。
你可以分开来理解:
= (+)
就是外连接,找到相等的。
>
就是找到大于的记录。
所以就找到所有A里面大于B的记录,同时列出相应的B来。但是楼主的结果为什么没有name为空的列呢? 期待中…………
INSERT INTO tableA VALUES ('0','0111');
就有空值了。
观察>=时得出的结果可知:
当a.cs_code = 1时,b.cs_code为1,3,
比较时发现a.cs_code > b.cs_code不成立,不会选出记录;
a.cs_code = b.cs_code只有一条记录成立,所以选出一条
记录,同时其b.cs_name= "ZHANG HONG"。
分析a.cs_code = 3的情况:
比较时,a.cs_code>b.cs_code 在当b.cs_code=1时成立,
选出记录,并且b.cs_name = "ZHANG HONG";
a.cs_code = b.cs_code 在b.cs_code = 3时成立,选出记录
并且b.cs_name = "WANG JIAN"。
最后再分析分析a.cs_code = 4的情况,当b.cs_code=1,3时
均成立,因此会选出两条记录。b.cs_name的值分别为b.cs_code
=1,3时的值。
最后再来看看那个(+),需要注意的是只有当a.cs_code>=b.cs_code
不成立时才会用b.cs_name为空来补充。(参见a.cs_code=b.cs_code
时选出的记录)
所以没有出现b.cs_name为空的记录。
不成立时才会用b.cs_name为空来补充。
---------------------------------------------------------------------------
楼上説的一点不錯!
SELECT a.CS_Code, a.CS_Tel, b.CS_Name
FROM tableA a, tableB b
WHERE a.CS_Code>=b.CS_Code没有那个(+)、得結果:
CS_Code CS_TEL CS_NAME
------- ---------- ----------
1 0111 zhang Hong
2 0222 zhang Hong
3 0333 zhang Hong
4 0444 zhang Hong
3 0333 Wang Jian
4 0444 Wang Jian
①現在清空tableB
delete from tableB②再執行:
SELECT a.CS_Code, a.CS_Tel, b.CS_Name
FROM tableA a, tableB b
WHERE a.CS_Code >= b.CS_Code(+)
結果:
CS_Code CS_TEL CS_NAME
------- ---------- ----------
1 0111
2 0222
3 0333
4 0444