Neo4j -- Cypher 教程(CQL)

本文介绍了Cypher图形查询语言的基础知识,包括其设计理念、语法结构及如何使用Cypher进行节点和关系的创建、查询、删除等操作。Cypher是一种描述性的语言,适用于图形数据库的高效查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. Cypher介绍

Cypher”是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询。Cypher还在继续发展和成熟,这也就意味着有可能会出现语法的变化。同时也意味着作为组件没有经历严格的性能测试。
Cypher设计的目的是一个人类查询语言,适合于开发者和在数据库上做点对点模式(ad-hoc)查询的专业操作人员。它的构念是基于英语单词和灵巧的图解。
Cyper通过一系列不同的方法和建立于确定的实践为表达查询而激发的。许多关键字如like和order by是受SQL的启发。模式匹配的表达式来自于SPARQL。正则表达式匹配实现实用Scala programming language语言。
Cypher是一个申明式的语言。对比命令式语言如Java和脚本语言如Gremlin和JRuby,它的焦点在于从图中如何找回(what to retrieve),而不是怎么去做。这使得在不对用户公布的实现细节里关心的是怎么优化查询。
Neo4j使用Cypher查询图形数据,和SQL很相似,Cypher语言的关键字不区分大小写,但是属性值,标签,关系类型和变量是区分大小写的。

注:不理解一些概念的童鞋可以参考https://blog.youkuaiyun.com/zfqbd/article/details/78857643


二. Cypher语法

Neo4j的主要构建块是:节点、关系、属性,CQL命令用来操作这三个构建块,我们使用CQL基本命令来描绘如图所示的关系:

è¿éåå¾çæè¿°

 

  • Neo4j CQL - CREATE命令  创建节点或者关系
CREATE (<node-name>:<label-name>)
    CREATE (emp:Employee)
    // 这里emp是一个节点名
    // Employee是emp节点的标签名称    

    //创建无属性节点
     create (p:Person)

    //创建多个标签 标签Person标签People
     create (p:Person:People)

    //创建带属性节点
CREATE (
   <node-name>:<label-name>
   { 	
      <Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>
   }
)
     create (p:Person{name:"刘备",word:"玄德",horse:"的卢",weapon:"双股剑",sex:"男"})
     create (p:Person{name:"关羽",word:"长生",horse:"赤兔",weapon:"青龙偃月刀"})
     create (p:Person{name:"张飞",word:"翼德",horse:"王追",weapon:"丈八蛇矛"})  
     create (p:Person{name:"曹操",word:"孟德",horse:"绝影",weapon:"青虹剑"})  
     create (p:Person{name:"孙权",word:"仲谋",horse:"快航",weapon:"白虹剑"})  

    //创建无属性的关系
    match(p:Person),(g:Person) 
    where p.name="刘备" and g.name="关羽"
    create(p)-[r:MY_GENERAL]->(g) 

    //创建带属性的关系 r是关系名称, MY_ENEMY是一个关系标签名称
    match(p:Person),(g:Person) 
    where p.name="刘备" and g.name="孙权"
    create(p)-[r:MY_ENEMY{relative:"0"}]->(g) 
    return r

  • Neo4j CQL - MATCH命令(从数据库获取有关节点和属性的数据,从数据库获取有关节点,关系和属性的数据)
MATCH(<node-name>:<label-name>)

match (p:Person) //匹配模式,无return返回报错, 一般和return配合使用

  • Neo4j CQL - RETURN子句(返回感兴趣的结果)
语法:
RETURN 
   <node-name>.<property1-name>,
   ........
   <node-name>.<propertyn-name>
match (p:Person)
   return p.name  
  • Neo4j CQL - DELETE删除 (删除节点和关联关系,与MATCH命令一起使用。 语法如下:)
DELETE <node-name-list>

DELETE节点和关系子句语法

DELETE <node1-name>,<node2-name>,<relationship-name>

   // 删除节点
   match (p: Person) 
   where p.name="刘备"
   delete p

   // 删除关系
   MATCH (p: Person)-[r:MY_GENERAL]-(g:Person) 
   DELETE r

  // 删除两个节点和一个关系
  MATCH (cc: CreditCard)-[rel]-(c:Customer) 
  DELETE cc,c,rel
  • Neo4j CQL - REMOVE删除

 

 

 

 

 

 

 

Neo4jCypher查询语言中,函数是构建查询的重要组成部分,它们可以用于处理字符串、数值、日期、地理空间数据等。以下是一些常用的Cypher函数及其使用方法。 ### 1. 聚合函数 聚合函数用于对一组值进行计算,并返回单个值。常见的聚合函数包括: - `count()`:计算匹配的行数。例如,`MATCH (n:Person) RETURN count(n)` 将返回所有`Person`节点的数量[^1]。 - `sum()`:计算所有值的总和。例如,`MATCH (n:Product) RETURN sum(n.price)` 将返回所有产品价格的总和。 - `avg()`:计算所有值的平均值。例如,`MATCH (n:Product) RETURN avg(n.price)` 将返回所有产品价格的平均值。 - `min()` 和 `max()`:分别返回最小值和最大值。例如,`MATCH (n:Product) RETURN min(n.price), max(n.price)` 将返回产品价格的最小值和最大值。 ### 2. 字符串函数 字符串函数用于操作和处理字符串数据。 - `split()`:将字符串按指定分隔符拆分为列表。例如,`RETURN split('hello,world', ',')` 将返回 `['hello', 'world']`。 - `replace()`:替换字符串中的部分。例如,`RETURN replace('hello world', 'world', 'Neo4j')` 将返回 `'hello Neo4j'`。 - `substring()`:提取子字符串。例如,`RETURN substring('hello world', 0, 5)` 将返回 `'hello'`。 - `toUpper()` 和 `toLower()`:将字符串转换为大写或小写。例如,`RETURN toUpper('hello')` 将返回 `'HELLO'`。 ### 3. 数值函数 数值函数用于处理数值数据。 - `abs()`:返回绝对值。例如,`RETURN abs(-5)` 将返回 `5`。 - `ceil()` 和 `floor()`:分别返回大于或等于给定数的最小整数和小于或等于给定数的最大整数。例如,`RETURN ceil(3.2)` 将返回 `4`。 - `round()`:四舍五入。例如,`RETURN round(3.5)` 将返回 `4`。 ### 4. 时间和日期函数 时间和日期函数用于处理日期和时间数据。 - `datetime()`:返回当前的日期和时间。例如,`RETURN datetime()` 将返回当前的日期和时间。 - `date()`:返回当前日期。例如,`RETURN date()` 将返回当前的日期。 - `duration()`:计算两个时间之间的持续时间。例如,`RETURN duration('2023-01-01', '2023-01-02')` 将返回 `P1D`,表示一天的时间差。 ### 5. 地理空间函数 地理空间函数用于处理地理坐标数据。 - `distance()`:计算两个地理坐标之间的距离。例如,`RETURN distance(point({latitude: 56.7, longitude: 12.78}), point({latitude: 56.7, longitude: 12.78}))` 将返回 `0`,因为两个点相同。 - `point()`:创建一个地理坐标点。例如,`RETURN point({latitude: 56.7, longitude: 12.78})` 将返回一个地理坐标点。 ### 示例代码 以下是一个简单的Cypher查询示例,展示如何使用一些常用函数: ```cypher MATCH (p:Person) RETURN p.name AS name, toUpper(p.name) AS upperName, length(p.name) AS nameLength, split(p.email, '@') AS emailParts ``` 此查询将返回`Person`节点的名称、大写名称、名称长度以及电子邮件地址的拆分部分。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值