前言
其實有些新的特性在SQL Server早就已經出現(xiàn)過,但是若非系統(tǒng)的去學習數(shù)據庫你會發(fā)現(xiàn)在實際項目中別人的SQL其實是比較復雜的,其實利用新的SQL Server語法會更加方便和簡潔,從本節(jié)開始我們將講述一些SQL Server中早已出現(xiàn)的新語法,簡短的內容,深入的理解,Always to reivew the basics。
初探APPLY運算符
APPLY運算符是一個非常強大的表運算符,但是APPLY不是標準的,相對應的標準叫做LATERAL,但是此標準并未在SQL Server中實現(xiàn)。像所有表運算符一樣,該運算符用于查詢的FROM子句中。APPLY運算符支持的類型是CROSS APPLY和OUTER APPLY。CROSS APPY僅僅實施一個邏輯查詢處理階段,而OUTER APPLY實施了兩個階段,APPLY運算符對兩個輸入表進行操作,第二個可以是一個表表達式,我們將APPLY兩側的表分別叫做左側表和右側表,右側表通常是一個派生表或TVF(內嵌表值函數(shù))。CROSS APPLY運算符實施一個邏輯查詢處理階段-它將右側的表表達式應用到左側表的每一行,并生成一個組合結果集的結果表。CROSS APPLYl類似于交叉聯(lián)接中的CROSS JOIN,但是使用CROSS APPLY運算符,右側的表表達式可以對來自左側表的每一行表示一個不同的行集,這是與聯(lián)接的不同之處。當在右側使用一個派生表,并且派生表查詢中引用來自左側表的屬性,就可以實現(xiàn)此目標,或者是在右側使用一個內嵌TVF,可以傳遞左側的屬性作為輸入參數(shù),同樣可以實現(xiàn)此目的-摘抄自SQL Server 2012基礎教程。下面我們看一個簡單的例子。
USE TSQL2012 GO SELECT C.custid, A.orderid, A.orderdate FROM Sales.Customers AS C CROSS APPLY (SELECT TOP(3) orderid, empid, orderdate, requireddate FROM Sales.Orders AS O WHERE O.custid = C.custid ORDER BY orderdate DESC, orderid DESC) AS A;