neo4j--Cypher語法練習(where、return)

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

         返回結果去掉重名。


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章