创建建实体
CREATE (emp:Employee{id:135,name:"Sky",sal:5000,deptno:10,deptName:"JS"})
CREATE (emp2:Employee{id:136,name:"shine",sal:5000,deptno:10,deptName:"JS"})
CREATE (emp1:Employee{id:134,name:"line",sal:4000,deptno:9,deptName:"JS"})
CREATE (m:Employee:Employer{id:01,name:"jack",sal:100,deptno:01,deptName:"aaa",weight:78})
简单查询
MATCH (p:Employee {id:135,name:"Sky"}} RETURN P
MATCH (p:Employee) WHERE p.name = "Sky" RETURN p
MATCH (p:Employee) RETURN p
MATCH (p: Employee) RETURN p.id,p.name,p.sal,p.deptno,p.deptName
新增创建关系
MATCH(p1:Employer),(p2:Employee) where p1.name="jack" and p2.name="Sky" create (p1) -[Employer_Employee:雇佣 {ralation:"正式工"}] -> (p2)
MATCH(p1:Employer),(p2:Employee) where p1.name="jack" and p2.name="shine" create (p1) -[Employer_Employee:雇佣 {ralation:"正式工"}] -> (p2)
MATCH(p1:Employer),(p2:Employee) where p1.name="jack" and p2.name="line" create (p1) -[Employer_Employee:雇佣 {ralation:"正式工"}] -> (p2)
MATCH(p1:Employer:Employee) where p1.name="jack" create (p1) -[Employer_Employee:雇佣 {ralation:"正式工"}] -> (p1)
修改属性
MATCH(p1:Employee) where p1.id=0 SET p1.name="shine"
删除数据
// DELETE操作用于删除节点和关联关系。
// REMOVE操作用于删除标签和属性。
MATCH (p1)-[Employer_Employee:雇佣 {ralation:"正式工"}] -> (p2) delete Employer_Employee
============
CREATE (book:Book {id:122,title:"Neo4j Tutorial",pages:340,price:250})
//删除一个属性
MATCH (book { id:122 }) REMOVE book.price RETURN book
//重新添加,并赋值
MATCH(book{id:122}) set book.price= 200 return book
CREATE (book1:Book:Document:Database {id:100,title:"How work?",pages:890,price:129})
MATCH(bk) where bk.id=100 REMOVE bk:Database RETURN bk
====================
联合的使用
CREATE (a1:CreditCard {id:1, number:1, name:"b1"})
CREATE (a2:CreditCard {id:2, number:2, name:"b2"})
CREATE (c1:DebitCard {id:1, number:2, name:"c1"})
CREATE (c2:DebitCard {id:3,number:4, name:"c2"})
CREATE (c2:DebitCard {id:1,number:1, name:"b1"})
//UNION ALL 两个表的组合叠加,即两个表的内容和;
//UNINON 叠加后,去掉重复行
MATCH (a:CreditCard)
RETURN a.id as id,a.number as number,a.name as name
UNION ALL
MATCH (c:DebitCard)
RETURN c.id as id,c.number as number,c.name as name
//skip 跳过几行; limit 输出几行;
MATCH (c:DebitCard) RETURN c skip 1 limit 2
//merge 如果节点不存在时等同于create,存在则什么也不做;
MERGE (c2:DebitCard {id:1,number:1, name:"b1"})
//IS NOT NULL ; IS NULL
MATCH (c:DebitCard) WHERE c.id IS NOT NULL RETURN c.id,c.name,c.number
数据库设计经验:
图数据库设计:一种类似看板的数据库
1) 实体:识别名词 ,有点类似关系DB中的一条数据,软件设计中的对象;
2) 标签: 用于分组,有点类似关系DB中的表,软件设计中的类;
3) 关系:动词/动名词, 有起点和终点
4)属性: 存储有关节点或与其描述的实体之间的关系的相关数据,可通过了解用例需要对数据提出哪些问题来提取它们。
关系数据库->图数据库
NO | 元素 | 说明 |
1 | 表->节点标签 | 将关系模型中的每个实体表都转成为图模型中节点上的标签 |
2 | 行->节点 | 将关系实体表中的每一行都成为图中的一个节点 |
3 | 列->节点的属性 | 将关系表上的列(字段)成为图中的节点属性 {时间关联、中间类、类型树单独考虑} |
4 | 主键 | 删除技术主键,保留业务主键 |
5 | 添加约束/索引 | 为业务主键添加唯一约束,为频繁查找属性添加索引 |
6 | 关系的外键 | 用关系替换另一个表的外键,然后将其删除 |
7 | 无默认值 | 删除具有默认值的数据,无需存储这些值 |
8 | 清理数据 | 必须将非规范化表中的重复数据拉到单独的节点中以获得更清晰的模型 |
9 | 数组的索引列 | 索引列名(如phone1,phone2,phone3)可能表示数组属性 |
10 | 将表联接到关系 | 将联接表转换为关系,这些表上的列成为关系属性 |
11 |
其中Employee 为节点类型; 名称为sky,请确保上面两个组合后是唯一的
节点间关系,用动词 -----建立相关的关系结构;
查找游离节点:
match (n) where not(n)-[]-() return n
删除指定ID的节点
MATCH (m:`国家`)-[r:`包含`] ->(n)
where id(n) = 87
delete r,n
添加节点
MERGE (n:`SH-60`)
SET n.动力类型="涡轮轴发动机"
RETURN n
删除节点属性
MATCH (n:`SH-60`) REMOVE n.动力类型 RETURN n