FIRST,SKIP子句
作用: 从有序集合中检索一部分行
用于: DSQL, PSQL
语法:
SELECT
[FIRST <m>] [SKIP <n>]
FROM ...
...
<m>, <n> ::= integer-literal | query-parameter | (integer-expression)
表6.1. FIRST, SKIP子句参数
参数 | 描述 |
integer literal | 整型文本 |
query parameter | 查询参数的占位符。"?"在 DSQL 和"︰" 在 PSQL 参数名称 |
integer-expression | 整型表达式返回一个整型值 |
FIRST, SKIP子句是非标准语法
FIRST和SKIP是由Firebird数据库规定,非SQL兼容关键字。建议您使用ROWS语法在任何可能的地方。
描述
FIRST限定一个查询的输出为第一个m行,SKIP将抑制给定的n行在开始返回行数据之前.
FIRST和SKIP两者都是选项.当"“FIRST m SKIP n"一起使用时,最顶端的n行的输出集合将被丢弃,并返回其余部分的第一个m行集合。
FIRST和SKIP的特点
• 对于FIRST和SKIP任何参数,如果不是整型文本或SQL则必须用括号。这意味着,子查询表达式必须用双括号。
• SKIP 0是允许的,但完全没有意义。
• FIRST 0是允许的,返回一个空集。
• 负的SKIP和/或FIRST值导致错误。
• 如果SKIP的领域达到数据集末尾,则返回空集。
• 如果数据集中(或SKIP之后剩余的)的行数小于FIRST参数提供的值m,则一个更小的行数被返回。这是有效的结果,不是错误条件.
警告
你在子查询中使用FIRST会时发生错误,这个查询
DELETE FROM MYTABLE
WHERE ID IN (SELECT FIRST 10 ID FROM MYTABLE)
将从表中删除所有记录.子查询每次检索 10 行,删除它们且操作是重复的,直到表是空的。牢记这一点 !或者使用 ROWS 子句中在DELETE语句中会更好。
一些例子:
以下查询将从People表返回首10个人名
select first 10 id, name from People
order by name asc
以下查询将从People表返回除了首10个人名外的所有数据
select skip 10 id, name from People
order by name asc
这个例子将返回最后面的10行.注意两个括号:
select skip ((select count(*) - 10 from People))
id, name from People
order by name asc
这个查询将从People表返回从81到100的行
select first 20 skip 80 id, name from People
order by name asc
参阅: ROWS