当前位置:  数据库>sqlserver
本页文章导读:
    ▪sqlserver,查询第N到M条记录,其中ID为唯一      1、SELECT TOP m-n+1 *  FROM Score  WHERE (id NOT IN      (SELECT TOP n-1 id       FROM Score)) 2、select top M-N * from yourTable where id not in(select top N-1 id from table) 3、select top M-N * from 表名.........
    ▪Sql学习第四天——SQL 关于with cube ,with rollup 和 grouping      关于with cube ,with rollup 和 grouping通过查看sql 2005的帮助文档找到了CUBE 和 ROLLUP 之间的具体区别:CUBE 生成的结果集显示了所选列中值的所有组合的聚合。ROLLUP 生成的结果集显示了所选列中值.........
    ▪SQL逻辑查询解析(补充篇)      本文目录表操作符  JOIN  APPLY  PIVOT  UNPIVOTOVER子句集合操作符在我的上一篇博客“SQL逻辑查询解析”中,我们详细讲述了SQL逻辑查询处理的各个步骤以及SQL语.........

[1]sqlserver,查询第N到M条记录,其中ID为唯一
    来源:    发布时间: 2013-10-15

1、SELECT TOP m-n+1 *
  FROM Score
  WHERE (id NOT IN
      (SELECT TOP n-1 id
       FROM Score))

 

2、select top M-N * from yourTable where id not in(select top N-1 id from table)

 

3、select top M-N * from 表名 where id in (select distinct(id) from 表名)

 

有时间记录下,上面三种方法,只用了第一种就没再试了。

本文链接


    
[2]Sql学习第四天——SQL 关于with cube ,with rollup 和 grouping
    来源:    发布时间: 2013-10-15

关于with cube ,with rollup 和 grouping

通过查看sql 2005的帮助文档找到了CUBE 和 ROLLUP 之间的具体区别:

  • CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
  • ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
  • 再看看对grouping的解释:

      当行由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 1;当行不由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 0。

    仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相关联的选择列表中才允许分组。

    当看到以上的解释肯定非常的模糊,不知所云和不知道该怎样用,下面通过实例操作来体验一下:

    先建表(dbo.PeopleInfo):

    CREATE TABLE [dbo].[PeopleInfo](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [numb] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [phone] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [FenShu] [int] NULL
    ) ON [PRIMARY]

    向表插入数据:

    insert into peopleinfo([name],numb,phone,fenshu) values ('李欢','3223','1365255',80)
    insert into peopleinfo([name],numb,phone,fenshu) values ('李欢','322123','1',90)
    insert into peopleinfo([name],numb,phone,fenshu) values ('李名','3213112352','13152',56)
    insert into peopleinfo([name],numb,phone,fenshu) values ('李名','32132312','13342563',60)
    insert into peopleinfo([name],numb,phone,fenshu) values ('王华','3223','1365255',80)

    查询出插入的全部数据:

    select * from dbo.PeopleInfo

    结果如图:

    操作一:先试试:1, 查询所有数据;2,用group by 查询所有数据;3,用with cube。这三种情况的比较

    SQL语句如下:

    select * from dbo.PeopleInfo --1, 查询所有数据;

    select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb --2,用group by 查询所有数据;

    select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb with cube --3,用with cube。这三种情况的比较

    结果如图:

    结果分析:

      用第三种(用with cube)为什么会多出来有null的字段值呢?通过分析图上的值得组合会发现是怎

        
    [3]SQL逻辑查询解析(补充篇)
        来源:    发布时间: 2013-10-15

    本文目录

    表操作符
      JOIN
      APPLY
      PIVOT
      UNPIVOT
    OVER子句
    集合操作符

    在我的上一篇博客“SQL逻辑查询解析”中,我们详细讲述了SQL逻辑查询处理的各个步骤以及SQL语言的一些重要知识。为了SQL逻辑查询处理的完整性,在本篇中,我们会了解到SQL逻辑查询处理的更多内容,以作为对前一篇博客的补充。包括表操作符(JOIN,APPLY,PIVOT和UNPIVOT),OVER子句以及集合操作符(UNION,EXCEPT和INTERSECT)。

    表操作符

    从SQL SERVER 2008开始,SQL查询中支持四种表操作符:JOIN,APPLY,PIVOT和UNPIVOT。其中,APPLY,PIVOT和UNPIVOT并非ANSI标准操作符,而是T-SQL中特有的扩展。

    下面列出了这四个表操作符的使用格式:

    (J) <left_table_expression>
    {CROSS | INNER | OUTER} JOIN <right_table_expression>
    ON <on_predicate>

    (A) <left_table_expression>
    {CROSS | OUTER} APPLY <right_table_expression>

    (P) <left_table_expression>
    PIVOT (<aggregate_func(<aggregation_element>)> FOR
    <spreading_element> IN(<target_col_list>))
    AS <result_table_alias>

    (U) <left_table_expression>
    UNPIVOT (<target_values_col> FOR
    <target_names_col> IN(<source_col_list>))
    AS <result_table_alias>

     

    JOIN

    在前一篇中,我们已经对JOIN进行了比较详细的描述,详情请参阅:SQL逻辑查询解析

    简单来说,它包含如下三个子步骤:(1-J1) 笛卡儿积(Cross Join), (1-J2) 应用ON条件, (1-J3) 添加外部数据行。

    本篇会对另外三个表操作符进行讲解。

    APPLY

    按类型不同,APPLY操作符包含如下一个或全部二个步骤:

  • A1:对左表的数据行应用右表表达式
  • A2:添加外部数据行
  • APPLY操作符对左表的每一行应用右表表达式,并且,右表表达式可以引用左表的列。对于左表的每一行,右表表达式都会运行一遍,以获得一个与该行相匹配的集合并与之联结,结果加入返回数据集。CROSS APPLY和OUTER APPLY都包含步骤A1,但只有OUTER APPLY才包含步骤A2。对于左表的输入行,如果右表表达式返回空,那么CROSS APPLY不会返回外部行(左表当前行),而OUTER APPLY则会返回它,并且右表表达式的相关列为NULL。

    比如,下面的查询为每个customer返回两个order ID最大的order:

    SELECT C.customerid, C.city, A.orderid
    FROM dbo.Customers AS C
    CROSS APPLY
    (SELECT TOP (2) O.orderid, O.customerid
    FROM dbo.Orders AS O
    WHERE O.customerid = C.customerid
    ORDER BY orderid DESC) AS A;

    查询返回如下数据:

    可以看到FISSA并没有出现在结果集中,因为表表达式A对于该数据行返回空集,如果我们希望返回那些没有任何order的customer,则需要使用OUTER APPLY,如下所示:

    SELECT C.customerid, C.city, A.orderid
    FROM dbo.Customers AS C
    OUTER APPLY
    (SELECT TOP (2) O.orderid, O.customerid
    FROM dbo.Orders AS O
    WHERE O.customerid = C.customerid
    ORDER BY orderid DESC) AS A;

    查询返回如下数据:

    PIVOT

    PIVOT操作符允许我们对行和列中的数据进行旋转和透视,并执行聚合计算。

    示例数据

    请使用如下Script创建示例数据:

    CREATE TABLE dbo.OrderValues
    (
    orderid INT NOT NULL PRIMARY KEY,
    customerid INT NOT NULL,
    empid VARCHAR(20) NOT NULL,
    orderdate DATETIME NOT NULL,
    val NUMERIC(12,2)
    );

    INSERT INTO dbo.OrderValues(orderid, customerid, empid, orderdate, val) VALUES(1000, 100, '
        
    最新技术文章:
    ▪Sql Server里删除数据表中重复记录的例子
    ▪如何查看SQLSERVER中某个查询用了多少TempDB空间...
    ▪在SQL Server中使用ISNULL执行空值判断查询
    ▪揭秘SQL Server 2014有哪些新特性(1)-内存数据库
    ▪揭秘SQL Server 2014有哪些新特性(2)-固态硬盘 Buff...
    ▪揭秘SQL Server 2014有哪些新特性(3)-可更新列存...
    ▪揭秘SQL Server 2014有哪些新特性(4)-原生备份加...
    ▪教你如何看懂SQL Server查询计划 iis7站长之家
    ▪浅析SQL Server中包含事务的存储过程
    ▪深入分析MSSQL数据库中事务隔离级别和锁机制
    ▪SQL优化技巧指南
    ▪人工智能自动sql优化工具--SQLTuning for SQL Server
    ▪使用 TOP 子句限制UPDATE 语句更新的数据
    ▪sql server动态存储过程按日期保存数据示例
    ▪SQLServer用存储过程实现插入更新数据示例
    ▪SqlServer中tempdb的日志机制原理解析及示例分享...
    ▪SqlServer数据库提示 “tempdb” 的日志已满 问题...
    ▪浅谈tempdb在SqlServer系统中的重要作用
    ▪SqlServer提示“列前缀tempdb.无效: 未指定表名”...
    ▪SQL命令优化需要记住的9点事项
    ▪教你如何看懂SQL Server查询计划
    ▪sql server 2000数据库备份还原的图文教程
    ▪SqlServer2012中First_Value函数简单分析
    ▪sql语句中单引号嵌套问题(一定要避免直接嵌...
    ▪谈谈sqlserver自定义函数与存储过程的区别
    ▪SQL SERVER使用REPLACE将某一列字段中的某个值替...
    ▪总结一周内学习的Sql经验(一)
    ▪sql存储过程详解
    ▪SQL Server UPDATE语句的用法详解
    ▪MSSQL事务的存储过程
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3