相当于SQL Server TOP

Jus*_*ier 14 sql database keyword

在SQL Server中,TOP可用于返回查询中的前n行.例如,

SELECT TOP 100 * FROM users ORDER BY id
可能用于返回注册网站的前100个人.(这不一定是最好的方式,我只是以它为例).

我的问题是 - 在其他数据库中,TOP等于什么,例如Oracle,MySQL,PostgreSQL等?如果没有等效的关键字,您可以建议使用哪些变通方法来获得相同的结果?

Qua*_*noi 20

要选择第一100行:

MySQL并且PostgreSQL:

SELECT  *
FROM    Table
ORDER BY
        column
LIMIT 100
Run Code Online (Sandbox Code Playgroud)

Oracle:

SELECT  *
FROM    (
        SELECT  t.*
        FROM    table
        ORDER BY
                column
        )
WHERE   rownum <= 100
Run Code Online (Sandbox Code Playgroud)

请注意,您需要一个子查询.如果不添加子查询,ROWNUM将按10随机顺序选择第一行,然后按顺序排序column.

选择100和之间的行300:

MySQL:

SELECT  *
FROM    TABLE
ORDER BY
        column
LIMIT   100, 200
Run Code Online (Sandbox Code Playgroud)

PostgreSQL:

SELECT  *
FROM    Table
ORDER BY
        column
OFFSET 100 LIMIT 200
Run Code Online (Sandbox Code Playgroud)

Oracle:

SELECT  *
FROM    (
        SELECT  t.*, ROW_NUMBER() OVER (ORER BY column) AS rn
        FROM    table
        )
WHERE   rn >= 100
        AND rownum <= 200
Run Code Online (Sandbox Code Playgroud)

注意,尝试简化它ROWNUM BETWEEN 100 AND 200(rn BETWEEN 100 AND 200与外部查询相反)将不会返回任何内容Oracle!

RN BETWEEN 100 AND 200也将工作,Oracle但效率较低.

有关性能详细信息,请参阅我博客中的文章:


Ste*_*e K 6

对于Postgres和MySQL,它是LIMIT关键字.

SELECT *
  FROM users
 ORDER BY id
 LIMIT 100;
Run Code Online (Sandbox Code Playgroud)