Neo4j - CQL
Neo4J提供了一个用户友好的web界面,以下是基于web端的操作。
首先是开启服务:
Win+R后cmd,注意是以管理员身份运行以下命令
neo4j.bat console
访问:
http://localhost:7474/
我们将在红框部分执行Cypher命令。
CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。
CREATE 创建
CREATE 表示创建。创建节点,关系和属性。
创建单个节点
CREATE (n:Person {name:'John'}) RETURN n
CREATE
是创建操作,
n
是一个节点名,这个节点名的作用给后面where或return使用,
Person
是节点的标签名称,代表节点的类型,
{}
代表节点的属性,属性类似Python的字典,
RETURN
是返回查询结果,
()
代表的是一个节点。
这条语句的含义就是创建一个标签为Person的节点,该节点具有一个name属性,属性值是John。
创建多个节点
CREATE (:Person {name:'John'}), (:Person {name:'Lili'})
为节点创建多个标签名称
为节点创建多个标签名称:Cinema,Film,Movie,Picture。
CREATE (m:Movie:Cinema:Film:Picture)
创建标签关系
CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2)
MATCH 匹配
MATCH 表示匹配。检索有关节点,关系和属性数据。MATCH 经常需要与其他的语句配合才可以使用。
查询节点
查询 Dept下的内容
MATCH (dept:Dept) return dept
查询带有属性的节点
查询Employee标签下 id=123,name="Lokesh"的节点
MATCH (p:Employee {id:123,name:"Lokesh"}) RETURN p
结合where命令
查询Employee标签下name="Lokesh"的节点,使用(where命令)
MATCH (p:Employee)
WHERE p.name = "Lokesh"
RETURN p
MATCH (emp:Employee)
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
RETURN emp
删除数据库中所有的图
MATCH (n) DETACH DELETE n
MATCH是匹配操作,而小括号()代表一个节点node(可理解为括号类似一个圆形),括号里面的 n 为标识符
DELETE 删除
DELETE 表示删除。删除节点和关系。
删除节点
使用“DELETE e”命令删除Employee节点
MATCH (e: Employee) DELETE e
MATCH (cc: CreditCard)-[rel]-(c:Customer)
DELETE cc,c,rel
REMOVE 移除
REMOVE 表示移除。删除节点和关系的属性。
使用逗号(,)运算符来分隔标签名称列表。
使用dot(。)运算符来分隔节点名称和标签名称。
移除节点属性
“cvv”属性从“DebitCard”节点中删除。
MATCH (dc:DebitCard)
REMOVE dc.cvv
RETURN dc
多标签移除
删除节点不需要的标签
MATCH (m:Movie)
REMOVE m:Picture
ORDER BY 以…排序
ORDER BY 表示以…排序。排序检索数据。
根据某个属性排序
MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name
SET 设置
SET 表示设置。添加或更新标签
添加属性
MATCH (book:Book)
SET book.title = 'superstar'
RETURN book
UNION 合并
使用UNION子句从两个节点检索数据
UNION子句(过滤重复行)
它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。
要求:结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
cc.valid_from as valid_from,cc.valid_to as valid_to
UNION
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
dc.valid_from as valid_from,dc.valid_to as valid_to
UNION ALL子句(不过滤重复行)
它结合并返回两个结果集的所有行成一个单一的结果集。它还返回由两个节点重复行。
要求:结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该是相同的。
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
cc.valid_from as valid_from,cc.valid_to as valid_to
UNION ALL
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
dc.valid_from as valid_from,dc.valid_to as valid_to
LIMIT和SKIP子句
LIMIT 限制行数
MATCH (emp:Employee)
RETURN emp
LIMIT 2
因为我们定义了limit = 2。这意味着前两行。
SKIP 跳过几行
MATCH (emp:Employee)
RETURN emp
SKIP 2
skip跳过两个节点,因此我们定义了skip = 2。这意味着最后两行。
MERGE命令
CQL MERGE命令将新的节点添加到数据库,只有当它不存在,如果存在,就不创建。
MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})
NULL 处理
MATCH (e:Employee)
RETURN e.id,e.name,e.sal,e.deptno
CREATE (e:Employee)
创建了两个Employee,但是第二个没有属性值,或者说属性值是空的
MATCH (e:Employee)
RETURN e.id,e.name,e.sal,e.deptno)
这样直接查询就是出现NULL的存在
MATCH (e:Employee)
WHERE e.id IS NOT NULL
RETURN e.id,e.name,e.sal,e.deptno
通过上面的命令,我们可以过滤掉含有NULL值的节点的返回。
IN操作符
MATCH (e:Employee)
WHERE e.id IN [123,124]
RETURN e.id,e.name,e.sal,e.deptno
此查询仅返回在IN运算符中指定的id匹配的两行。
Neo4j数据库服务器为关系分配一个默认Id属性:
节点的Id属性的最大值约为35亿。
Id的最大值关系的属性的大约35亿。
方向关系
() - [] → ()。 它表示从左侧节点到右侧节点的方向。
() - [] - (),这意味着没有方向的关系。 然后Neo4j DB服务器应该抛出一个错误消息
CREATE (:pig{name:"猪爸爸",age:12})-[:夫妻]->(:pig{name:"猪妈妈",age:10})
函数
UPPER()
它用于将所有字母更改为大写字母。
MATCH (e:Employee)
RETURN e.id,UPPER(e.name),e.sal,e.deptno
LOWER()
它用于将所有字母改为小写字母。
MATCH (e:Employee)
RETURN e.id,LOWER(e.name),e.sal,e.deptno
SUBSTRING()
它用于获取给定String的子字符串。
MATCH (e:Employee)
RETURN e.id,SUBSTRING(e.name,0,2),e.sal,e.deptno
REPLACE()
它用于替换一个字符串的子字符串。
AGGREGATION聚合
MATCH (e:Employee)
RETURN MAX(e.sal),MIN(e.sal)
从数据库中可用的所有Employee节点中查找最大和最小工资值。
MATCH (e:Employee)
RETURN SUM(e.sal),AVG(e.sal)
从数据库中可用的所有Employee节点查找总和平均薪水值。
STARTNODE和ENDNODE
STARTNODE 用于知道关系的开始节点
ENDNODE 用于知道关系的结束节点
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN STARTNODE(movie)
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN ENDNODE(movie)
ID和TYPE
ID和TYPE关系函数来检索关系的Id和类型详细信息。
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN ID(movie),TYPE(movie)
参考:
[1]https://www.w3cschool.cn/neo4j/neo4j_need_for_graph_databses.html
[2]https://zhuanlan.zhihu.com/p/88745411?utm_source=wechat_session