如何编写大型语句
首先导入一些数据以便检索结果
CREATE (matrix:Movie {title:"The Matrix",released:1997})
CREATE (cloudAtlas:Movie {title:"Cloud Atlas",released:2012})
CREATE (forrestGump:Movie {title:"Forrest Gump",released:1994})
CREATE (keanu:Person {name:"Keanu Reeves", born:1964})
CREATE (robert:Person {name:"Robert Zemeckis", born:1951})
CREATE (tom:Person {name:"Tom Hanks", born:1956})
CREATE (tom)-[:ACTED_IN {roles:["Forrest"]}]->(forrestGump)
CREATE (tom)-[:ACTED_IN {roles:['Zachry']} ]->(cloudAtlas)
CREATE (robert)-[:DIRECTED]->(forrestGump)
使用UNION组合语句
Cypher语句通常非常紧凑。将节点之间的引用表示为可视化模式使其易于理解。
如果要组合具有相同结果结构的两个语句的结果,可以使用 UNION [ALL]
。
例如,如果要在不使用替代关系类型语法 ()-[:ACTED_IN|:DIRECTED]→()
的情况下同时列出演员和导演,可以这样做
MATCH (actor:Person)-[r:ACTED_IN]->(movie:Movie)
RETURN actor.name AS name, type(r) AS acted_in, movie.title AS title
UNION
MATCH (director:Person)-[r:DIRECTED]->(movie:Movie)
RETURN director.name AS name, type(r) AS acted_in, movie.title AS title
使用WITH来链接语句
在Cypher中,可以将语句片段链接在一起,就像在数据流管道中一样。每个片段处理前一个片段的输出,其结果可以馈送到下一个片段。
您使用 WITH
子句组合各个部分并声明数据如何从一个流向另一个。WITH
非常类似于 RETURN
,不同之处在于它不结束查询,而是为下一部分准备输入。您可以使用与 RETURN
子句中相同的表达式、聚合、排序和分页。
唯一的区别是您必须为所有列起别名,否则它们将无法访问。只有在 WITH
子句中声明的列才能在后续查询部分中使用。
请参见下面的示例,其中我们收集某人出演过的电影,然后过滤掉仅出演过一部电影的人。
MATCH (person:Person)-[:ACTED_IN]->(m:Movie)
WITH person, count(*) as appearances, collect(m.title) as movies
WHERE appearances > 1
RETURN person.name, appearances, movies
提示:如果您想在SQL或类似语言中按聚合值进行过滤,则必须使用 HAVING
。这是一个用于过滤聚合信息的单用途子句。在Cypher中, WHERE
可以在这两种情况下使用。
此页面有帮助吗?