前言
其實(shí)有些新的特性在SQL Server早就已經(jīng)出現(xiàn)過,但是若非系統(tǒng)的去學(xué)習(xí)數(shù)據(jù)庫你會(huì)發(fā)現(xiàn)在實(shí)際項(xiàng)目中別人的SQL其實(shí)是比較復(fù)雜的,其實(shí)利用新的SQL Server語法會(huì)更加方便和簡(jiǎn)潔,從本節(jié)開始我們將講述一些SQL Server中早已出現(xiàn)的新語法,簡(jiǎn)短的內(nèi)容,深入的理解,Always to reivew the basics。
初探APPLY運(yùn)算符
APPLY運(yùn)算符是一個(gè)非常強(qiáng)大的表運(yùn)算符,但是APPLY不是標(biāo)準(zhǔn)的,相對(duì)應(yīng)的標(biāo)準(zhǔn)叫做LATERAL,但是此標(biāo)準(zhǔn)并未在SQL Server中實(shí)現(xiàn)。像所有表運(yùn)算符一樣,該運(yùn)算符用于查詢的FROM子句中。APPLY運(yùn)算符支持的類型是CROSS APPLY和OUTER APPLY。CROSS APPY僅僅實(shí)施一個(gè)邏輯查詢處理階段,而OUTER APPLY實(shí)施了兩個(gè)階段,APPLY運(yùn)算符對(duì)兩個(gè)輸入表進(jìn)行操作,第二個(gè)可以是一個(gè)表表達(dá)式,我們將APPLY兩側(cè)的表分別叫做左側(cè)表和右側(cè)表,右側(cè)表通常是一個(gè)派生表或TVF(內(nèi)嵌表值函數(shù))。CROSS APPLY運(yùn)算符實(shí)施一個(gè)邏輯查詢處理階段-它將右側(cè)的表表達(dá)式應(yīng)用到左側(cè)表的每一行,并生成一個(gè)組合結(jié)果集的結(jié)果表。CROSS APPLYl類似于交叉聯(lián)接中的CROSS JOIN,但是使用CROSS APPLY運(yùn)算符,右側(cè)的表表達(dá)式可以對(duì)來自左側(cè)表的每一行表示一個(gè)不同的行集,這是與聯(lián)接的不同之處。當(dāng)在右側(cè)使用一個(gè)派生表,并且派生表查詢中引用來自左側(cè)表的屬性,就可以實(shí)現(xiàn)此目標(biāo),或者是在右側(cè)使用一個(gè)內(nèi)嵌TVF,可以傳遞左側(cè)的屬性作為輸入?yún)?shù),同樣可以實(shí)現(xiàn)此目的-摘抄自SQL Server 2012基礎(chǔ)教程。下面我們看一個(gè)簡(jiǎn)單的例子。
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;
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式