1.Select Top语句
Select Top用于限制查询结果集中返回的行数或行百分比。Select Top子句对于拥有数千条记录的大型表来说是非常有用的。由于存储在表中的行的顺序是不可预测的,因此Select Top 语句始终与Order By子句一起使用。
*注意:并非所有的数据库系统都支持Select Top语句。MySQL支持limit语句来选取指定的条数数据,Oracle可以使用RowNum来选取。
语法:
SELECT TOP expression | percent *
FROM table_name
ORDER BY [column_name | expression] [ASC | DESC]
·expression - TOP 关键字后面是一个表达式,它指定要返回的行数。如果使用percent,则将表达式计算为浮点值,否则将其转换为 BIGINT 值。
·percent- percent关键字指示查询返回前N个行百分比,其中N是表达式的结果。
①使用具有恒定值的Top
以下语句使用常量值返回前5个年龄最大的学生:
使用Top返回行的百分比
以下语句使用percent指定返回的学生人数。 student表有10行数据,10的百分之一是分数值1 。如果分数值是浮点数,SQL Server将其进到下一个整数。
③使用Top With Ties
以下语句声明返回年龄最大的三名同学,再返回与最后一行中的值匹配的行:
2.Offset Fetch语句
Offset和 Fetch子句是Order By子句的选项。它们用于限制查询返回的行数。
Offset和 Fetch子句比实现 Top子句更适合实现查询分页解决方案。
语法:
ORDER BY [column_name | expression] [ASC | DESC]
OFFSET offset_row_count ROWS
FETCH [FIRST| NEXT] fetch_row_count ROWS ONLY
·OFFSET子句指定在开始从查询返回行之前要跳过的行数。 offset_row_count 可以是大于或等于0的参数。
·FETCH子句指定在处理 OFFSET子句后要返回的行数。 offset_row_count 可以是大于或等于1的参数。
*注意:OFFSET子句是必需的,而FETCH子句是可选的。此外,FIRST和NEXT是同义词,因此可以互换使用它们。
①获得前5个年龄最大的学生:
②跳过前5个学生并选择接下来的5个学生:
分页查询
语法:
ORDER BY [column_name | expression] [ASC | DESC]
OFFSET (PageNum - 1)*PageSize ROWS
FETCH [FIRST| NEXT] PageSize ROWS ONLY
·PageNum - 指定页数
·PageSize - 指定每页返回多少条数据
以下语句将数据分为5页,每页两条数据: