LoginSignup
0
0

Cypherについて

Cypherは、Neo4jのようなグラフ型データベースにおけるクエリ言語である。基礎文法を書いていく。

ノードの作成

ノードはグラフの基本単位である。ノードを作成するには"CREATE"を使用する。以下は、"Person"というラベルをもったノードを作成する例。

CREATE (p: Person {name: "Alice", age:30})
  • pはノードの変数名
  • Personはノードのラベル
  • {name: "Alice", age:30}はプロパティ

変数名とラベルの違い

  • ラベル (Label): ノードのカテゴリやタイプを示すためのもの。ノードをグループ化し、効率的な検索や操作を可能にする。
  • 変数名 (Variable): クエリ内でノードや関係を参照するための一時的な名前。クエリ内の特定の要素を識別し、操作するために使用。

関係の作成

ノード間の関係はグラフの重要な要素である。(エッジともいう)関係を作成するには、"CREATE"を使用する。以下は、"Alice"と"Bob"という二つのノード間に、"KNOWS"という関係を作成する例である。

CREATE (p1: Person {name: "Alice"})
CREATE (p2: Person {name: "Bob"})
CREATE (p1)-[:KNOWS]->(p2)

ここでは、"ノード(p1)とノード(p2)の間に[:KNOWS]という関係を持っている"ということを示している。

ノードの検索

ノードを検索するには、"MATCH"を使用する。以下は、"Person"ラベルを持つ、"Alice" という名前を持つノードを検索する例。

MATCH (p:Person {name: "Alice"})
RETURN p

関係の検索

関係を検索するには"MATCH"を使用する。以下は、"Alice"が知っている人を検索する例。

MATCH (p1: Person {name: "Alice"})-[:KNOWS]->(p2)
RETURN p2

このクエリは、"Alice"が"KNOWS"という関係を持つすべてのノードを検索し、それらのノードを返している。

  • 注意: MATCH (p1)-[:KNOWS]->(p2) でも動作するが、このクエリは、ラベルを指定せずに、任意のノードp1がKNOWS関係を持つノードp2を返すp1ノードのプロパティに名前Aliceが含まれていることを前提としているが、ラベルに依存しないため、他のラベル(例えば、Person以外のラベル)を持つノードも検索対象になる。

ノードと関係の更新

既存のノードや関係を更新するには、"SET"を使用する。以下は、"Alice"の年齢を更新する例。

MATCH (p:Person { name: "Alice" })
SET p.age = 31

ノードと関係の削除

ノードや関係を削除するには、DELETE文を使用する。以下は、"Alice"のノードとそれに関連するすべての関係を削除する例。

MATCH (p:Person { name: "Alice" })
DETACH DELETE p
  • DETACH DELETEはCypherクエリ言語で使用されるキーワードで、ノードを削除する際にそのノードに関連するすべてのリレーションシップも同時に削除するために使われる。これにより、ノードを削除する前に手動でリレーションシップを削除する必要がなくなる。
  • DELETEのみでノードを削除した場合、例えばノードp1を消した時、p1に関係を持つノードがあった場合、エラーが発生する。p1を削除した場合、p1に関係をもつ関係をまるごと消すために、DETACHを用いる。

その他の基本操作

プロパティの追加

MATCH (p: Person {name: "Alice"})
SET p.city = "San Francisco"

プロパティの削除

MATCH (p: Person {name: "Alice"})
REMOVE p.city
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0