Neo4j Cypherマニュアルv4.4 3:句

# 句

:::note
本章は、Cypherクエリ言語の全ての句について説明します。
:::

# 管理

これらは、データベース、スキーマ、およびセキュリティの管理に使用される句で構成されます。詳細については、[データベース管理](https://neo4j.com/docs/cypher-manual/current/databases/)および[アクセス制御](https://neo4j.com/docs/cypher-manual/current/access-control/)を参照してください。

|リンク| 句 | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/databases/)| `CREATE \| DROP \| START \| STOP DATABASE` &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | データベースを作成、削除、起動、または停止します。  |
|[■](https://neo4j.com/docs/cypher-manual/current/indexes-for-search-performance/#administration-indexes-syntax)| `CREATE \| DROP INDEX`  | 特定のラベルとプロパティを持つ全てのノードにインデックスを作成または削除します。  |
|[■](https://neo4j.com/docs/cypher-manual/current/constraints/syntax/)| `CREATE \| DROP CONSTRAINT`  | ノードラベルまたはリレーションシップタイプ、およびプロパティに関連する制約を作成または削除します。  |
|[■](https://neo4j.com/docs/cypher-manual/current/access-control/)| [アクセス制御](https://neo4j.com/docs/cypher-manual/current/access-control/)  | データベース、グラフ、およびサブグラフのアクセス制御のユーザー、ロール、および権限を管理します。 |


# データのインポート
|リンク| 句 | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/load-csv/)| `LOAD CSV` |CSVファイルからデータをインポートするときに使用します。|
|[■](https://neo4j.com/docs/cypher-manual/current/query-tuning/using/#query-using-periodic-commit-hint)| `--- USING PERIODIC COMMIT` &nbsp; &nbsp; |このクエリーヒントは、`LOAD CSV`を使用して大量のデータをインポートする際、メモリー不足エラーを起こさないために使用します。|

# 関数とプロシージャのリスト
|リンク| 句 | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/listing-functions/)| `SHOW FUNCTIONS` |使用可能な関数を一覧表示します。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/listing-procedures/)| `SHOW PROCEDURES` |使用可能な手順を一覧表示します。|

# 複数のグラフ
|リンク| 句 | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/use/)| `USE` |クエリーまたはクエリーパートを実行するグラフを決定します。<br><font color=#4299e1>**Fabric**</font>|

# 句の計画
結果セットで戻す式を定義する句で構成されます。戻された式は全て`AS`を使用して別名にすることができます。
|リンク| 句 | 説明 |
|---|---|---|
|[■]()| `RETURN ... [AS]` |クエリー結果セットに含めるものを定義します。|
|[■]()| `WITH ... [AS]` ||
|[■]()| `UNWIND ... [AS]` |リストを一連の行に展開します。|

クエリパーツをチェーン接続し、あるパーツの結果を次のパーツの開始点または基準として使用できるようにパイプ処理します。

# 句の読み取り
データベースからデータを読み込む句で構成されます。
Cypherクエリ内のデータフローは、キーと値のペア(クエリ内の変数とデータベースから派生した値との間の可能なバインディングのセット)を持つマップの順序なしシーケンスです。このセットは、クエリの後続部分によって洗練され、拡張されます。
| 句 | 説明 |
|---|---|
| `MATCH` |データベースで検索するパターンを指定します。|
| `OPTIONAL MATCH` |データベース内で検索するパターンを指定し、パターンの欠落部分には`nulls`を使用します。|

<details><summary>MATCHの詳細</summary>

## MATCHの詳細

:::note
`MATCH`句は、記述されたパターンを検索するために使用されます。
:::

### はじめに
Neo4jがデータベース内で検索するパターンを`MATCH`句を使用して指定します。これは、データを現在のバインディングセットに取り込むための主要な方法です。[Patterns](https://neo4j.com/docs/cypher-manual/current/syntax/patterns/)でのパターン自体の仕様については、さらに読む価値があります。

`MATCH`は多くの場合、`MATCH`パターンに制約または述語を追加してより具体的にする`WHERE`部を伴ないます。述語はパターン記述の一部であり、マッチングが行われた後にのみ適用されるフィルタと考えるべきではありません。__つまり、`WHERE`は常に、それが属する`MATCH`句と一緒に配置する必要があります。__

`MATCH`は、クエリの最初に発生することもあれば、後の方で、もしかすると`WITH`の後に発生することもあります。もし`MATCH`が最初の句なら、まだ何もバインドされていません。Neo4jは、句と`WHERE`部で指定された関連する述語に一致する結果を見つけるための検索を設計します。これには、データベースのスキャン、特定のラベルを持つノードの検索、またはパターンマッチングの開始点を見つけるためのインデックスの検索が含まれます。この検索で見つかったノードとリレーションシップは、__バインドされたパターン要素__ として使用でき、パスのパターンマッチングに使用できます。また、Neo4jが既知の要素を使用し、そこからさらに未知の要素を見つけるために、その他の`MATCH`句でも使用できます。

Cypherは宣言型であるため、通常、クエリ自体は検索を実行するために使用するアルゴリズムを指定しません。Neo4jは、開始ノードを見つけてパターンをマッチングするための最善のアプローチを自動的に見つけ出します。`WHERE`部の述語は、パターンマッチングの前、パターンマッチング中、またはマッチング後に評価されます。ただし、クエリコンパイラの決定に影響を与える場合もあります。インデックスの詳細については、[検索性能のためのインデックス](https://neo4j.com/docs/cypher-manual/current/indexes-for-search-performance/)のindexを参照してください。ヒントを指定してNeo4jに特定の方法でクエリを解決させる方法については、[PlannerヒントとUSINGキーワード](https://neo4j.com/docs/cypher-manual/current/query-tuning/using/)を参照してください。

:::note
`MATCH`句で使用されるパターンについてさらに理解するには、[パターン](https://neo4j.com/docs/cypher-manual/current/syntax/patterns/)を参照してください。
:::
次の例では、次のグラフを使用しています。
![](https://kroki.io/graphviz/svg/eNq1kk1rwkAQhu_-isEePFXURKEUC6lasVQrKvRgpKzZqVlcZ2UTbYv637tRCcYPcig5hc0w8z48M1zMNFv68AYbIMURxoHPlljX6CnNIQh_pXmoFXHkk8ccQK8EY_MBkGyKEuqQ3_RRB4q2xBZo3m6h4TMtBcLQRyS34Mpd3nRMDs33T9CrHkd4SiodjbiroGVbtfz-75ei8HoljnQao1bzs9NzSSt5CH1ecXhRP1FcnFZORe0yHQq6Rlrek9YyIHWKr0XoMq9DqAl_z4iz8tMwO7kQVEkXJDyfmVpTrWaSBUlHlcxo2-b4FEEb53N1RpzVWvoaA8GRQnCIa_yOjmLpo-aJfCvV2LsUa9QwDBVhUpd1Q5eND6x0lf20Eic2O4NWhO9SPNlOpRqoKQxQmJNLMtk3fP6fqXrB1FVrgdtQhEfjH0xK40kjhkmoWmrryEdwFqiFxwjizZ1Mye3-APj2UWk=)

### 基本的なノード検索
#### すべてのノードを取得する
1つのノードでラベルなしのパターンを指定するだけで、グラフ内のすべてのノードが戻されます。

__クエリ__
```Cypher:Cypher
MATCH (n)
RETURN n
```
データベース内のすべてのノードを戻します。

</details>

<details><summary>OPTIONAL MATCHの詳細</summary>


```rb
puts 'Hello, World'
```
</details>

# Reading hints
これらの句は、クエリをチューニングするときにプランナのヒントを指定するために使用されます。これらの使い方(およびクエリのチューニング全般)の詳細については、[PlannerのヒントとUSINGキーワード](https://neo4j.com/docs/cypher-manual/current/query-tuning/using/)を参照してください。
|リンク| Hint | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/query-tuning/using/#query-using-index-hint)| `USING INDEX` |プランナがどのインデックスを開始点にすべきかを指定するために使用されます。|
|[■](https://neo4j.com/docs/cypher-manual/current/query-tuning/using/#query-using-index-hint)| `USING INDEX SEEK` |プランナに対し、この句にインデックスシークを使用するように指示します。|
|[■](https://neo4j.com/docs/cypher-manual/current/query-tuning/using/#query-using-scan-hint)| `USING SCAN` |プランナに対して、インデックスを使用する代わりにラベルスキャン(その後にフィルタリング操作)の実行を強制するために使用されます。|
|[■](https://neo4j.com/docs/cypher-manual/current/query-tuning/using/#query-using-join-hint)| `USING JOIN` |指定したポイントで結合操作を実行するために使用されます。|

# 下位句の読み取り
読み取り句の一部として動作しなければならない下位句を構成します。

|リンク| 下位句 | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/where/)| `WHERE` |`MATCH`句または`OPTIONAL MATCH`句のパターンに制約を追加したり、`WITH`句の結果をフィルタします。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/where/#existential-subqueries)| `WHERE EXISTS { ... }` |`MATCH`、`OPTIONAL MATCH`、または`WITH`句の結果をフィルタリングするために使用される実存的なサブクエリです。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/order-by/)| `ORDER BY [ASC[ENDING] \| DESC[ENDING]]` |`RETURN`または`WITH`の後のサブ句であり、出力を昇順(デフォルト)または降順でソートすることを指定します。|
[■](https://neo4j.com/docs/cypher-manual/current/clauses/skip/)| `SKIP` |出力に行を含めるときに、開始行を定義します。|
[■](https://neo4j.com/docs/cypher-manual/current/clauses/limit/)| `LIMIT` |出力の行数を制限します。|

# 句の読み取り/書き込み
データベースからのデータの読み取りとデータベースへのデータの書き込みの両方を行う句で構成されます。
|リンク| 句 | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/merge/)| `MERGE` |グラフにパターンが存在することを確認します。パターンはすでに存在するか、作成されることになります。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/merge/#query-merge-on-create-on-match)| `--- ON CREATE` |`MERGE`と一緒に使用して、パターンが作成される場合に取るべきアクションを指定します。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/merge/#query-merge-on-create-on-match)| `--- ON MATCH` |`MERGE`と一緒に使用して、パターンが既に存在する場合に取るべきアクションを指定します。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/call/)| `CALL ... [YIELD ... ]` |データベースにデプロイされたプロシージャを起動し、結果を返します。|

# セット操作
|リンク| 句 | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/union/)| `UNION` |複数のクエリーの結果を1つの結果セットに結合します。重複は削除されます。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/union/)| `UNION ALL` |複数のクエリーの結果を1つの結果セットに結合します。重複は保持されます。|


# サブクエリ句
|リンク| 句 | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/call-subquery/)| `CALL { ... }` |サブクエリを評価します。通常、結合後の処理または集計に使用されます。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/call-subquery/#subquery-call-in-transactions)| `CALL { ... } IN TRANSACTIONS` |サブクエリを個別のトランザクションで評価します。通常、大量のデータを修正またはインポートする場合に使用されます。|

# トランザクションコマンド
|リンク| 句 | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/transaction-clauses/#query-listing-transactions)| `SHOW TRANSACTIONS` |使用可能なトランザクションをリストします。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/transaction-clauses/#query-terminate-transactions)| `TERMINATE TRANSACTIONS` |トランザクションをIDで終了します。|

# 書き込み句
データベースにデータを書き込む句で構成されます。
|リンク| 句 | 説明 |
|---|---|---|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/create/)| `CREATE` |ノードとリレーションシップを作成します。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/delete/)| `DELETE` |ノード、リレーションシップまたはパスを削除します。削除するノードは、関連する全てのリレーションシップも明示的に削除する必要があります。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/delete/)| `DETACH DELETE` |1つまたは複数のノードを削除します。関連する全てのリレーションシップが自動的に削除されます。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/set/)| `SET` |ノードのラベルおよびノードとリレーションシップのプロパティを更新します。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/remove/)| `REMOVE` |ノードとリレーションシップからプロパティとラベルを削除します。|
|[■](https://neo4j.com/docs/cypher-manual/current/clauses/foreach/)| `FOREACH` |パスのコンポーネントであるか、集約の結果であるかにかかわらず、リスト内のデータを更新します。|