ROWNUM
是像Oracle的ROWNUM
一样的伪列。伪列的行为类似于表列,但实际上并没有存储在表中。您可以从伪列中进行选择,但无法插入、更新或删除它们的值。伪列也类似于没有参数的函数。然而,没有参数的函数通常对结果集中的每一行返回相同的值,而伪列通常对每一行返回不同的值。
对于查询返回的每一行,ROWNUM
伪列返回一个数字,指示LightDB从表或一组连接行中选择行的顺序。第一行选择的ROWNUM
为1,第二行为2,以此类推。
您可以使用ROWNUM
来限制查询返回的行数,就像这个例子中一样:
SELECT * from employees WHERE ROWNUM < 10;
如果在同一查询中,在ROWNUM
之后有一个ORDER BY
子句,那么行将按ORDER BY
子句重新排序。
SELECT * FROM employees WHERE ROWNUM < 11 ORDER BY last_name;
如果您将ORDER BY
子句嵌入子查询中,并将ROWNUM
条件放置在顶层查询中,则可以强制在对行进行排序之后应用ROWNUM
条件。例如,以下查询返回具有最小的10个员工编号的员工。这有时被称为top-N报告:
SELECT * FROM (SELECT * FROM employees ORDER BY employee_id) WHERE ROWNUM < 11;
在上面的例子中,ROWNUM
值是顶层SELECT
语句的值,因此它们是在子查询中按employee_id排序后生成的。
测试ROWNUM
值是否大于正整数的条件始终为false。例如,以下查询不返回任何行:
SELECT * FROM employees WHERE ROWNUM > 1;
获取的第一行被分配一个ROWNUM
为1,并使条件为false。要获取的第二行现在是第一行,并且也被分配一个ROWNUM
为1,并使条件为false。随后的所有行都无法满足条件,因此不返回任何行。
您也可以在UPDATE
和DELETE
语句中像在SELECT
语句中一样使用ROWNUM
。
UPDATE employees SET employee_id = 0 WHERE ROWNUM < 10; DELETE FROM employees WHERE ROWNUM < 10;
请注意,ROWNUM
在canopy中不受支持。如果您在canopy中有时称之为top-N报告,请考虑改用limit。