在詢問一下..
有兩張資料表..
Customers和Orders
假設
SELECT COUNT(custid)
FROM Customers;
計算出來的結果有91
然後下面敘述是這樣
SELECT c.custid,
c.companyname,
o.orderid
FROM Sales.Customers c
LEFT JOIN Sales.Orders o
ON c.custid=o.custid AND c.city='Paris';
有人上過M$的課程應該有看過這個SQL statement..
(這個敘述我相信confuse很多學習者..)
在現代的SQL parser, ON與JOIN通常都是成對出現的...
我的理解是這樣的
1. 先掃描FROM取得主表(Customers)來源生成VT1. (從前面知道Customers有91筆)
2. SQL Engine剖析到OUTER JOIN.
上述SQL語句是LEFT JOIN, 取得匹配出來的結果,
然後把從ON語句條件中從VT1沒有匹配到LEFT JOIN右表(right table; Orders)的那些VT1紀錄補回去.
我先用早期的INNER JOIN來看, 先得知匹配成功的結果
SELECT c.custid,
c.companyname,
o.orderid
FROM Customers c, Orders o
WHERE c.custid=o.custid AND c.city='Paris';
74 Customer YSHXL 10738
74 Customer YSHXL 10907
74 Customer YSHXL 10964
74 Customer YSHXL 11043
回傳四筆結果, 他們都是同一個custid..
因此, (91-1)+4=94. 這是從右表沒有匹配成功的紀錄(90)加上匹配成功的紀錄(4)的總資料數量
3. 生成VT2, 將94筆填進去傳回
4. 根據SELECT從VT2篩選, 生成VT3傳回
求SQL大佬看一下我這個理解是否正確???...

...