导航

SQL Server 2005 T-SQL Recipes------Select语句

Posted on 2009-05-04 14:53  鸡尾虾的壳  阅读(317)  评论(0编辑  收藏  举报

1. NOT操作符
     SELECT Title, FirstName,LastName
     FROM Person.Contact
     WHERE NOT Title = 'Ms.'

2. 保证WHERE字句的非二义性
     当存在多个操作符,如NOT,AND,OR的时候,实用括号分开各个逻辑条件。

3. Order By
     默认是升序,默认情况下,采用聚簇索引的物理记录顺序作为升序。

4. Top
     SQL Server 2005支持百分比类型的Top子句
      DECLARE @Percentage float
      SET @Percentage = 1
      SELECT TOP (@Percentage) PERCENT
      Name
      FROM Production.Product
      ORDER BY Name

5. Group By All
     即使不符合Where条件的行,也会被Group By语句包括。不同的聚集函数对NULL的处理是不同的,比如AVG忽略NULL记录,但
是COUNT不会。

6. Having
     对经过Group或者聚簇后的结果数据进行条件Filter。

7. 采用Select动态生成脚本
    SELECT column_name + ' IS NULL AND '
    FROM INFORMATION_SCHEMA.columns
    WHERE table_name = 'Employee'
    ORDER BY ORDINAL_POSITION

8. INTO子句
    实现表的创建和数据插入
        SELECT select_list
        [INTO new_table_name]
        FROM table_list
    只实现表的创建,不包含数据
        SELECT CustomerID,Name,SalesPersonID,Demographics
        INTO Store_Archive
        FROM Sales.Store
        WHERE 1=0
     拷贝过程不包含触发器,索引等对象。

9. 子查询
    查询结果依赖与子查询的返回集,类似与函数调用。

10. Join
    可以把一个物理表看作两个逻辑表,进行自连接查询。

11. Derived表
     Derived表是用Select的结果充当From子句的内容,有时性能比使用临时表要好。

12. Apply操作
     使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。表值函数作为右输入,外部表表达式作为
左输入。通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。APPLY 运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表。

13. TABLESAMPLE
     SQL Server 2005新特性,基于页面数按照百分比,返回随机行。
         SELECT FirstName,LastName
         FROM Person.Contact TABLESAMPLE SYSTEM (1 PERCENT)

14. PIVOT/UNPIVOT
     对记录实现行列转换。

15. EXCEPT, INTERSECT
     SQL Server 2005新特性,对记录集进行差集和交集计算。

16. With Cube
     基于Group By中的各种列组合去进行统计计算。

17. With Rollup
     基于Group By中的各种列值的层次去进行统计计算。

18. 使用Join Hints
      如SET SHOWPLAN_TEXT ON,返回执行计划信息。

19. 使用Query Hints
      如Recompile,不使用旧的查询计划,重新进行编译。

20. 使用Table Hints
      如Rowlock,Index等强制实用某种锁类型和特殊索引。

21. 公用表表达式
     用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临
时结果集。CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。使用 CTE 可以获得提高可读性和轻松维护复杂查询的优点。查询可以分为单独块、简单块、逻辑生成块。之后,这些简单块可用于生成更复杂的临时 CTE,直到生成最终结果集。 可以在用户定义的例程(如函数、存储过程、触发器或视图)中定义 CTE。