转载

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

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; 
正文到此结束
Loading...