前言

其實(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)單的例子。

移動(dòng)開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xù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;

移動(dòng)開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式