neo4j查询语句 查询语句( 二 )
<:father>->(dst:character) RETURN dst.name╒══════════╕│"dst.name"│╞══════════╡│"jupiter" │└──────────┘查询父亲 , 其实是一个查询关系 / 边的操作 , 这里不做赘述 , 上面插入边的时候简单介绍了 Gremlin、Cypher、nGQL 这三种图数据库是各自用来标识边的关键词和操作符是什么 。
查询 hercules 的祖父复制代码
# nGQLnebula> LOOKUP ON character WHERE character.name == 'hercules' | \-> GO 2 STEPS FROM $-.VertexID OVER father YIELD $$.character.name;=====================| $$.character.name |=====================| saturn|---------------------# Gremlingremlin> g.V().hasLabel('character').has('name','hercules').out('father').out('father').values('name');==>saturn# Cyphercypher> MATCH (src:character{name:"hercules"})-<:father*2>->(dst:character) RETURN dst.name╒══════════╕│"dst.name"│╞══════════╡│"saturn"│└──────────┘查询祖父 , 其实是一个查询对应点的两跳关系 , 即:父亲的父亲 , 我们可以看到 Gremlin 使用了两次 out() 来表示为祖父 , 而 nGQL 这里使用了 |(Pipe 管道) 的概念 , 用于子查询 。在两跳关系处理上 , 上面说到 Gremlin 是用了 2 次 out() , 而 Cypher、nGQL 则引入了 step 数的概念 , 分别对应到查询语句的 GO 2 STEP 和 <:father *2> , 相对来说 Cypher、nGQL 这样书写更优雅 。
查询年龄大于 100 的人物复制代码
# nGQLnebula> LOOKUP ON character WHERE character.age > 100 YIELD character.name, character.age;=========================================================| VertexID| character.name | character.age |=========================================================| 6761447489613431910| pluto| 4000|---------------------------------------------------------| -5860788569139907963 | neptune| 4500|---------------------------------------------------------| 4863977009196259577| jupiter| 5000|---------------------------------------------------------| -4316810810681305233 | saturn| 10000|---------------------------------------------------------# Gremlingremlin> g.V().hasLabel('character').has('age',gt(100)).values('name');==>saturn==>jupiter==>neptune==>pluto# Cyphercypher> MATCH (src:character) WHERE src.age > 100 RETURN src.name╒═══════════╕│"src.name" │╞═══════════╡│"saturn" │├───────────┤│ "jupiter" │├───────────┤│ "neptune" ││───────────││"pluto"│└───────────┘这个是一个典型的查询语句 , 找寻符合特定条件的点并返回结果 , 在 Cypher 和 nGQL 中用 WHRER 进行条件判断 , 而 Gremlin 延续了它的“编程风”用 gt(100) 表示年大于龄 100 的这个筛选条件 , 延伸下 Gremlin 中 eq() 则表示等于这个查询条件 。
从一起居住的人物中排除 pluto 本人复制代码
# nGQLnebula>GO FROM hash("pluto") OVER lives YIELD lives._dst AS place | GO FROM $-.place OVER lives REVERSELY WHERE \$$.character.name != "pluto" YIELD $$.character.name AS cohabitants;===============| cohabitants |===============| cerberus|---------------# Gremlingremlin> g.V(pluto).out('lives').in('lives').where(is(neq(pluto))).values('name');==>cerberus# Cyphercypher> MATCH (src:character{name:"pluto"})-<:lives>->()<-<:lives>-(dst:character) RETURN dst.name╒══════════╕│"dst.name"│╞══════════╡│"cerberus"│└──────────┘这是一个沿指定点 Pluto 反向查询指定边(居住)的操作 , 在反向查询中 , Gremlin 使用了 in 来表示反向关系 , 而 Cypher 则更直观的将指向箭头反向变成 <- 来表示反向关系 , nGQL 则用关键词 REVERSELY 来标识反向关系 。
Pluto 的兄弟们居住在哪复制代码
# which brother lives in which place?## nGQLnebula> GO FROM hash("pluto") OVER brother YIELD brother._dst AS god | \GO FROM $-.god OVER lives YIELD $^.character.name AS Brother, $$.location.name AS Habitations;=========================| Brother | Habitations |=========================| jupiter | sky|-------------------------| neptune | sea|-------------------------## Gremlingremlin> g.V(pluto).out('brother').as('god').out('lives').as('place').select('god','place').by('name');==>
- 全国英语等级考试怎么发短信查询
- 赞美师生情谊的诗词佳句 师生情谊的优美语句
- 中秋节经典句子语句 关于中秋的名句有哪些
- 怎么查询别人帮我订的机票
- 快递不动了该联系谁
- 2020阜阳中考成绩怎样查询
- 生育保险在哪里查
- 2020保定中考成绩查询时间
- 海尔热水器安装费用如何查询
- 安耐晒日期怎么查询
