限制SQL请求的结果

Ski*_*zit 5 sql resultset sql-limit

我想知道是否可以限制SQL请求的结果?例如,最多只返回50行

  SELECT * FROM <table>
Run Code Online (Sandbox Code Playgroud)

谢谢.

dzi*_*ida 6

是的,这是可能的.这与db引擎不同.

Postgres的:

SELECT * FROM <table> LIMIT 50
Run Code Online (Sandbox Code Playgroud)

SQL Server:

SELECT TOP 50 * FROM <table> 
Run Code Online (Sandbox Code Playgroud)

...

  • Oracle:`select * from &lt;table&gt; where rownum &lt;= 50;` (2认同)

Vla*_*cea 6

SQL标准

SQL:2008 标准提供了以下语法来限制 SQL 结果集:

SELECT
    title
FROM
    post
ORDER BY
    id DESC
FETCH FIRST 50 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)

从 12c 开始支持 SQL:2008 Top-N 记录子句,从 2012 开始支持 SQL Server,从 8.4 开始支持 PostgreSQL。

数据库服务器

虽然 SQL Server 支持 SQL:2008 Top-N标准语法,但您还需要提供 OFFSET 子句:

SELECT
    title
FROM
    post
ORDER BY
    id DESC
OFFSET 0 ROWS
FETCH FIRST 50 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)

在较旧的 SQL Server 版本上,您可以使用 TOP:

SELECT TOP 50
    title
FROM
    post
ORDER BY
    id DESC
Run Code Online (Sandbox Code Playgroud)

Oracle 11g 及更早版本

在版本 12c 之前,要获取 Top-N 记录,您必须使用派生表和 ROWNUM 伪列:

SELECT *
FROM (
    SELECT
        title
    FROM
        post
    ORDER BY
        id DESC
)
WHERE ROWNUM <= 50
Run Code Online (Sandbox Code Playgroud)

MySQL 和 PostgreSQL 8.3 或更早版本

传统上,MySQL 和 PostgreSQL 使用 LIMIT 子句将结果集限制为 Top-N 记录:

SELECT
    title
FROM
    post
ORDER BY
    id DESC
LIMIT 50
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 5

您可以使用TOP子句:

SELECT TOP 50 * FROM <table>
Run Code Online (Sandbox Code Playgroud)

如果您的数据库不支持它,您也可以尝试LIMIT,ROWNUM但这将取决于您正在使用的数据库.


Fab*_* F. 5

是的,在 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。