zoukankan      html  css  js  c++  java
  • SQL-分页-表表达式

    SQL Server2012开始,可以使用OFFSET......FETCH:

    SELECT *FROM Student  ORDER BY  Score  --分页通常必然伴随着排序

    OFFSET 6 ROWS                                             --略过6行

    FETCH NEXT 3 ROWS ONLY                          --取其后的3行

    表表达式:

    子查询只能返回‘一列’的结果集,若要返回多列,需要表表达式;表表达式又称“表子查询”,可以理解为返回值为表的子查询,具体分为派生表,CTE,内联表值与视图;

    在它们子查询上有共同要求:

    1,每一列要求有列名,且唯一;

    2,不保证排序,所以不能使用ORDER BY;

    派生表:将子查询结果当做表来使用,直接放在外部查询FROM子句后面:

    SELECT *FROM(

    SELECT Id,

    Id*2 AS DoubleId       --计算列,加别名

    FROM Student) ns    --这个别名必须有,即使没有WHERE

    WHERE ns.DoubleId>10   --WHERE子句使用子查询表别名ns

    )

    语法要求:派生表必须有表别名,且子查询必须是独立的;

    派生表被SELECT出来后,只能使用一次,如果要反复使用表子查询结果,需要:

    公用表表达式(CTE):最大优势,一次定义,多次使用,但CTE在批处理结束后会被销毁,想更长时间保留表子查询结果,需要视图;

    一次可定义多个CTE:

    WITH MethoudStudent          --第一个CTE

    AS (SELECT*FROM Student)  

    BastStudent                          --第二个CTE,不需要WITH

    AS(SELECT*FROM Exam)

    ......                                       --还可继续创建CTE

    一次定义,多次使用:

    WITH MethoudStudent

    AS(

          SELECT*,Methoud(Enroll) AS EnrollMethoud FROM Student

    )

    SELECT *FROM MethoudStudent oms                                --第一次使用

    WHERE Score=(

          SELECT MAX(Score) FROM MethoudStudent ims        --第二次使用

          WHERE oms.EnrollMethoud=ims.EnrollMethoud

    )

    如果这篇文章,对你有帮助,请点击关注,我会持续更新......
  • 相关阅读:
    获取打印页号列表
    数据库设计技巧系列(三)——选择键和索引
    SQL Server2000孤立用户解决方案
    在WinForm程序中嵌入ASP.NET[转]
    再谈如何遍历Asp.net窗体下所有的控件
    数据库设计技巧系列(二)——设计表和字段
    今天下午真郁闷……
    如何实现在Asp.net下XP风格的下拉菜单
    利用SQL语句得到客户端的IP地址
    国庆节快乐……
  • 原文地址:https://www.cnblogs.com/-GoFurther/p/13734700.html
Copyright © 2011-2022 走看看