如何在 SQL 查询中限制结果

12
我想知道是否可以限制SQL请求的结果?
例如,只从中返回最多50行:
  SELECT * FROM <table>

谢谢。

5个回答

20

SQL标准

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

SELECT
    title
FROM
    post
ORDER BY
    id DESC
FETCH FIRST 50 ROWS ONLY

SQL:2008的Top-N记录子句自Oracle 12c、SQL Server 2012和PostgreSQL 8.4起得到支持。

SQL Server

虽然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

Oracle 11g及更早版本

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

SELECT *
FROM (
    SELECT
        title
    FROM
        post
    ORDER BY
        id DESC
)
WHERE ROWNUM <= 50

MySQL和PostgreSQL 8.3或更早版本

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

SELECT
    title
FROM
    post
ORDER BY
    id DESC
LIMIT 50

14

是的,这是可能的。这取决于数据库引擎。

Postgres:

SELECT * FROM <table> LIMIT 50

SQL Server:

SELECT TOP 50 * FROM <table> 

3
Oracle:查询语句:select * from <table> where rownum <= 50;翻译:从表格中选择所有行,其中行号不超过50。 - river0
@river0 select * 命令选取的行数是否有最大限制? - Ashok Raj

5
您可以使用 TOP 子句
SELECT TOP 50 * FROM <table>

如果您的数据库不支持它,您也可以尝试使用LIMITROWNUM,但这取决于您使用的数据库。


5
是的,MYSQL中是可行的:
LIMIT子句可用于限制SELECT语句返回的行数。LIMIT采用一个或两个数字参数,这些参数必须都是非负整数常量(除非使用预处理语句)。
有两个参数时,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。初始行的偏移量为0(而不是1): SELECT * FROM tbl LIMIT 5,10; #检索6-15行 要检索从某个偏移量到结果集结尾的所有行,可以对第二个参数使用一些大数字。该语句检索从第96行到最后一行的所有行: SELECT * FROM tbl LIMIT 95,18446744073709551615; 有一个参数时,该值指定要从结果集开头返回的行数: SELECT * FROM tbl LIMIT 5; #检索前5行 换句话说,"LIMIT row_count"等价于"LIMIT 0,row_count"。

2
在MySQL中,您将使用LIMIT子句。
 SELECT * FROM <table> LIMIT 50

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接