Tsql2008查詢性能優化第一章---APPLY

   APPLY運算符涉及如下兩個步驟中的一步或兩步(取決於APPLY的類型):
          1.A1把右表表達式應用於左表的行。
          2.A2:添加外部行。
      Apply運算符把右表表達式應用左輸入中的每一行。右表表達式能夠引用左輸入中的列,對於左表中的每一行,都要計算一次右邊輸入的表達式。這一步會把左邊的每一行和來自右表達式的相應行進行匹配,並將生成的結果集合並起來,返回組合後的結果。
       Cross ApplyOUTER APPLY老是包含步驟A1,只有OUT APPLY才包含步驟A2。
       若是內部(右)表表達式爲外部(左)行返回的是空集,則CROSS APPLY不會返回該外部(左)行。而OUTER APPLY會返回這樣的行,對於內表表達式的屬性,則使用NULL做爲其佔位符。
       例:如下查詢返回類別爲汽車的兩個表中的數據:
SELECT  p.[d_id] ,
        p.[c_title] ,
        p.[e_title] ,
        p.[d_time] ,
        a.d_title
FROM    [DingTai].[dbo].[D_News_Product] AS p
        CROSS APPLY
        ( SELECT    c.d_id ,
                    d_title ,
                    c.d_time
          FROM      dbo.D_Category AS c
          WHERE     c.d_id = p.class_one
                      --ORDER BY  c.d_id DESC
         
        ) AS a
 
GO
------------------------返回結果---------------------
                  
 
 
*若是想返回不包含類爲汽車的數據則用OUT APPLY:
 
SELECT  p.[d_id] ,
        p.[c_title] ,
        p.[e_title] ,
        p.[d_time] ,
        a.d_title
FROM    [DingTai].[dbo].[D_News_Product] AS p
        OUTER APPLY ( SELECT    c.d_id ,
                                d_title ,
                                c.d_time
                      FROM      dbo.D_Category AS c
                      WHERE     c.d_id = p.class_one
                      --ORDER BY  c.d_id DESC
                     
                    ) AS a
 
GO
-----------------------結果------------------------------------------------------
-----------補充單詞知識------------------------------------------------------------
apply
英 [əˈplaɪ]
美 [əˈplaɪ]
vt.
申請; 塗; 應用,運用; 敷(藥);
vi.
申請,請求,適用; 適用,適合; 專心致志;
[例句]I am continuing to apply for jobs
我正在繼續找工做。

     Copyright © 2017 程英暾. All Rights Reserved.
相關文章
相關標籤/搜索