我想知道是否可以限制 SQL 请求的结果?
例如,最多只能从以下位置返回 50 行:
SELECT * FROM <table>
谢谢。
是的,这是可能的。这在数据库引擎之间有所不同。
Postgres:
SELECT * FROM <table> LIMIT 50
SQL 服务器:
SELECT TOP 50 * FROM <table>
...
SQL:2008 标准提供了以下语法来限制 SQL 结果集:
SELECT
title
FROM
post
ORDER BY
id DESC
FETCH FIRST 50 ROWS ONLY
自 12c 起,Oracle、SQL Server 自 2012 年起和 PostgreSQL 自 8.4 起支持 SQL:2008 Top-N 记录子句。
虽然 SQL Server 支持 SQL:2008 Top-N标准语法,但您还需要提供 OFFSET 子句:
SELECT
title
FROM
post
ORDER BY
id DESC
OFFSET 0 ROWS
FETCH FIRST 50 ROWS ONLY
在较旧的 SQL Server 版本上,您可以使用 TOP:
SELECT TOP 50
title
FROM
post
ORDER BY
id DESC
在版本 12c 之前,要获取 Top-N 记录,您必须使用派生表和 ROWNUM 伪列:
SELECT *
FROM (
SELECT
title
FROM
post
ORDER BY
id DESC
)
WHERE ROWNUM <= 50
传统上,MySQL 和 PostgreSQL 使用 LIMIT 子句将结果集限制为 Top-N 记录:
SELECT
title
FROM
post
ORDER BY
id DESC
LIMIT 50
可以,在 MYSQL 中:
LIMIT 子句可用于限制 SELECT 语句返回的行数。LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量(使用准备好的语句时除外)。
有两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。初始行的偏移量为 0(不是 1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
要检索从某个偏移量到结果集末尾的所有行,您可以为第二个参数使用一些较大的数字。此语句检索从第 96 行到最后一行的所有行:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
使用一个参数,该值指定从结果集开头返回的行数:
SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows
换句话说,LIMIT row_count 等价于 LIMIT 0, row_count。
在 MySQL 中,您将使用LIMIT子句
SELECT * FROM <table> LIMIT 50