在SQL Server中,TOP可用于返回查询中的前n行。例如,
选择前100位*来自用户ORDER BY ID
可能会被用于返回注册该网站的前100个人。(这不一定是最好的方法,我只是以它为例)。
我的问题是- 在其他数据库(例如Oracle,MySQL,PostgreSQL等)中,TOP等于什么?如果没有等效的关键字,您可以建议采用哪种解决方法来获得相同的结果?
要选择第一100行:
100
MySQL和PostgreSQL:
MySQL
PostgreSQL
SELECT * FROM Table ORDER BY column LIMIT 100
Oracle:
Oracle
SELECT * FROM ( SELECT t.* FROM table ORDER BY column ) WHERE rownum <= 100
请注意,您需要在此处进行子查询。如果您不添加子查询,ROWNUM则将10以随机顺序选择第一行,然后按对其进行排序column。
ROWNUM
10
column
要选择100和之间的行300:
300
MySQL:
SELECT * FROM TABLE ORDER BY column LIMIT 100, 200
PostgreSQL:
SELECT * FROM Table ORDER BY column OFFSET 100 LIMIT 200
SELECT * FROM ( SELECT t.*, ROW_NUMBER() OVER (ORER BY column) AS rn FROM table ) WHERE rn >= 100 AND rownum <= 200
请注意,尝试使用来简化它ROWNUM BETWEEN 100 AND 200(rn BETWEEN 100 AND 200与外部查询相反)不会在Oracle!中返回任何内容。
ROWNUM BETWEEN 100 AND 200
rn BETWEEN 100 AND 200
RN BETWEEN 100 AND 200也会起作用,Oracle但是效率较低。
RN BETWEEN 100 AND 200