SQLServer 2005 Inside - Query

1. ON筛选器和WHERE筛选器

二者的主要区别是ON在添加外部行之前被应用,而WHERE是在之后被应用。ON对保留表部分行的移除不是最终的,因为会在步骤3中再添加回来。所以在使用外部关联的时候会存在差别。

2. 三值逻辑

SQL中逻辑表达式的值包括TRUE、FALSE、UNKNOWN。与NULL相关的很多都是UNKNOWN。在查询筛选器(WHERE、ON、HAVING)把UNKNOWN作为FALSE处理,而CHECK约束、GROUP BY和ORDER BY作为TRUE处理。

3. ORDER BY

如果在SELECT语句中没有使用DISTINCT,则在ORDER BY中可以按最后结果集中不存在的表达式排序。

ORDER BY字句中可以使用SELECT列表中结果列的序号,例如:

SELECT  orderid, customerid  FROM  dbo.Orders  ORDER   BY   2 , 1 ;

 4. OVER字子句

OVER子句可以在SELECT和ORDER BY中使用,例如:

ExpandedBlockStart.gif 代码
SELECT  orderid, customerid,
COUNT ( * OVER (PARTITION  BY  customerid)  as  num_orders
FROM  dbo.Orders
where  customerid  IS   NOT   NULL ;

SELECT  orderid, customerid
FROM  dbo.Orders
where  customerid  IS   NOT   NULL
ORDER   BY   COUNT ( * OVER (PARTITION  BY  customerid)  DESC ;

 5. 优化方法论

 自顶向下:分析实例级等待,通过一系列步骤不断细化,找到导致大量等待的进程/组件,优化索引/查询。

 6. TABLESAMPLE

可以使用TABLESAMPLE从现有表生成示例数据:

SELECT   *  
FROM  dbo.Orders TABLESAMPLE ( 1000  ROWS);

SELECT   *  
FROM  dbo.Orders TABLESAMPLE ( 0.1   PERCENT );

 7. NOT EXISTS 与 NOT IN

当存在NULL时,NOT EXISTS和NOT IN并不是逻辑等价的。

 8. ANY, SOME, ALL

ANY 与 SOME之间没有逻辑区别

orderid >ANY ( select  orderid  from  dbo.orders)  -- 大于任何一个即为TRUE
orderid
>ALL ( select  orderid  from  dbo.orders)  -- 大于所有才为TRUE

 9. ROW_NUMBER, RANK, DENSE_RANK

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值