资讯专栏INFORMATION COLUMN

T-SQL学习中--取得部分检索数据记录

lakeside / 666人阅读

摘要:是一种非标准语句,从数据表中最多检索出排在前面的条数据来,但是它可以用这样的根据总数据量来按比例取得数据记录。但是它有局限性,不能按百分比检索出数据结果。表示跳过前条数据,取得之后的全部数据。

SELECT TOP(n) FROM _TableName_ ORDER BY _ColumnName_是一种非标准SQL语句,从数据表中最多检索出排在前面的n条数据来,但是它可以用SELECT TOP(n) PERCENT FROM _TABLENAME_ ORDER BY 这样的根据总数据量来按比例取得数据记录。
如果数据表中有560条数据,检索SELECT TOP(1) FROM _TableName_ ORDER BY _ColumnName_就会检索出6条数据来,总而言之,不是按四舍五入计的,而是按ceil向上取整法计数的。
如果不加ORDER BY,数据会以不确定的顺序检索出来。
这里括号可有可无,但是建议加括号。
n可以是常数,也可以是定义的变量。下面这种写法也是可以的:

SQLDECLARE @n AS BIGINT = 5;
SELECT TOP (@n) orderid, orderdate, custid, empid
FROM Sales.Orders
ORDER BY orderdate DESC;
GO

如果加了WITH TIE,比如说写成

SQLSELECT TOP (3) WITH TIES orderid, orderdate, custid, empid
FROM Sales.Orders
ORDER BY orderdate DESC;

orderdate相同的数据会被计作一条数据,总检索出的结果可能不止3条。

OFFSET FETCH语句是标准SQL语句。但是它有局限性,不能按百分比检索出数据结果。

SQLSELECT orderid, orderdate, custid, empid
FROM Sales.Orders
ORDER BY orderdate DESC, orderid DESC
OFFSET 50 ROWS FETCH NEXT 25 ROWS ONLY;

表示跳过前50条数据,取得第51到第75条数据。

SQLSELECT orderid, orderdate, custid, empid
FROM Sales.Orders
ORDER BY orderdate DESC, orderid DESC
OFFSET 0 ROWS FETCH FIRST 25 ROWS ONLY;

表示取得第1到第25条数据。

SQLSELECT orderid, orderdate, custid, empid
FROM Sales.Orders
ORDER BY orderdate DESC, orderid DESC
OFFSET 50 ROWS;

表示跳过前50条数据,取得之后的全部数据。
OFFSET FETCH语句必须带有ORDER BY语句,但是如果不想指定用于排序的columnName,可以用下面这种这种语法,即用SELECT NULL作为排序列:

SQLSELECT orderid, orderdate, custid, empid
FROM Sales.Orders
ORDER BY (SELECT NULL)
OFFSET 0 ROWS FETCH FIRST 3 ROWS ONLY;

OFFSET FETCH可用于分页检索,比如说下面这种写法:

SQLDECLARE @pagesize AS BIGINT = 25, @pagenum AS BIGINT = 3;

SELECT orderid, orderdate, custid, empid
FROM Sales.Orders
ORDER BY orderdate DESC, orderid DESC
OFFSET (@pagenum - 1) * @pagesize ROWS FETCH NEXT @pagesize ROWS ONLY;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32013.html

相关文章

  • T-SQL学习--子查询

    摘要:检索表中价格最低的产品的。检索表中由日本供货商供应的商品的。检索在年月日下过订单的客户的客户编号公司名。下面的语句与上一条语句等阶取得表中工号为的员工及其上司上司的上司的工号,姓名,以及与之的层级关系。 SQLSELECT productid, productname, unitprice FROM Production.Products WHERE unitprice = (SE...

    CocoaChina 评论0 收藏0
  • T-SQL学习

    摘要:但是我不明白是什么意思。直到做了下面这个查询才明白所谓的就是对数据表格按的优先级进行排序,取得排序号。但是当值由跳到,或者由跳到的时候,排序号重新从开始计数。 SQLSELECT ROW_NUMBER() OVER (PARTITION BY categoryid ORDER BY unitprice, productid) AS rownum, categoryid, produc...

    CompileYouth 评论0 收藏0
  • T-SQL学习--内联接,外连接,交叉连接

    摘要:交叉连接可以表和表是同一张表取得笛卡尔乘积。下面的查询中,表中没有商品记录的的日本供货商不会被列出来。套用内联接的左外连接查询出日本供货商的所有的产品以及产品类别名。 交叉连接可以表A和表B是同一张表取得笛卡尔乘积。 比如说下面这种写法: SQLSELECT D.n AS theday, S.n AS shiftno FROM dbo.Nums AS D cross JOIN...

    tommego 评论0 收藏0
  • 目前看过最全的一线大厂MySQL面试题(题+详解)

    摘要:慢查询日志设置一个阈值,将运行时间超过该值的所有语句都记录到慢查询的日志文件中。二进制日志记录对数据库执行更改的所有操作。优点不需要记录每一行的变化,减少了日志量,节约了,提高性能。所以的日志内容会非常清楚的记录下每一行数据修改的细节。 1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上...

    luodongseu 评论0 收藏0
  • T-SQL进阶:超越基础 Level 2:编写子查询

    摘要:首次发布于关于系列本文属于进阶系列进阶超越基础跟随的进阶系列,其涵盖了更多的高级方面的语言,如子查询。两个子查询返回表中的最大。当在子句中使用子查询时,从子查询生成的结果集通常称为派生表。子查询可以独立于外部查询运行,因此有时也称为独 By Gregory Larsen, 2016/01/01 (首次发布于: 2014/01/29) 关于系列 本文属于进阶系列:T-SQL进阶:超越基础...

    ideaa 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<