iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
0
自我挑戰組

圖形資料庫是什麼,可以吃嗎 - Neo4j系列 第 11

Cypher 語法簡介 Part2 : 學過 SQL 的你,似曾相似的 WHERE

  • 分享至 

  • xImage
  •  

前情提要

Cypher 心得分享第二部

昨天稍微介紹了 Cypher 最基礎的查詢語法 MATCH

那說到查詢,跟他最有關係的就是篩選

那個或多或少有學過 SQL 的人一定聽過的 WHERE

沒錯,在 Cypher 裡也有一個一模一樣的東西

WHERE

LabelProperty

先來個基本型吧

Property

MATCH (n)
WHERE n.Name = "關聯式資料庫"
RETURN n

Label

MATCH (n)
WHERE n:SQL
RETURN n
Property Label

當然像是 ANDORXORNOT 這些常見的布林運算式也是可以用的

字串判斷

Cypher 有提供三種字串判斷的方法

  • STARTS WITH
    • 開頭包含
  • ENDS WITH
    • 結尾包含
  • CONTAINS
    • 字串包含
MATCH (n)
WHERE n.Name CONTAINS "關聯"
RETURN n

IN

運算元 IN 用來查詢 Property 中是否包含一個或多個指定內容

MATCH (n) 
WHERE n.Name IN ["關聯式資料庫","圖形資料庫"] 
RETURN n

當然反過來寫也是可以的

MATCH (n) 
WHERE ["關聯式資料庫","圖形資料庫"] IN n.Name
RETURN n

不過這段的意思就會變成 n.Name 必須同時包含 "關聯式資料庫"、"圖形資料庫" 兩個值

NULL

因為一個 NodeProperty 是動態的

所以如果需要檢查某個 Property 是否存在的話

就可以寫成這樣

MATCH (n)
WHERE n.Name IS NOT NULL
RETURN n

這樣就會篩選出所有有包含 Name 這個 PropertyNode

反之亦然

MATCH (n)
WHERE n.Name IS NULL
RETURN n

MATCH vs. WHERE

我們先來看看這兩段程式碼

//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 Cypher Manual

(書) Neo4j 大事典:圖形資料庫&大數據時代

Neo4j Developer - Filtering Query Results


排版好看的版本同步更新在我的 HackMD


上一篇
Cypher 語法簡介 Part1 : 基礎中的基礎 MATCH & RETURN
下一篇
Cypher 語法簡介 Part3 : 該講講怎麼 Create 了吧,是要等多久
系列文
圖形資料庫是什麼,可以吃嗎 - Neo4j30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言