图数据库neo4j学习笔记(1)
Neo4j图数据库学习笔记
简单数据结构介绍:
Neo4j主要有节点和边构成,属性key:value组成。
节点会有所属标签,以及含有属性,边关系也会有所属标签和含有属性。
关系具有方向分为单向和双向。
每个关系包含“开始节点”或“从节点”和“结束节点”或“结束节点”
简单Cql操作:
1.Create命令
create (emp:Employee{id:123,name:"Lokesh",sal:35000,deptno:10})
解释:创建一个节点以及所属标签和属性
emp:创建的节点名称
Employee:创建的节点所属的标签
id,name,sal,deptno:节点的属性
123,”lokesh”,35000,10:属性的值
create (emp:Employee{id:124,name:"cala",sal:350000,deptno:100}) return emp
解释:创建一个节点以及所属标签和属性并返回这个节点
create (emp:Employee:People{id:124,name:"cala",sal:350000,deptno:100}) return emp
解释:也可以创建多个标签Employee,People是emp的多个标签名称
create(depa:Department{id:10,name:"学习部门"}) return depa
解释:创建一个部门
2. match和return命令
Match (emp:Employee) return emp.deptno
解释:查询Employee标签下的emp节点,并返回emp.deptno属性值
3. 关系命令
create(depa)-[r:DEPA_TO_EMP{id:1}]->(emp)
解释:创建一个depa到emp的关系
r:关系名称
DAPA_TO_EMP:关系标签
Id:关系下的属性
1:属性的值
4. Where子句
Match(emp:Employee) where emp.id=123 return emp
解释:where做条件过滤
5. Delete删除节点和关系
match(depe: Dept) delete depe
解释:删除节点depe,如果节点上有关系需要先删除关系
Match(depe:Dept)-[r]-(depa:Department) delete r
解释:删除关系r
6. Set添加属性和Remove删除标签和属性
Match(depa:Department) set depa.depa_info = "好好学习的部门" return depa
解释:给depa节点添加一个depa_info属性和值
Match(depa:department) remove depa.depa_info return depa
解释:删除depa节点上的depa_info属性和值
7. Sorting排序
match(emp:Employee)return emp.empid,emp.name,emp.salary,emp.deptnoorder by emp.name
解释:获取emp并且按照name升序排序。Tip:后面加desc变为逆序
8. Limit和skip子句
match (emp:Employee) return emp limit 1
解释:获取emp节点的结果第一条
match (emp:Employee) return emp skip 1
解释:获取emp节点的结果最后一条
9. Null值处理和in语句
match (emp:Employee) where emp.id is null return emp
解释:返回id为null的结果。Tip:is not null返回不为null的结果
Match(emp:Employee) where id in [123] return emp
解释:返回结果id在in里面的结果集
10. 索引
Create index on : Employee(name)
解释:在Employee标签下的节点属性name创建一个索引
Drop index on : Employee(name)
解释:删除在Employee标签下的节点属性name的索引
11. Unique
Create constraint on (emp:Employee) assert emp.id is unique
解释:在emp节点下emp.id属性创建一个唯一索引。Tip:添加前需保证属性里面不存在重复
drop constraint on (emp:Employee) assert emp.id is unique
解释:删除在emp节点下的id属性的唯一索引
12. Merge
Merge命令相当于match和create的结合命令,先执行match查询是否有结果。如果没有直接创建,如果有则返回查询的结果。
这个操作应该是个原子操作,在高并发情况下不会出现先查询后插入导致的并发问题。还可以防止插入重复的数据
例子: merge(dubbo:Person{name:”dubbo”}
13. String函数
Lower upper substring
例子:
MATCH (e:Employee) RETURN e.id,UPPER(e.name),e.sal,e.deptno
解释:查询Employee下的e节点的数据,并且把name属性返回的结果全部大写
MATCH (e:Employee) RETURN e.id,lower(e.name),e.sal,e.deptno
解释:查询Employee下的e节点的数据,并且把name属性返回的结果全部小写
MATCH (e:Employee) RETURN e.id,SUBSTRING(e.name,0,2),e.sal,e.deptno
解释:查询Employee下的e节点的数据,并且只取name属性返回结果的前两个字符
14. 聚合函数和关系函数
聚集功能 | 描述 |
COUNT | 它返回由MATCH命令返回的行数。 |
MAX | 它从MATCH命令返回的一组行返回最大值。 |
MIN | 它返回由MATCH命令返回的一组行的最小值。 |
SUM | 它返回由MATCH命令返回的所有行的求和值。 |
AVG | 它返回由MATCH命令返回的所有行的平均值。 |
示例:
match (e:Employee) return count(*)
Match (e:Employee) return max(e.sal),min(e.sal)
Match(e:Employee) return sum(e.sal),avg(e.sal)
15.关系函数列表
功能 | 描述 |
STARTNODE | 它用于知道关系的开始节点。 |
ENDNODE | 它用于知道关系的结束节点。 |
ID | 它用于知道关系的ID。 |
TYPE | 它用于知道字符串表示中的一个关系的TYPE。 |
示例:
Match (dapa)-[r:DAPA_TO_EMP]->(emp) return startnode(r),endnode(r),id(r),type(r)