2.MATCH命令,WHERE子句和RETURN子句
前文中使用
MATCH (a:人),(b:人)
WHERE a.name="小华"
AND b.name="小丽"
取到了小华和小丽两个节点
那么具体怎么使用MATCH命令呢?
1. MATCH命令单独使用
如找到所有的具有“人”标签的节点,则可输入:
MATCH (a:人) RETURN a
a是任意字母 需要注意的是 如果查询以MATCH结尾会报:
Query cannot conclude with MATCH
所以在单独使用MATCH命令的时候需要加上RETURN子句。
RETURN 子句同理也不可单独使用 ,应该与CREATE命令或者MATCH命令共同使用。最终结果如图:

同理节点之间的关系也可以通过MATCH找到,如:
MATCH (a)-[r:父子]->(b)
RETURN r
结果如图:

2. MATCH与WHERE的配合使用
2.1 寻找特定节点
上文中的
MATCH (a:人) RETURN a
只能找到同一标签的节点,如果要具体找到某一个标签,该如何实现呢?
如找到小华这一个节点则可使用:
MATCH (a:人) WHERE a.name="小华" RETURN a
即可实现找到某一选定节点的功能,如图:

值得注意的是,前文中使用的
MATCH (a:人),(b:人)
WHERE a.name="小华"
AND b.name="小丽"
实际上是为了省事的错误写法,此写法会导致报出警告:
This query builds a cartesian product between disconnected patterns.
即两个查询一起会导致出现笛卡尔积使得查询速度变慢,如果要同时MATCH两个节点,可以使用:
MATCH (a:人)
WHERE a.name="小华"
MATCH (b:人)
WHERE b.name="小丽"
RETURN a,b
这样就不会出现笛卡尔积的现象,最终结果如下:

如图中所示,如果找两个节点,且他们之间有相互关系的时候,则会将他们俩之间的关系也返回。
如果要找到某个特定的关系应该怎么做呢?
首先我们在小明小华小马之间CREATE朋友的关系,其中小明和小华是三年,小明和小马是6年,小马和小华是2年,可得如图关系:

比如我想得到一段时长3年的朋友关系,只需:
MATCH (a)-[r:朋友]->(b)
WHERE r.时长=3
RETURN r
即可得到:

网友评论