T-SQL中的APPLY用法

來源:互聯網
上載者:User

標籤:money   obj   font   建立   nbsp   參考   led   查詢   多個   

 上周和team leader 討論問題的時候,

發現自己連 sqlserver 中的 apply  都不會用,趕快,今天來惡補一哈;

sql 指令碼準備;

IF object_id(‘dbo.Product‘) IS NOT NULL      DROP TABLE dbo.Product;  IF object_id(‘dbo.SearchString‘) IS NOT NULL      DROP TABLE dbo.SearchString;  IF object_id(‘dbo.FindProductLike‘) IS NOT NULL      DROP FUNCTION dbo.FindProductLike;     CREATE TABLE dbo.Product      (        ID INT IDENTITY ,        ProductNameVARCHAR(100) ,        Price MONEY      );  INSERT  INTO dbo.Product  VALUES  ( ‘Red SantaSuit‘, 199.99 ),          ( ‘Candy Canes‘, 1.99 ),          ( ‘Fake Snow‘, 2.99 ),          ( ‘Red Bells‘, 49.99 ),          ( ‘LED Lights‘, 6.99 );     CREATE TABLE dbo.SearchString      (        ID INT IDENTITY ,        String VARCHAR(100)      );     INSERT  INTO dbo.SearchString  VALUES  ( ‘Red‘ ),          ( ‘Lights‘ ),          ( ‘Star‘ );  GO  

還記得模糊查詢吧,如果,我們定義查詢的關鍵字為:

Red
Lights
Star

  我們的sql可能會這麼寫;

  SELECT * FROM Product WHERE ProductName LIKE ‘%‘ + ‘Red‘ + ‘%‘  SELECT * FROM Product WHERE ProductName LIKE ‘%‘ + ‘Lights‘ + ‘%‘  SELECT * FROM Product WHERE ProductName LIKE ‘%‘ + ‘Star‘ + ‘%‘

 當然 你可以可以 用多個 or 或者uion all 來 或者,動態sql 來拼接;

然後如果我增加,更過多的關鍵字呢,然後...........

 

我們可以考慮這樣做;建立一個ForSearch表,然後....

CROSS APPLY 就出場啦,

它會對相關聯的每一行都應用該函數;

我們先建立一個函數

CREATE FUNCTION SEARCHINFO(   @KEYWORD VARCHAR(100))RETURNS TABLE  ---這裡是我們的returns ---不是 return 多了個sASRETURN (         SELECT ProductName,                Price         FROM   Product         WHERE  ProductName like ‘%‘ + @KEYWORD +‘%‘)GO

然後我們將該函數,應用到  SearchString 表中的  String 欄位中的,每一個值(行),並返回  於 SearchString 表相關聯;

SELECT * FROM SearchString AS SCROSS APPLY SEARCHINFO(S.String)

結果:

 

今後,我們就可以將要查詢的關鍵字,存放在我們的  SearchString 表中,然後應用我們的 apply 和  SEARCHINFO 函數

 

 該操作符和CROSS APPLY的唯一區別是返回所有資料,包括沒有匹配的值;

也就是我們的Star 會別列出來,

效果

 

 我們也可以直接這樣寫:

SELECT * FROM SearchString AS SCROSS APPLY (   SELECT ProductName, Price   FROM Product   WHERE ProductName like ‘%‘ + S.String + ‘%‘) AS X

 

完美,再見,下班,回家

 

 

參考文獻:http://blog.csdn.net/dba_huangzj/article/details/48545951

這邊文章,基本是按照文獻寫的,但是看了之後,梳理思路,自己再寫一遍,效果會很好滴呀;

T-SQL中的APPLY用法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.