Cypher UNION语句用法详解(附带实例)
UNION 语句的作用是将两个及以上的查询结果合并为一个结果集。在使用 UNION 语句时,多个查询结果中列的数量和列名必须相同,如果不相同则会显异常。
在合并的过程中,如果要保留所有结果行,则可以使用 UNION ALL 语句。如果要删除结果集中的重复项,则可以使用 UNION 语句,具体示例如下。
下面先删除图中的所有节点和关系,代码如下:
然后创建节点,代码如下:
最后创建关系,代码如下:

图 1 节点和关系构成的图(UNION语句)
在合并的过程中,如果要保留所有结果行,则可以使用 UNION ALL 语句。如果要删除结果集中的重复项,则可以使用 UNION 语句,具体示例如下。
下面先删除图中的所有节点和关系,代码如下:
MATCH (n) DETACH DELETE n上述代码会删除所有的节点及关系,读者在使用过程中一定要谨慎。
然后创建节点,代码如下:
CREATE (Anthony:Actor{name:"Anthony Hopkins"}) CREATE (Helen:Actor{name:"Helen Mirren"}) CREATE (Hitchcock:Actor{name:"Hitchcock"}) CREATE (:Movie{title:"Hitchcock"})
最后创建关系,代码如下:
MATCH (Anthony:Actor{name:"Anthony Hopkins"}),(Helen:Actor{name:"Helen Mirren"}), (m:Movie{title:"Hitchcock"}) CREATE (Anthony) - [:KNOWS] -> (Helen) CREATE (Anthony) - [:ACTS_IN] -> (m) CREATE (Helen) - [:ACTS_IN] -> (m)节点和关系所构成的图如下图所示:

图 1 节点和关系构成的图(UNION语句)
UNION合并两个查询并保留重复值
UNION ALL 语句可以用于合并两个查询的结果。在合并过程中,重复的结果会被保留。代码如下:MATCH (n:Actor) RETURN n.name AS name UNION ALL MATCH (n:Movie) RETURN n.title AS name返回值如下:
│"name" │ │"Anthony Hopkins"│ │"Helen Mirren" │ │"Hitchcock" │ │"Hitchcock" │可以看出,UNION ALL 语句两组结果中的公共行进行组合,并返回到一组结果中。返回结果中允许存在重复值。
UNION合并两个查询并删除重复值
UNION 语句可以用于合并两个查询的结果。在合并过程中,重复的结果会被删除。代码如下:MATCH (n:Actor) RETURN n.name AS name UNION MATCH (n:Movie) RETURN n.title AS name返回值如下:
│"name" │ │"Anthony Hopkins"│ │"Helen Mirren" │ │"Hitchcock" │