我在閱讀「Inside Microsoft SQL Server 2008 Querying」一書。在第95頁, 作者解釋除法運算符的例子;基本上它返回了所有來自美國的員工都處理過至少一個訂單的所有客戶。如何理解INSIDE SQL Server 2008查詢中有關除法運算符的查詢?
查詢就像這樣。
USE InsideTSQL2008;
SELECT custid
FROM Sales.Customers AS C
WHERE NOT EXISTS (SELECT *
FROM HR.Employees AS E
WHERE country = N'USA'
AND NOT EXISTS (SELECT *
FROM Sales.Orders AS O
WHERE O.custid = C.custid
AND O.empid = E.empid));
首先,下面兩部分得到了美國員工處理的所有訂單。正確?
(SELECT *
FROM HR.Employees AS E
WHERE country = N'USA'
SELECT *
FROM Sales.Orders AS O
WHERE O.custid = C.custid
AND O.empid = E.empid);
如果是這樣,爲什麼他用NOT EXISTS
過濾掉這些訂單?
這個查詢的目標是找到所有的客戶,至少有一個訂單由所有美國員工處理,它會篩選出正確的,正如我所看到的。
其次,我看不到任何與查詢有關的運算符。這個查詢如何隨分割而來?
子查詢將返回與外部不具有相同'custid'的所有記錄。然後外面說給我我不是在子查詢中的每個記錄,基本上導致那些具有相同cusetid的記錄。不知道分隔線 – CodingYoshi