一尘不染

等效于SQL Server TOP

sql

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

选择前100位*来自用户ORDER BY ID

可能会被用于返回注册该网站的前100个人。(这不一定是最好的方法,我只是以它为例)。

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


阅读 141

收藏
2021-03-17

共1个答案

一尘不染

要选择第一100行:

MySQLPostgreSQL

SELECT  *
FROM    Table
ORDER BY
        column
LIMIT 100

Oracle

SELECT  *
FROM    (
        SELECT  t.*
        FROM    table
        ORDER BY
                column
        )
WHERE   rownum <= 100

请注意,您需要在此处进行子查询。如果您不添加子查询,ROWNUM则将10以随机顺序选择第一行,然后按对其进行排序column

要选择100和之间的行300

MySQL

SELECT  *
FROM    TABLE
ORDER BY
        column
LIMIT   100, 200

PostgreSQL

SELECT  *
FROM    Table
ORDER BY
        column
OFFSET 100 LIMIT 200

Oracle

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

请注意,尝试使用来简化它ROWNUM BETWEEN 100 AND 200rn BETWEEN 100 AND 200与外部查询相反)不会在Oracle!中返回任何内容。

RN BETWEEN 100 AND 200也会起作用,Oracle但是效率较低。

2021-03-17