SKIP
SKIP(及其同义词 OFFSET)用于定义从哪一行开始将数据包含在输出中。
使用 SKIP,结果集将从顶部被截断。
SKIP 接受任何计算结果为正 INTEGER(整数)的表达式,且该表达式不能包含任何变量,也不能引用节点或关系。
Neo4j 不保证 SKIP/OFFSET 生成结果的顺序。唯一能保证特定行顺序的子句是 ORDER BY。 |
示例图
以下图表用于下方的示例
要重新创建它,请在空的 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
| n.name |
|---|
|
|
行:2 |
示例 2. 返回中间两行
以下查询返回中间两行,其中 SKIP 跳过第一行,LIMIT 移除最后两行。
查询
MATCH (n)
RETURN n.name
ORDER BY n.name
SKIP 1
LIMIT 2
| n.name |
|---|
|
|
行: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())
| n.name |
|---|
|
|
|
|
行:4 |
将 SKIP 作为独立子句使用
SKIP 的独立使用MATCH (n)
SKIP 2
RETURN collect(n.name) AS names
| names |
|---|
|
|
以下查询按 name 对所有节点进行排序,跳过前两行,并将结果限制为两行。然后将结果收集到一个列表中。
SKIP 与 ORDER BY 和 LIMIT 结合使用MATCH (n)
ORDER BY n.name
SKIP 2
LIMIT 2
RETURN collect(n.name) AS names
| names |
|---|
|
|
OFFSET 作为 SKIP 的同义词
OFFSET 作为 Cypher® GQL 一致性的一部分被引入,可用作 SKIP 的同义词。
查询
MATCH (n)
ORDER BY n.name
OFFSET 2
LIMIT 2
RETURN collect(n.name) AS names
| names |
|---|
|
|