Cypher 心得分享第二部
昨天稍微介紹了 Cypher 最基礎的查詢語法 MATCH
那說到查詢,跟他最有關係的就是篩選
那個或多或少有學過 SQL 的人一定聽過的 WHERE
沒錯,在 Cypher 裡也有一個一模一樣的東西
Label
跟 Property
先來個基本型吧
MATCH (n)
WHERE n.Name = "關聯式資料庫"
RETURN n
MATCH (n)
WHERE n:SQL
RETURN n
Property | Label |
---|---|
當然像是 AND
、OR
、XOR
、NOT
這些常見的布林運算式也是可以用的
Cypher 有提供三種字串判斷的方法
STARTS WITH
ENDS WITH
CONTAINS
MATCH (n)
WHERE n.Name CONTAINS "關聯"
RETURN n
運算元 IN
用來查詢 Property
中是否包含一個或多個
指定內容
MATCH (n)
WHERE n.Name IN ["關聯式資料庫","圖形資料庫"]
RETURN n
當然反過來寫也是可以的
MATCH (n)
WHERE ["關聯式資料庫","圖形資料庫"] IN n.Name
RETURN n
不過這段的意思就會變成 n.Name
必須同時
包含 "關聯式資料庫"、"圖形資料庫" 兩個值
因為一個 Node
的 Property
是動態的
所以如果需要檢查某個 Property
是否存在的話
就可以寫成這樣
MATCH (n)
WHERE n.Name IS NOT NULL
RETURN n
這樣就會篩選出所有有包含 Name
這個 Property
的 Node
反之亦然
MATCH (n)
WHERE n.Name IS NULL
RETURN n
我們先來看看這兩段程式碼
//Case 1
MATCH (n:Test{Name:"Node1"})
RETURN n
//Case 2
MATCH (n:Test)
WHERE n.Name = "Node1"
RETURN n
大家來猜猜這兩段的回傳有什麼不一樣吧
答案是 一樣
,對各方面來說都一樣
Cypher 在設計上提供多樣化的編寫方式
這兩段程式碼對於效能上來說也是一樣的
所以要怎麼寫就看你個人的 Coding Style 了
看著鐵人賽進度一天一天慢慢地追上積稿量
公司的專案也一天一天接近結案日
一個壓力山大,教練我好想完賽阿
希望這個假日可以多積幾篇 _(´ཀ`」 ∠) _
明天 Cypher 語法簡介 Part3 : 該講講怎麼 Create 了吧,是要等多久
期待明日的降臨吧 Ciao!
Neo4j Developer - Filtering Query Results
排版好看的版本同步更新在我的 HackMD