Cypher語法詳解

一、基本概念

Cypher是一個圖形查詢語言,用於在Neo4j圖形數據庫中進行查詢。它的語法格式類似於SQL,但是它的查詢對象是節點和關係。一個Cypher查詢由多個子句構成,每個子句都以關鍵字開頭。

在Cypher中,節點由圓括號表示,關係用中括號表示,節點和關係都可以具有屬性。

// 查詢id為1的節點及其所有關係和屬性
MATCH(n {id:1}) RETURN n

二、MATCH子句

MATCH子句用於從圖形數據庫中檢索數據。在MATCH後面,可以指定要檢索的節點和關係的模式,以及它們的屬性和標籤。

可以在一個MATCH子句中指定多個模式,它們之間互相連接,形成一個完整的模式鏈。

// 查詢通過產品類型為「手機」連接的所有訂單
MATCH (p:Product {type:'手機'})<-[:CONTAINS]-(o:Order) RETURN o

三、WHERE子句

WHERE子句用於過濾MATCH子句返回的結果。在WHERE子句中可以指定多個過濾條件,它們之間用AND或OR連接。

// 查詢出品時間在2020年之前的所有產品
MATCH (p:Product) WHERE p.produce_date.year<2020 RETURN p

四、RETURN子句

RETURN子句用於返回查詢結果。可以在RETURN後面指定要返回的節點或關係的屬性、標籤、或者一些計算結果。

// 查詢所有年齡大於30歲的用戶的郵箱地址
MATCH (u:User) WHERE u.age>30 RETURN u.email

五、CREATE子句

CREATE子句用於創建節點或關係。可以在CREATE子句中指定節點或關係的標籤、屬性和連接方式。

// 創建一個名為「張三」的用戶節點
CREATE (u:User {name:'張三'})

六、MERGE子句

MERGE子句用於創建或者更新節點或關係。如果數據庫中不存在與MERGE指定的模式相匹配的節點或關係,則創建它們;如果存在,則更新它們的屬性。

// 如果不存在id為1的節點,則創建它;否則更新它的name屬性
MERGE (n {id:1}) SET n.name='張三'

七、DELETE子句

DELETE子句用於刪除節點或關係,如果在刪除節點的同時會刪除與之相關的所有關係。

// 刪除id為1的節點及與之相關的所有關係
MATCH (n {id:1}) DETACH DELETE n

八、ORDER BY子句

ORDER BY子句用於按照指定的屬性或者表達式對查詢結果進行排序。可以指定升序或降序。

// 查詢價格最高的前10個產品
MATCH (p:Product) RETURN p ORDER BY p.price DESC LIMIT 10

九、UNION子句

UNION子句用於對兩個或多個查詢結果進行合併。要求每個查詢結果的列數和列名必須相同。

// 查詢產品類型為「手機」或「電腦」的所有訂單
MATCH (p1:Product {type:'手機'})<-[:CONTAINS]-(o1:Order) RETURN o1 
UNION 
MATCH (p2:Product {type:'電腦'})<-[:CONTAINS]-(o2:Order) RETURN o2

十、WITH子句

WITH子句用於在查詢中創建中間結果。可以在WITH後面指定要返回的列和一些計算結果,然後將中間結果傳遞給下一個子句。

// 按照用戶的購買金額排名查詢前10名用戶
MATCH (u:User)(p:Product) 
WITH u, SUM(p.price) AS totalPrice
RETURN u ORDER BY totalPrice DESC LIMIT 10

十一、CALL子句

CALL子句用於調用Neo4j內置的一些過程或者Java方法。可以在CALL後面指定要調用的函數和參數。

// 執行Jaccard相似度算法
MATCH (p1:Product)-[:CONTAINS]->()<-[:CONTAINS]-(p2:Product) 
WITH p1, p2, COUNT(*) AS intersection
CALL algo.similarity.jaccard.stream(p1, p2, {write:true, topK:10, similarityCutoff:0.01}) 
YIELD item1, item2, similarity
RETURN item1.name, item2.name, intersection, similarity

十二、FOREACH子句

FOREACH子句用於循環遍歷一個給定的列表,對其中的每個元素都執行一系列操作。

// 對訂單中的所有產品計算總價,並添加「total_price」屬性到訂單中
MATCH (o:Order)-[:CONTAINS]->(p:Product) 
WITH o, SUM(p.price) AS totalPrice
FOREACH(ignoreMe IN CASE WHEN o.total_price IS NOT NULL THEN [1] ELSE [] END | 
  SET o.total_price = totalPrice)

原創文章,作者:KGAIC,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/332800.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KGAIC的頭像KGAIC
上一篇 2025-01-27 13:34
下一篇 2025-01-27 13:34

相關推薦

  • Python語法大全解析

    本文旨在全面闡述Python語法,並提供相關代碼示例,幫助讀者更好地理解Python語言。 一、基礎語法 1、Python的注釋方式 # 這是單行注釋 “”” 這是多行注釋,可以注…

    編程 2025-04-29
  • Python中複數的語法

    本文將從多個方面對Python中複數的語法進行詳細的闡述。Python中的複數是指具有實部和虛部的數,其中實部和虛部都是浮點數。它們可以用「實數+虛數j」的形式表示。例如,3 + …

    編程 2025-04-29
  • parent.$.dialog是什麼技術的語法

    parent.$.dialog是一種基於jQuery插件的彈出式對話框技術,它提供了一個方便快捷的方式來創建各種類型和樣式的彈出式對話框。它是對於在網站開發中常見的彈窗、提示框等交…

    編程 2025-04-28
  • 編譯原理語法分析思維導圖

    本文將從以下幾個方面詳細闡述編譯原理語法分析思維導圖: 一、語法分析介紹 1.1 語法分析的定義 語法分析是編譯器中將輸入的字符流轉換成抽象語法樹的一個過程。該過程的目的是確保輸入…

    編程 2025-04-27
  • Python進階語法全面解析

    Python語言作為一種廣泛應用於人工智能、數據分析、雲計算等多個領域的編程語言,擁有廣泛的社區和強大的生態系統。Python提供了基本語法以及常用函數和模塊,用於解決大量常規編程…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分佈式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論