限制SQL请求的结果

时间:2010-06-27 16:47:35

标签: sql

我想知道是否可以限制SQL请求的结果?例如,只从

返回最多50行
  SELECT * FROM <table>

感谢。

5 个答案:

答案 0 :(得分:5)

您可以使用TOP clause

SELECT TOP 50 * FROM <table>

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

答案 1 :(得分:5)

是的,这是可能的。这在数据库引擎之间有所不同。

Postgres的:

SELECT * FROM <table> LIMIT 50

SQL Server:

SELECT TOP 50 * FROM <table> 

...

答案 2 :(得分:4)

当然可以,在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。

答案 3 :(得分:2)

在MySQL中,您将使用LIMIT子句

 SELECT * FROM <table> LIMIT 50

答案 4 :(得分:1)

SQL标准

正如我在this article中所述,SQL:2008标准提供了以下语法来限制SQ​​L结果集:

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

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

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