SKIP

SKIP(及其同义词 OFFSET)定义从哪一行开始包含输出中的行。

通过使用 SKIP,结果集将从顶部被修剪。

Neo4j 不保证 SKIP/OFFSET 生成的结果。唯一保证特定行顺序的子句是 ORDER BY

SKIP 接受任何计算结果为正 INTEGER 的表达式,并且不引用节点或关系。

示例图

以下图用于下面的示例

graph skip clause

要重新创建它,请对空的 Neo4j 数据库运行以下查询

CREATE
  (andy: Person {name: 'Andy'}),
  (bernard: Person {name: 'Bernard'}),
  (charlotte: Person {name: 'Charlotte'}),
  (david: Person {name: 'David'}),
  (erika: Person {name: 'Erika'}),
  (andy)-[:KNOWS]->(bernard),
  (andy)-[:KNOWS]->(charlotte),
  (andy)-[:KNOWS]->(david),
  (andy)-[:KNOWS]->(erika)

示例

示例 1. 跳过前三行

以下查询返回结果的一个子集,从第四个结果开始。

查询
MATCH (n)
RETURN n.name
ORDER BY n.name
SKIP 3
表 1. 结果
n.name

"David"

"Erika"

行数:2

示例 2. 返回中间两行

以下查询返回中间两行,SKIP 跳过第一行,LIMIT 删除最后两行。

查询
MATCH (n)
RETURN n.name
ORDER BY n.name
SKIP 1
LIMIT 2
表 2. 结果
n.name

"Bernard"

"Charlotte"

行数:2

示例 3. 使用带 SKIP 的表达式返回结果行的一个子集

SKIP 接受任何计算结果为正 INTEGER 的表达式,只要它可以在静态计算(即在查询运行之前计算)。

此查询跳过第一行,然后随机跳过另外 0、1 或 2 行,导致在返回剩余名称之前总共跳过 1、2 或 3 行。

查询
MATCH (n)
RETURN n.name
ORDER BY n.name
SKIP 1 + toInteger(3 * rand())
表 3. 结果
n.name

"Bernard"

"Charlotte"

"David"

"Erika"

行数:4

SKIP 用作独立子句

SKIP 可以用作独立子句,也可以与 ORDER BYLIMIT 结合使用。

SKIP 的独立用法
MATCH (n)
SKIP 2
RETURN collect(n.name) AS names
表 4. 结果
names

["Charlotte", "David", "Erika"]

行数:1

以下查询按 name 对所有节点进行排序,跳过前两行并将结果限制为两行。然后它收集结果到一个列表中。

SKIPORDER BYLIMIT 结合使用
MATCH (n)
ORDER BY n.name
SKIP 2
LIMIT 2
RETURN collect(n.name) AS names
表 5. 结果
names

["Charlotte", "David"]

行数:1

OFFSET 作为 SKIP 的同义词

OFFSET 是作为 Cypher®GQL 一致性 的一部分引入的,可以用作 SKIP 的同义词。

查询
MATCH (n)
ORDER BY n.name
OFFSET 2
LIMIT 2
RETURN collect(n.name) AS names
表 6. 结果
names

["Charlotte", "David"]

行数:1