neo4j 基本语法笔记(全)
按照总监要求看了两天的neo4j 数据库的使用。在网上找了一个基础教程类似于w3c.school的网站(英文 ,中文,中文的翻译的不是很好,如果英文不好可以辅助理解),这个教程基础知识很全全面,从数据库的安装,到spring框架下的使用都有降到,由于spring框架侧重于工程,目前还用不到,所以有关在spring框架下的使用没有看。
neo4j 基础知识点比较少,我这里只整理了21个。
neo4j数据库的基本概述:
neo4j的优点:图数据库的有点是按照的关系深度的遍历。例如:A 的朋友的妻子的妈妈,,类似于这样的推理,图数据库可以推理4层甚至五层,而关系型数据库智能推理三层。
neo4j数据库的容量:节点和关系大约可以存储350亿个,关系可以存储27.5亿。
neo4j图模型规则:数据使用节点 属性和关系表示,节点和关系包含属性;关系连接节点,属性是键值对,节点使用圆,关系使用箭头来表示,关系分为单项和双向;每个关系包含Start Node或者From Node和To Node 或者End Node;
neo4j的cql命令:create match where delete remove return orderby 组(添加或者更新标签),可以允许两个或者多个完全相同的节点存在。
语法和关键字:
1、create: create语句是创建模型语句用创建数据模型
语法格式:create(nodename:label-name { Property1-name:Property1-Value ……. Propertyn-name:Propertyn-Value })
e.g: create (nodename:Nodename{name:”king”, location:”xiamen”})
e.g.: create (A:Person{name:’jim’})-[:Friend]-(B:Person {name:’tim’})-[:Friend]-(C:Person {name:’lucy’}), (A)-[:Know]-(C)
创建一个多标签名称的节点:CREATE (m:Movie:Cinema:Film:Picture);
//* A 是B的朋友,B是C的朋友,A知道C; ()里面表示的是节点,[]里面表示的是关系;{}里面的元素表示的是属性;
2、match: match是查询语句,用于查询数据库中的值。return 语句是返回语句,用于返回查询的结果集
eg. match (a)-[:Friend]-(b) where b.name=’tim’ return b
eg. match (nodename:Nodename) return nodename.name, nodename.location
3、create +return
4、关系基础:每个关系包含两个节点,节点间的关系有单项关系和双向关系。 创建关系包含,为无属性的节点创建关系,为有属性的节点创建关系,创建无属性的新节点的关系,
创建有属性的新节点关系,检索相关节点详细信息。
创建单个标签的关系, create(nodename1:nodelabel,)-(relationshipName:relationship-label_name)]-(nodeName2:nodeLabel2)
eg.CREATE (node1-name:label1-name)-[(relationship-name:relationship-label-name)]-(node2-name:label2-name)
5、where关键字:where语法: where condition 或者 where condition boolean-operation condition
条件(condition)的语法:property-name comparison-operator value
boolean 操作符: and or not xor(异或)
比较运算符:= (不等于) = =
eg: match (nodename:Nodename) where nodename.name=”king” return nodename
eg: match (nodename:Nodename) where nodename.name=”king” or nodename.location=”xiamen” return nodename
使用where语句创建关系: 对两个现存节点创建一个关系,同时创建两个节点及他们之间的关系,使用where语句对两个现存节点创建关系。
使用where语句创建关系案例: match(node1-name:node-label1-name,node2-name:node1-name) where condition create (node1-name:node1-label)
-[relationship:relationship-name]-(node2-label-name)
6、delete关键字: 删除节点列表: delete nodename-list; eg: match (nodename1:nodeName) delete nodename1;
删除节点及关系: delete node1name,node2name,relationship-name eg: match (node1-name)-[relationshipn]-(node2-name)
7、remove关键字:用于移除节点和关键字属性标签。 remove property-name-list MATCH (book { id:122 }) REMOVE book.price RETURN book
8、set 关键字; 用于添加节点和关键字的属性标签 set property-name-list match (book {id:122}) set book.price=26 return book
9、分类:分类使用order by 关键字,按照降序使用desc 语法为 order by property-name-list [desc] eg:MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno ORDER BY emp.name DESC
order默认为升序的方式
10、union关键字: union关键字是将用两个结果集融合成一个结果集,有两种形式:union和union all. 用于约束的两个结果集必须有相投的结果列和相同结果形式
语法格式:match command1 union match command2 eg:MATCH (cc:CreditCard) RETURN cc.id,cc.number UNION MATCH (dc:DebitCard) RETURN dc.id,dc.number
union all 关键字:两个队列必须有有相同的行和相同的数据类型。 语法格式:match command1 union all match command2.
11、limit 关键字: 用来筛选或者限制检索结果的行数。语法 limit number; eg. match (emp:Employee) return emp limit 3 注:筛选前面的number个结果
skip关键 用来筛选或者限制检索结果的行数 语法 skip number eg. match (emp:Employe ) return emp skip 3 注 筛选后面的number个结果
12、merge 关键字:用于在图中按照给定的模式搜索,如果该模式不存在,将创建一个新的节点或者关系。语法:merge (node-name: node-label-name){
property-name: property-value)
13、null关键字:null 值作为节点或者关系的属性的缺省值或者未定义的值。
14、IN 关键字:给值的集合到定制列表命令。语法:IN[collection-of-values] eg. matche (emp:Employee) where e.id in [] return emp
15、id 属性:id 是库按照节点或者关系创建的顺序自动添加的标识符。
16、直接关系, 在图数据中节点与节点之间的链接是依靠关系链接,这里关系是具有方向的(单项或者双向)
17、String 函数: string函数是为了按照要求处理查询结果。string函数包含 upper lower substring relac关键字。
lower关键字将字符串全部转化为小写字符,substring函数是用来截取子串,replace用来替换字符串的。语法分别为: upper(input-string) lower(input-string) substring(input-string, startIndex,endIndex)
eg. MATCH (e:Employee) RETURN e.id,UPPER(e.name),e.sal,e.deptno MATCH (e:Employee) RETURN e.id,LOWER(e.name),e.sal,e.deptno
MATCH (e:Employee) RETURN e.id,SUBSTRING(e.name,0,2),e.sal,e.deptno
18、aggregation 函数: 在return 关键中提供了Aggregation函数,aggregation 函数主要包含count max min sum avg 关键字。upper关键是,将结果全部转化为大写字符
count 关键字是为了统计有多少个返回值的。count (value) eg. match (e:Employee) RETURN COUNT(*);
max (property-name), 检索返回值中proper-name属性最大值 min(property-name), 检索返回值中proper-name属性最小值
MATCH (e:Employee) RETURN MAX(e.sal),MIN(e.sal)
avg 关键字:AVG(property-name)计算返回值中属性为property-name的平均值, sum 关键字:sum(property-name)计算返回值中属性为property-name的和,
eg. MATCH (e:Employee) RETURN SUM(e.sal),AVG(e.sal)
19、relationship 函数:relationship 函数提供一些处理节点之间的关系的函数。relationship 函数提供了STARTNODE ENDNODE ID TYPE关键字;
startnode (relationship-label-name) relationship-label-name 是节点或者关系的属性名称,返回关系的起始节点。endnode (relationship-label-name) 返回关系的中止节点。
id(relation-name)返回relation-name的id
type(relation-name) 返回关系标签(relation-label-name)
eg. MATCH (a)-[movie:ACTION_MOVIES]-(b) RETURN ENDNODE(movie) startnode(movie)
eg. MATCH (a)-[movie:ACTION_MOVIES]-(b) RETURN ID(movie),TYPE(movie)
20.index: neo4j 支持在节点和关系的属性索引来提高应用程序的性能。主要功能有创建索引和清除索引,
create index: create index on: label-name:property-name eg. CREATE INDEX ON :Customer (name)
drop index:DROP INDEX ON :label_name (property_name) eg. DROP INDEX ON :Customer (name)
21、create unique constraint: 创建约束的目的是为了回避重复的节点 保持数据的完成性规则。
create constraint on(label-name) assert (property-name) is unique eg.CREATE CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE
DROP CONSTRAINT ON (label_name) ASSERT property_name IS UNIQUE eg. DROP CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE