当前位置: 代码迷 >> 综合 >> neo4j--Cypher语法练习(where、return)
  详细解决方案

neo4j--Cypher语法练习(where、return)

热度:47   发布时间:2023-11-17 22:15:12.0

1.3 WHERE

WHERE在MATCH或者OPTINAL MATCH语句中添加约束,或者与WITH一起使用来过滤结果。

1.3.1 基本使用

(1)布尔运算

             返回发行日期介于1990~2000年的电影名称。

               MATCH (nineties:Movie)

               WHERE nineties.released > 1990 AND nineties.released < 2000

               RETURN nineties.title

             

(2)节点标签的过滤

         可以在WHERE中类似使用WHERE n:foo写入标签断言来过滤节点。

            将返回’Movie节点。

MATCH (n)

WHERE n:Movie

RETURN n

(3)节点属性的过滤

      返回released > 1990的"Movie"节点。

MATCH (n)

WHERE n.released > 1990

RETURN n

(4)关系属性的过滤

        返回参演过1990年后发布的电影的演员。

MATCH (n)-[:ACTED_IN]->(m)

WHERE m.released > 1990

RETURN n

     (5)属性存在性检查

      返回拥有title属性的节点 

MATCH (n)

WHERE exists(n.title)

RETURN n

1.3.2 字符串匹配

(1)匹配字符串的开始

       STARTS WITH用于以大小写敏感的方式匹配字符串的开始。

      返回名字以"Tom"开始的节点。

MATCH (n)

WHERE n.name STARTS WITH 'Tom'

RETURN n

 

(2)匹配字符串的结尾

        ENDS WITH用于以大小写敏感的方式匹配字符串的结尾。

        返回了姓名以'Hanks'结尾的人。

MATCH (n)

WHERE n.name ENDS WITH 'Hanks'

RETURN n

(3)字符串包含

       CONTAINS用于检查字符串中是否包含某个字符串,它是大小写敏感的,且不关心匹配部分在字符串中的位置。

        返回了姓名里包含'bin'的人。

MATCH (n)

WHERE n.name CONTAINS 'bin'

RETURN n

 (4) 字符串反向匹配

       使用NOT关键词可以返回不满足给定字符串匹配要求的结果。

       返回了姓名不以"s"结尾的人。

MATCH (n)

WHERE NOT n.name ENDS WITH 's'

RETURN n

1.3.3 正则表达式

Cypher支持正则表达式过滤。正则表达式的语法继承来自Java正则表达式。

(1) 可以使用=~ 'regexp'来进行正则表达式模糊匹配。

MATCH (n)

WHERE n.name =~ 'Tom.*'

RETURN n

(2)正则表达式的非大小写敏感

      在正则表达式前面加入(?i)之后,整个正则表达式将变成非大小写敏感。

MATCH (n)

WHERE n.name =~ '(?i)TOM.*'

RETURN n

     返回了姓名以Tom开头的人。

1.3.4 在WHERE中使用路径模式

 (1) 模式过滤    

     返回Kevin Bacon参演过的电影。

MATCH (n { name:'Kevin Bacon'}),(m)

WHERE (n)-[:ACTED_IN]-(m)

RETURN n,m

相当于:

match (n{name:'Kevin Bacon'})-[r:ACTED_IN]-(m)

return n, m

(2) 模式中的NOT过滤

      NOT功能可用于排除某个模式。

      返回了Kevin Bacon没有参演过的电影。

MATCH (n { name:'Kevin Bacon'}),(m:Movie)

WHERE NOT (n)-[:ACTED_IN]-(m)

RETURN m

(3)模式中的属性过滤

      可以在模式中添加属性来过滤结果。

      返回参演Apollo 13电影的所有演员。 

MATCH (n)

WHERE (n)-[: ACTED_IN]-({ title: 'Apollo 13' })

RETURN n

相当于:

match (n)-[:ACTED_IN]-({title:'Apollo 13'})

return n

  (4)关系类型过滤

         可以在MATCH模式中添加关系类型,但有时候希望在类型过滤上具有丰富的功能。这时,可以将类型与其他进行比较。例如,下面的例子将关系类型与一个正在表达式进行比较。

      返回所有导演。

MATCH (n)-[r]->()

WHERE type(r)=~ 'DIRE.*'

RETURN n

1.3.5 列表

(1)IN运算符

        检查列表中是否存在某个元素,可以使用IN运算符。

MATCH (a)

WHERE a.name IN ['Keanu Reeves', 'Lana Wachowski','Hugo Weaving']

RETURN a

       返回三个人的节点。

1.3.6 不存在的属性和值

      (1) 属性不存在,对它的判断默认返回false。对于不存在的属性值就当作null,在下面例子中,对于没有name属性的节点的比较将返回false。

MATCH (n)

WHERE n.name = 'Keanu Reeves'

RETURN n

      返回Keanu Reeves节点 

  (2)属性不存在默认为true的情况

        如果要比较的属性存在,则可以与期望的值进行比较。如果不存在(IS NULL),默认值为true。如:

MATCH (n)

WHERE n.name = 'Keanu Reeves' OR n.name IS NULL

RETURN n

ORDER BY n.name

         返回Keanu Reeves节点和所有电影节点

 (3)空值过滤

      有时候需要测试某个值或变量是否为null。在Cypher中与SQL类似,可以使用IS NULL。相反,“不为空”使用IS NOT NULL,尽管NOT (IS NULL x)也可以。

MATCH (m)

WHERE m.title IS NULL

RETURN m

         返回人物节点。

1.3.7使用范围

(1)简单范围

检查某个元素是否在指定的范围,可以使用不等运算符<,>=和>。

MATCH (a)

WHERE a. released >= 1990

RETURN a

(2)范围的组合

多个不等式可以组合构成一个范围。

MATCH (nineties:Movie)

WHERE nineties.released > 1990 AND nineties.released < 2000

RETURN nineties.title

也可以写成:

MATCH (nineties:Movie)

WHERE 1990 < nineties.released  < 2000

RETURN nineties.title

1.4 RETURN

RETURN语句定义了查询结果集中返回的内容。

1.4.1 返回节点

MATCH (n { name: 'Steve Zahn' })

RETURN n

1.4.2 返回关系

MATCH (n { name: 'Steve Zahn' })-[r:KNOWS]->(c)

RETURN r

1.4.3 返回属性

MATCH (n { name: 'Steve Zahn' })

RETURN n.name

1.4.4 返回所有元素

MATCH p =(a { name: 'Steve Zahn' })-[r]->(b)

RETURN *

1.4.5 变量中的特殊字符

     如果想使用空格等特殊字符,可以用反引号`将其括起来。如下所示:

MATCH (`This isn't a common variable`)

WHERE `This isn't a common variable`.name = 'Steve Zahn'

RETURN `This isn't a common variable`.happy

 1.4.6 列别名

        如果希望列名不同于表达式中使用的名字,可以使用AS<new name>对其重命名。

MATCH (a { name: 'Steve Zahn' })

RETURN a.born AS bornYear

1.4.7 可选属性

      如果某个属性可能存在,也可能不存在。这时,依然可以正常地去查询,对于不存在的属性,Cypher返回null。

MATCH (n)

RETURN n.title

     

本例中有title属性的节点返回了具体的title,而没有这个属性的节点则返回null。

1.4.8 其他表达式

   任何表达式都可以作为返回项。如字面值,断言,属性,函数和任何其他表达式。

MATCH (a { name: 'Steve Zahn' })

RETURN a.born > 1960, "I'm a literal",(a)-->()

     本例中返回了断言,字符串和带模式表达参数的函数调用。

1.4.9 唯一性结果

        DISTINCT用于仅仅 获取结果集中所依赖列的唯一行。

MATCH (a)

RETURN DISTINCT a.name

         返回结果去掉重名。


 

 

  相关解决方案