軟件測試開發技術SQL Server應用技巧:內部連接和外部連接中NULLS的影

發表于:2009-10-09來源:作者:點擊數: 標簽:軟件測試SqlsqlSQLNULLS
軟件測試 開發 技術SQL Server應用技巧:內部連接和外部連接中NULLS的影 SQL Server 數據庫 關鍵字:SQL Server 應用技巧這篇SQLServer應用技巧的文章解釋了NULLS對數據操作的影響,以及通過內部連接和外部連接得到不同的查詢結果。 SQLServer開發人員必須了

軟件測試開發技術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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97