專為連接性設計的查詢語言 – Cypher

甚麼是Cypher 

Cypher 是為了滿足開發者在處理圖形數據時的需求而生的。它的設計靈感來自於 SQL,目的是提供一種易於閱讀且表達能力強的語言來操作圖形數據。與傳統的 SQL 針對表格數據操作不同,Cypher 是專門為圖形數據設計的,能夠直觀地表示節點、關係及其屬性。

Cypher 的優點

  • 簡潔:Cypher 使用類似於自然語言的語法,因此易於閱讀和編寫。
  • 強大:Cypher 可以用於執行從簡單的查詢到複雜的圖形分析的所有操作。
  • 高效:Cypher 經過優化以實現圖形資料庫的快速查詢。

Cypher 的基本結構

在 Cypher 中,圖形被視為由節點(Nodes)和關係(Relationships)構成的網絡。每個節點和關係都可以擁有多個屬性。Cypher 查詢主要包括以下幾個部分:

  • CREATE: 用於創建圖中的節點和關係。
  • MATCH: 用來尋找匹配特定模式的節點和關係。
  • WHERE: 提供條件來限制 MATCH 或其他操作的結果。
  • RETURN: 指定返回的數據。
  • UPDATE: 更新節點或關係的屬性。
  • DELETE: 用於刪除節點或關係。

與 SQL 的比較

以下是一個客戶提供的實際 SQL 查詢示例,用於了解其組織結構:

SELECT *
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN locations l ON d.location_id = l.location_id
WHERE e.manager_id IS NULL;

以下是等效的 Cypher 查詢:

MATCH (e:Employee)-[:MANAGES*0..]->(m:Employee)
WHERE m.manager_id IS NULL
RETURN e

新增圖形資料的步驟

1. 定義節點與關係

首先,您需要定義圖形中的節點(Nodes)和邊(Edges)或稱關係(Relationships)。節點代表實體,如人、地點、物件等,而邊則代表節點間的關係,如“朋友”、“位於”或“擁有”。

2. 創建模型

在 Neo4j 中,您可以透過 Cypher 語言創建模型。例如,如果您要建立一個表示人和學校的簡單模型,您可能會有如下命令:

CREATE (p:Person {name: "John", age: 25})
CREATE (s:School {name: "Stanford University", location: "California"})

這裡,PersonSchool 是節點的標籤,用於描述節點類型,而花括號內的是節點的屬性。

3. 建立關係

接著,您可以建立節點之間的關係。使用 CREATE 語句,您可以加上一個關係,比如:

MATCH (p:Person {name: "John"}), (s:School {name: "Stanford University"})
CREATE (p)-[:STUDIED_AT]->(s)

這個命令中,MATCH 部分先找到名字為 John 的人和名字為 Stanford University 的學校,然後 CREATE 建立了一個名為 STUDIED_AT 的關係,從人指向學校。

4. 數據加載

如果您已有現成的數據,如 CSV 文件,可以透過 Neo4j 的導入工具或命令行工具來批量導入數據。例如,使用以下 Cypher 命令從 CSV 文件中加載數據:

LOAD CSV WITH HEADERS FROM 'file:///path_to_your_file.csv' AS line
CREATE (:Person {name: line.name, age: toInteger(line.age)})

這樣就可以創建多個節點,每個節點根據 CSV 文件中的一行數據來設定屬性。

5. 驗證與查詢

建立數據後,您可以使用各種查詢來檢視數據是否正確加載,並進行分析。例如,查詢所有學生和他們就讀的學校:

MATCH (p:Person)-[:STUDIED_AT]->(s:School)
RETURN p.name, s.name

6. 數據更新與管理

管理和更新圖形數據庫中的數據是日常操作的一部分。例如,你可以更新一個節點的屬性或添加新的關係:

MATCH (n:Person {name: 'Ann'})
SET n.age = 26

7. 高級過濾技術

Cypher 提供了豐富的過濾條件來精確控制查詢結果。使用 WHERE 子句可以根據具體條件篩選節點或邊。例如,要找出所有2000年後上映的電影,可以使用:

MATCH (movie:Movie)
WHERE movie.releaseDate >= 2000
RETURN movie

這種過濾方式使得 Cypher 查詢在處理複雜條件時更加靈活和強大。

8. 聚合函數的應用

與 SQL 不同,Cypher 的聚合操作不需要指定分組鍵,因為非聚合字段會自動成為分組的依據。這一特性簡化了查詢的編寫。例如,計算每個演員參演的電影數量:

MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)
RETURN actor.name, COUNT(movie)

這裡,COUNT(movie) 是一個聚合函數,用來統計每位演員參演的電影數。

這些基本步驟可幫助您開始使用圖形資料庫並有效地管理圖形數據。隨著熟悉過程,您可以進一步探索更複雜的模型和查詢技術。


17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。