Neo4j Cypherクエリ
Cypherのキーワード
多くのプログラミング言語と同様に、Cypherにはクエリ内の特定の処理に使う予約語がある。Neo4jではデータの作成、読み取り、更新、削除が必要であり、キーワードはこれらの処理を実行するために使われる。ここでは一般的な2つのキーワードを詳しく取り上げる。その他は後続のガイドで説明する。
MATCH
CypherのMATCHキーワードは、データベースから既存のノード、リレーションシップ、ラベル、プロパティ、パターンを検索する。SQLに慣れている場合、MATCHはSQLのSELECTとよく似た動作をすると考えられる。
MATCHを使用すると、すべてのノードラベルの検索、特定ノードの取得、特定のリレーションシップを持つノードの検索、ノードとリレーションシップのパターン検索などを実行できる。
RETURN
CypherのRETURNキーワードは、クエリが返す値や結果を指定する。ノード、リレーションシップ、それらのプロパティ、パターンを返すよう指定できる。書き込みだけを行う処理では不要だが、データの読み取りには必要である。
RETURNはノード変数やリレーションシップ変数を使うときに重要になる。ノード、リレーションシップ、プロパティ、パターンを取得するには、MATCH句で対象データに変数を割り当てる。
Cypherの例
次の例ではMATCHとRETURNを使用する。それぞれ目的を示した後、Neo4j Browserで実行できるクエリを掲載する。
-
例1:
Personグラフからラベル付きノードを検索する。Personノードを返すには、ノードにpなどの変数を割り当てる。MATCH (p:Person) RETURN p LIMIT 1 -
例2:
Personグラフから名前がTom Hanksのノードを検索する。後から同じ名前で参照すれば、変数名は自由に指定できる。MATCH (tom:Person {name: 'Tom Hanks'}) RETURN tom -
例3:Tom Hanksが監督した
Movieを検索する。MATCH (:Person {name: 'Tom Hanks'})-[:DIRECTED]->(movie:Movie) RETURN movie -
例4:Tom Hanksが監督した映画を検索し、今回はタイトルだけを返す。
MATCH (:Person {name: 'Tom Hanks'})-[:DIRECTED]->(movie:Movie) RETURN movie.title
戻り値に別名を付ける
すべてのプロパティ名がmovie.titleのように単純とは限らない。長い名前、複数語の説明、開発者向けの用語、省略形などにより、読みにくい名前になることがある。特にレポートやユーザー向け画面に表示する場合、このような名前は理解しづらい。
// 分かりにくいプロパティ名
MATCH (tom:Person {name:'Tom Hanks'})-[rel:DIRECTED]-(movie:Movie)
RETURN tom.name, tom.born, movie.title, movie.released
SQLと同様に、ASキーワードで分かりやすい別名を指定し、戻り値のフィールド名を変更できる。次の例では、映画情報を読みやすい名前で返す。
// 別名を使った読みやすい出力
MATCH (tom:Person {name:'Tom Hanks'})-[rel:DIRECTED]-(movie:Movie)
RETURN tom.name AS name, tom.born AS `Year Born`, movie.title AS title, movie.released AS `Year Released`
movie.released AS `Year Released`のように、空白を含む戻り値の別名はバッククォート(`)で囲む。空白を含まない別名ではバッククォートは不要である。