1,Neo4j CQL创建一个没有属性的节点
CREATE (<node-name>:<label-name>)
语法说明
label-name规范说法是节点标签名称,其实相当于Mysql数据库中的表名,而node-name是节点名称,其实代指创建的此行数据的行头。#S#标签没有值,用于分类节点(此标签下的节点可生成一张表),属性有键值对 ,node-name只是一个函数名的作用,不储存在数据库中。直译就是:我建个标签为label-name的节点a(node-name),所以create指令中node-name可以省略
示例
CREATE (emp:Employee)
或者
CREATE (:Employee)
Neo4j CQL创建具有属性的节点
它创建一个具有一些属性(键值对)的节点来存储数据。
#S#经测试多个同名属性kvp只会储存一个,值为最后一个的值,即属性名唯一
CREATE (
<node-name>:<label-name>
{
<key>:<Value>
........
<n-key>:<n-Value>
}
)
示例
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })
创建多个标签到节点
语法:
CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
示例
CREATE (m:Movie:Cinema:Film:Picture)
创建一个标签分别为Movie:Cinema:Film:Picture的节点
CREATE ({name:"wuming"})
创建无标签只有属性的命令
增加已有节点的属性和标签待测试
2.MATCH查询
Neo4j CQL MATCH命令用于,
从数据库获取有关节点和属性的数据
从数据库获取有关节点,关系和属性的数据
MATCH命令语法:
MATCH
(
<node-name>:<label-name>
)
示例
MATCH (dept:Dept)
但是执行后会报错:
Neo.ClientError.Statement.SyntaxError:
Query cannot conclude with MATCH
(must be RETURN or an update clause) (line 1, column 1 (offset: 0))
如果你观察到错误消息,它告诉我们,我们可以使用MATCH命令与RETURN子句或UPDATA子句。
3.RETURN返回
Neo4j CQL RETURN子句用于 -
检索节点的某些属性
检索节点的所有属性
检索节点和关联关系的某些属性
检索节点和关联关系的所有属性
RETURN命令语法:
RETURN
<node-name>.<property1-name>,
........
<node-name>.<propertyn-name>
示例
MATCH (e:Employee) RETURN e
#S#这里e是搜索结果的容器,Employee是搜索的标签内容
MATCH (dept: Dept)
RETURN dept.deptno,dept.dname,dept.location
#S#这里直接返回Dept这个标签下节点的各个属性的值
测试:
再建立一个Dept标签的不同节点(节点名竟然可省略)
CREATE (dept66:Dept { deptno:66,dname:"Accounting66",location:"Hyderabad66" })
再执行此命令试试
结果:
可以看出,就是一个没有行名的表。。。
再次证明dept66就是一个函数名
按属性查询
MATCH (n { name: "name1233" })
RETURN n
可查询到属性name值为name1233的节点
4.关系基础
Neo4j图数据库遵循属性图模型来存储和管理其数据。
根据属性图模型,关系应该是定向的。 否则,Neo4j将抛出一个错误消息。
基于方向性,Neo4j关系被分为两种主要类型。
单向关系
双向关系
使用新节点创建关系
示例
CREATE (e:Employee)-[r:DemoRelation]->(c:Employee)
这句会创建节点e,节点c,以及e -> c的关系r,这里需要注意方向,比如双向是
CREATE (e:Employee)<-[r:DemoRelation]->(c:Employee)
#S#这个双向测试失败Neo.ClientError.Statement.SyntaxError: Only directed relationships are supported in CREATE (line 1, column 20 (offset: 19))
“CREATE (e:Employee)<-[r:DemoRelation]->(c:Employee)”
查了几个资料
Neo4J:创建双向关系
Neo4j数据建模优化:双向关系
再测试添加一个反向
CREATE (e:Employee)<-[r:DemoRelation]-(c:Employee)
成功又创建了一对单向关系
结论:箭头可以这么用,但是不能同时用(不知道为啥会有这么明显的坑待填)
使用已知节点创建带属性的关系:
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)//感觉应该是<tmp1-name>:<label-name>),(<tmp2-name>:<labe2-name>
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>//<tmp1-name>-[<relationship-tmp-name>:<relationship-label-name>
{<define-properties-list>}]->(<node2-label-name>)
// {<属性键值对list>}]->(<tmp2-name>)
RETURN <relationship-label-name>
//RETURN <relationship-tmp-name>
//这两句原文很乱,label-name应该是真正的名字tmp是函数名
示例
MATCH (cust:Customer),(cc:CreditCard)
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
RETURN r
#S#这里用之前有的两个节点
MATCH (cust:Employee),(cc:Dept)
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
RETURN r
结果:
就是这么一团玩意…
结论:
neo4j中不指定节点的话,会对所有符合条件的节点进行操作=。=
检索关系节点的详细信息:
MATCH
(<node1-label-name>)-[<relationship-label-name>:
//(<node1-tmp-name>)-[<relationship-tmp-name>:
<relationship-name>]->(<node2-label-name>)
//<relationship-name>]->(<node2-tmp-name>)
RETURN <relationship-label-name>
//RETURN <relationship-tmp-name>
示例
MATCH (cust)-[r:DO_SHOPPING_WITH]->(cc)
RETURN cust,cc
直译:返回有这个DO_SHOPPING_WITH关系的节点
测试:r没用到可不可以省略 结果:可以。
这点东西搞这么麻烦。。。这个世界坑可不可以少一点
下一篇WHERE吧
转载:https://blog.csdn.net/weixin_42832191/article/details/104763128