T-SQL中的APPLY用法

Posted 咕咚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了T-SQL中的APPLY用法相关的知识,希望对你有一定的参考价值。

 上周和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 多了个s
AS
RETURN (
         SELECT ProductName,
                Price
         FROM   Product
         WHERE  ProductName like \'%\' + @KEYWORD +\'%\'
)
GO

然后我们将该函数,应用到  SearchString 表中的  String 字段中的,每一个值(行),并返回  于 SearchString 表相关联;

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

结果:

 

今后,我们就可以将要查询的关键字,存放在我们的  SearchString 表中,然后应用我们的 apply 和  SEARCHINFO 函数

 

 该操作符和CROSS APPLY的唯一区别是返回所有数据,包括没有匹配的值;

也就是我们的Star 会别列出来,

效果如图:

 

 我们也可以直接这样写:

SELECT * FROM SearchString AS S
CROSS 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用法的主要内容,如果未能解决你的问题,请参考以下文章

高级T-SQL进阶系列 上篇:使用 APPLY操作符

pandas GroupBy上的方法apply:一般性的“拆分-应用-合并”

T-SQL中的括号用法?

为啥 T-SQL CROSS APPLY 有时表现得像 LEFT JOIN

apply的用法

JS中的call()方法和apply()方法用法总结