Neo4j图数据库Cypher‌语句详解
一、基础增删改查语句类似sql语句1、创建节点及节点属性 CREATE (n:ht {name:合同, type:节点}) 说明n变量名随意写 ht标签相当于mysql中的表 name、type属性相当于mysql中的字段 2、查询节点nametest 的 Person标签中的节点 MATCH(a:Person) WHERE a.nametest RETURN a; 说明MATCH关键字类似mysql中的from a变量名随意写类似别名 WHERE条件 RETURN代表此语句为查询操作类似select返回查出的a标签中的数据 注用neo4j自带的ID查询时用 id(n) 例如MATCH(n:Company) WHERE n.name长治三元中能煤业有限公司 and id(n) 688 delete n 3、更新节点 MATCH(n:jsd) WHERE n.type公路 and n.name结算单 SET n.name公路结算单 说明SET代表此语句为修改操作类似update后跟需修改的属性和值 4、删除节点 MATCH(n:jsd) WHERE n.type公路 and n.name公路结算单 delete n 说明delete代表此语句为删除操作与mysql中delete类似 5、创建关系 MATCH(jsd{name:铁路结算单}),(ht{name:合同}) CREATE (ht)-[r:结算{relationship:太极}]-(jsd) 说明MATCH(jsd{name:铁路结算单}),(ht{name:合同})查询出name为铁路结算单的jsd节点、name为合同的ht节点 CREATE (ht)-[r:结算{relationship:太极}]-(jsd)创建名为“结算”的关联关系relationship属性值为太极ht为起始节点jsd为箭头指向节点 可创建多个(ht)-[r:结算{relationship:太极}]-(jsd)关系 6、查询关系关系是带方向的查询关系使用的符号有3种-- 代表任意方向-- 和 -- 分别代表箭头方向的关系 1查询连接节点name为“合同”的所有关系的节点 match ({name: 合同}) -- (n) return n; 4查询连接节点name为“合同”的从节点name为“合同”出发的所有有向关系的节点 match ({name: 合同}) -- (n) return n; 3使用变量为关系命名查询连接节点name为“合同”的所有关系的 relationship 属性和节点的 name 属性 match ({name: 合同}) - [r] - (n) return n.name as name, r.relationship as relationship; 说明 [r]关联关系别名为r (n)节点别名为n return n.name as name, r.relationship as relationship代表查询字段类似【select n.name as name, r.relationship as relationship】 7、修改关系 match ({name: 合同}) - [r:关系] - ({name: 铁路结算单}) set r.relationship 正极 说明[r:关系]指定哪一类关系 set代表此语句为修改操作 r.relationship 正极修改的属性及值 8、删除关系 match ({name: 合同}) - [r:结算] - ({name: 铁路结算单}) where r.relationship太极 delete r; match (n:Company{name: 山西煤炭运销集团港口贸易有限公司}) - [r:businessGuest] - ({code: 1001A7100000002DDKUA}) where id(n)336 delete r; 说明[r:关系]指定哪一类关系 where r.relationship太极指定的关系属性 delete代表此语句为删除操作二、聚合函数1 计算节点的数量查询 Person 标签节点的数量 MATCH (p:Person) RETURN count(p) 2 聚合求和查询 Person 标签节点的年龄总和 MATCH (p:Person) RETURN sum(p.age) 3 聚合求最大值和最小值查询 Person 标签节点的最大年龄和最小年龄 MATCH (p:Person) RETURN max(p.age), min(p.age) 4 使用 avg 计算平均值查询 Person 标签节点的平均年龄 MATCH (p:Person) RETURN avg(p.age)三、筛选和排序1、 使用 WHERE 进行过滤使用 WHERE 子句来过滤结果。例如查询 Person 标签中 name 为 “Alice” 且 age 大于 30 的节点 MATCH (p:Person) WHERE p.name Alice AND p.age 30 RETURN p 2、 排序使用 ORDER BY 对查询结果进行排序例如按 age 属性升序排列 MATCH (p:Person) RETURN p ORDER BY p.age ASC 3、 限制结果数量使用 LIMIT 限制查询返回的结果数量。例如只返回前 5 个节点 MATCH (p:Person) RETURN p LIMIT 5 4、 节点去重使用DISTINCT去重 MATCH (c:Company) WHERE c.num is not null RETURN DISTINCT c 5、分页查询SKIP-跳过的条数pageNo从0开始limit-每页数据量 MATCH (c:Company) WHERE c.num is not null RETURN SKIP $pageNo * $pageSize LIMIT $pageSize 6、 模糊查询 6.1、使用CONTAINS--完全模糊查询等价 SQL LIKE %port% MATCH (n:Advance) where n.type CONTAINS port RETURN count(n) 6.2、使用STARTS WITH--模糊查询等价 SQL LIKE port% MATCH (n:Advance) where n.type STARTS WITH port RETURN count(n) 6.3、使用ENDS WITH--模糊查询等价 SQL LIKE %port MATCH (n:Advance) where n.type ENDS WITH port RETURN count(n) 7、 多类型节点分页排序查询 MATCH (n) WHERE n:Contract OR n:Advance RETURN n ORDER BY n.code DESC, n.name ASC SKIP 10000 LIMIT 10

相关新闻