neo4j是图形数据库,目前也是在学习阶段,主要是记录自己学习的过程。
1.创建(create)语句
语法:
CREATE (<node-name>:<label-name>)
语法说明:
语法元素 | 描述 |
---|---|
CREATE | 它是一个Neo4j CQL命令。 |
<node-name> | 它是我们要创建的节点名称。 |
<label-name> | 它是一个节点标签名称 |
创建一个节点例子:
create (user:User)
这里的user是节点名,User是 user 节点的标签名称。
当然,我们还可以在创建一个节点的时候,增加节点的属性。
创建带有属性节点语法
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)
语法说明:
语法元素 | 描述 |
---|---|
<node-name> | 它是我们将要创建的节点名称。 |
<label-name> | 它是一个节点标签名称 |
<Property1-name>...<Propertyn-name> | 属性是键值对。 定义将分配给创建节点的属性的名称 |
<Property1-value>...<Propertyn-value> | 属性是键值对。 定义将分配给创建节点的属性的值 |
例子:
create (user:User{id:"1",name:"xiaoming",age:"26"})
大括号中的数据可以看做是一个json串。
打开neo4j的页面:输入上面的命令,如下图展示就成功创建了了一个带有多个属性的节点了。
2.修改(set)语句:
SET 子句向现有节点或关系添加新属性或者添加或更新属性值。
向节点新增字节属性并赋值:
match (u:User) set u.address='bj' return u
更新已有属性的值:id=“1”的address属性更新为hb
match (u:User) where u.id="1" set u.address='hb' return u
这里可以搭配where使用,做条件过滤筛选。
3.删除语句
删除语句有两个关键字:delete和remove。
delete可以删除节点,也可以删除节点及相关节点和关系。关系的使用会在下篇文章进行总结。
例子:
//创建一个测试节点,并进行删除
//创建test节点,属性id=1
create (t:test{id:1})
//删除test节点
match (t:test) delete t
如果节点之间有关系的存在,那么用delete关键字进行删除会报错,会在下篇文章做演示。
remove可以删除节点或关系的标签,也可以除节点或关系的属性。
例子:
//创建test节点,有id和name属性
create (t:test{id:1,name:'test'})
//删除test的id属性
match (t:test) remove t.id return t
delete和remove的区别:
delete操作用于删除节点和关联关系。
remove操作用于删除标签和属性。
4.查询(MATCH)语句:
MATCH语法:
MATCH
(
<node-name>:<label-name>
)
语法说明:
语法元素 | 描述 |
---|---|
<node-name> | 这是我们要查询一个节点名称。 |
<label-name> | 这是一个节点的标签名称 |
RETURN语法:
RETURN
<node-name>.<property1-name>,
........
<node-name>.<propertyn-name>
语法说明:
语法元素 | 描述 |
---|---|
<node-name> | 它是我们将要创建的节点名称。 |
<Property1-name>...<Propertyn-name> | 属性是键值对。 <Property-name>定义要分配给创建节点的属性的名称 |
例子:
match (user:User) return user
return就是需要返回的数据,user的话就是返回user节点所有数据。
注意:match语法要和return或者delete等语法联合使用,如果只是用match会报错。
正确执行后:
当然,我们可以查询user节点的某一个属性作为返回值,对比mysql会更容易理解。
mysql中是将查询返回属性放在了前面,neo4j是放在后面。
//mysql的写法:
select id from user
//neo4j
match (user:User) return user.id
return后面是节点或者节点.属性名。
如果需要加过滤条件,那么就需要where语法了。
where语法
where语法和mysql的语法一样,都是过滤条件,多个条件用and、or、not、XOR做条件拼接。
条件中的比较运算符包括=、<>(不等于)、>、>=、<、<=。
例子:
match (u:User) where u.id="1" return u
这个语句就是查询id=“1”的数据,注意,如果存入的数据带有“”,那么条件也要带有“”。如果是数字,那么就不要带“”。条件要带有字节名.属性的格式,这个类似于mysql的表名.字段。
多条件例子:
match (u:User) where u.id="1" and u.age = 25 return u
group by语法
和mysql语法一样,group by后加属性名进行属性排序,asc升序,desc降序排序。默认不加是asc升序排序。
例子:
match (u:User) return u group by u.age asc
union语法:
将两个不同的结果合并成一组结果
创建另外一个节点,做两个表的拼接
create (p:Phone{user_id:1,phone:123456,address:"bj"})
然后查询两个表并且做union拼接。
match (p:Phone) return p.user_id as id,p.address as a,p.phone as name union match (u:User) return u.id as id ,u.age as a,u.name as name
注意,union拼接的时候,必须所有的属性名要一直,否则会报错。