投射子句用于定义如何返回数据集,并可以对返回的表达式设置别名,而过滤子句用于对查询的结果集按照条件进行过滤
Return子句
使用return子句返回节点,关系和关系。
1,返回节点
MATCH (n { name: 'B' })
RETURN n2,返回关系
MATCH (n { name: 'A' })-[r:KNOWS]->(c)
RETURN r3,返回属性
MATCH (n { name: 'A' })
RETURN n.name4,返回所有元素
MATCH p =(a { name: 'A' })-[r]->(b)
RETURN *5,为属性设置别名
MATCH (a { name: 'A' })
RETURN a.age AS SomethingTotallyDifferent6,返回谓词(predicate),文本(literal)或模式(pattern)
MATCH (a { name: 'A' })
RETURN a.age > 30, "I'm a literal",(a)-->()7,使用distinct关键字返回不重复值
MATCH (a { name: 'A' })-->(b)
RETURN DISTINCT bwith 子句
一个查询(Query)语句有很多查询子句,每一个查询子句按照特定的顺序执行,每一个子句是查询的一部分(Part)。with子句的作用是把上一个查询的结果进行处理,作为下一个查询的数据源,也就是说,在上一个查询的结果输出到客户端之前,把结果传递到后续的子句中去。
1,对聚合的结果进行过滤
聚合的结果必须通过with子句才能被过滤,例如,with子句保留otherPerson,并新增聚合查询count(*),通过where子句过滤,返回查询结果:Anders。
MATCH (david { name: 'David' })--(otherPerson)-->()
WITH otherPerson, count(*) AS foaf
WHERE foaf > 1
RETURN otherPerson.name
2,限制返回的结果
MATCH (n { name: 'Anders' })--(m)
WITH m
ORDER BY m.name DESC LIMIT 1
MATCH (m)--(o)
RETURN o.nameunwind子句
unwind子句用于把list格式的字符串拆开为行的序列
1,拆开列表
UNWIND [1, 2, 3, NULL ] AS x
RETURN x, 'val' AS y2,拆开嵌套列表
WITH [[1, 2],[3, 4], 5] AS nested
UNWIND nested AS x
UNWIND x AS y
RETURN y3,Collect函数
collect函数用于把值组装成列表
WITH [1, 1, 2, 2] AS coll
UNWIND coll AS x
WITH DISTINCT x
RETURN collect(x) AS setOfValsWhere子句
使用Where子句对查询的结果进行过滤
1,按照逻辑表达式来过滤
MATCH (n)
WHERE n.name = 'Peter' XOR (n.age < 30 AND n.name = 'Tobias') OR NOT (n.name = 'Tobias' OR n.name = 'Peter')
RETURN n.name, n.age2,按照节点的标签来过滤
MATCH (n)
WHERE n:Swedish
RETURN n.name, n.age3,按照节点的属性来过滤
MATCH (n)
WHERE n.age < 30
RETURN n.name, n.age4,按照关系的属性来过滤
MATCH (n)-[k:KNOWS]->(f)
WHERE k.since < 2000
RETURN f.name, f.age, f.email5,按照动态计算的属性来计算
WITH 'AGE' AS propname
MATCH (n)
WHERE n[toLower(propname)]< 30
RETURN n.name, n.age6,是否存在属性
MATCH (n)
WHERE exists(n.belt)
RETURN n.name, n.belt7,字符串匹配
对字符串进行匹配:starts with、ends with,contains
MATCH (n)
WHERE n.name STARTS WITH 'Pet'
RETURN n.name, n.age
MATCH (n)
WHERE n.name ENDS WITH 'ter'
RETURN n.name, n.age
MATCH (n)
WHERE n.name CONTAINS 'ete'
RETURN n.name, n.age8,正则匹配
使用 =~ 'regexp' 匹配正则 ,如果正则表达式以(?i)开头,表示整个正则是大小写敏感的。
MATCH (n)
WHERE n.name =~ 'Tob.*'
RETURN n.name, n.age
MATCH (n)
WHERE n.name =~ '(?i)ANDR.*'
RETURN n.name, n.age9,匹配路径模式
MATCH (tobias { name: 'Tobias' }),(others)
WHERE others.name IN ['Andres', 'Peter'] AND (tobias)<--(others)
RETURN others.name, others.age使用not来排除路径模式:
MATCH (persons),(peter { name: 'Peter' })
WHERE NOT (persons)-->(peter)
RETURN persons.name, persons.age使用属性来匹配路径:
MATCH (n)
WHERE (n)-[:KNOWS]-({ name: 'Tobias' })
RETURN n.name, n.age使用关系类型来匹配路径:
MATCH (n)-[r]->()
WHERE n.name='Andres' AND type(r)=~ 'K.*'
RETURN type(r), r.since10,列表
使用IN操作符表示匹配列表中的元素
MATCH (a)
WHERE a.name IN ['Peter', 'Tobias']
RETURN a.name, a.age11,缺失值
如果属性值缺失,那么属性值默认值是null,null和任何值比较都是false;可以使用is not null 或 is null来判断是否为null
MATCH (person)
WHERE person.name = 'Peter' AND person.belt IS NULL
RETURN person.name, person.age, person.belt排序
使用order by对查询的结果进行排序,默认是升序,使用关键字desc使Cypher按照降序进行排序。
参考:http://www.yuqingqi.com/article/62651
SKIP和LIMIT
SKIP是跳过前N行,LIMIT是限制返回的数量
评论列表(0条)