sqlServer杂计

In与Exists的区别

    这两个函数是差不多的,但由于优化方案不同,通常NOT Exists要比NOT IN要快,因为NOT EXISTS可以使用结合算法二NOT IN就不行了,而EXISTS则不如IN快,因为这时候IN可能更多的使用结合算法。

    Select * from tableA Where exists(Select * From tableB Where tableB.ID=tableA.ID)

    这句相当于:Select * from tableA Where id in (Select ID From tableB)

    对于表tableA的每一条数据,都执行Select * From tableB Where tableB.ID=tableA.ID的存在性判断,如果表tableB中存在表tableA当前行相同的ID,则Exists为真,该行显示,否则不显示。

  • IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况
  • In确定给定的值是否与子查询或列表中的值相匹配
  • Exists指定一个子查询,检测行的存在

如:

select  *  from  T_CUSTOMER_INFO c INNER JOIN ACCOUNT a

ON c.id=a.AC_ID

where not EXISTS(

  select   ACCOUNT_NO  from  TRADED_LOG 

                                                                         where TRADED_DATE  between  convert(varchar(8),dateadd(mm,-1,getdate()),120) + '01' 

                                                                                                                                   and convert(varchar(10),cast(convert(varchar(8),getdate(),120) + '01' as datetime) - 1,120)

                                                                                                       AND right(ACCOUNT_NO,7)=c.ID)

SQL Server BETWEEN限制查询数据范围时同时包括了边界值

使用BETWEEN限制查询数据范围时同时包括了边界值,而使用NOT BETWEEN进行查询时没有包括边界值。
    实际上,使用BETWEEN表达式进行查询的效果完全可以用含有“>=”和“<=”的逻辑表达式来代替,使用NOT BETWEEN进行查询的效果完全可以用含有“>”和“<”的逻辑表达式来代替。

日期函数:

上月交易量:

select  ACCOUNT_NO , sum( LOT )  lot from  TRADED_LOG  where TRADED_DATE  between convert(varchar(8),dateadd(mm,-1,getdate()),120) + '01' and convert(varchar(10),cast(convert(varchar(8),getdate(),120) + '01' as datetime) - 1,120)  group by   ACCOUNT_NO

SQL Server 分页语句

http://www.cnblogs.com/szytwo/archive/2012/08/30/2663811.html

select  top(1) DST_AMOUNT, ACCOUNT_NO  from   CUSTRANS_LOG  WHERE  ACCOUNT_NO = '360677314 '  order by CREATE_DATE  DESC

原文地址:https://www.cnblogs.com/shz365/p/4150562.html