軟件測試開發技術SQL Server應用技巧:內部連接和外部連接中NULLS的影 SQL Server數據庫
關鍵字:SQL Server 應用技巧這篇SQL Server應用技巧的文章解釋了NULLS對數據操作的影響,以及通過內部連接和外部連接得到不同的查詢結果。
SQL Server 開發人員必須了解兩件事情:首先,內部連接和外部連接的差異;其次,NULLS對兩種連接操作的影響。這篇文章就涵蓋了這兩個方面。
讓我們一步步來分析問題。首先,內部連接和外部連接的差異,然后,查詢中NULLS的影響。為了研究內部連接和外部連接的差異,我們需要一些樣例數據。
假設我們有兩個數據表T1和T2,每個表中都含有數據列Testjoin。在數據表T1中,Testjoin列的數據值是1,2,3。在T2中,Testjoin列的數據值是NULL,2,3?;赥estjoin列的內部查詢將只會返回兩行,其中數值1和NULL無法連接。然而當為外部連接時,數值1和NULL卻可以連接。例如,下面查詢語句的返回值就是那些下了訂單的客戶所在的行。
SELECT CustomerID, OrderID FROM Customers Inner Join Orders
On Customers.CustomerID = Orders.CustomerID
(在許多商務交易中,這么做是有根據的,一些商務交易中,甚至規定了客戶必須至少下一個訂單。在我看來,數據庫的定義階段就應該反映這些商務交易規則,而不是在某些中間階段。當然,也存在著一些不同的情況。)
下面是一個外部連接:
SELECT CustomerID, OrderID FROM Customers LEFT OUTER JOIN Orders
OnOrders.CustomerID = Customers.CustomerID
它的返回值是所有的客戶列表,而不管客戶是否下了訂單。
運行列表A中的腳本來創建一個測試表格.
下面的SQL語句對外部連接和內部連接進行了比較:
SELECT InnerOuter.T1.T1ID, InnerOuter.T1.NameAS Name1,
InnerOuter.T2.T2ID, InnerOuter.T2.NameAS Name2
FROM InnerOuter.T1 LEFT OUTER JOIN
InnerOuter.T2 ON InnerOuter.T1.T1ID = InnerOuter.T2.T1ID
當運行了腳本中的兩個查詢之后,你會發現內部連接返回兩行,而外部連接返回了三行。即使再添加第三個數據表,結果仍是遵循同樣的規則。如列表B示:
如果你在select查詢語句中加了第三個表格,仍會得到同樣的結果:內部連接返回兩行,外部連接返回三行。如列表C示:
下面看看NULLS對不同的集合函數的影響。為了更好的理解,在表T2上增加一列空的money列,稱為Amount。在T2種增加一些行數據,如下所示:
原文轉自:http://www.anti-gravitydesign.com