見出し画像

Neo4j GraphDBブートキャンプ完全版: Case (セクション28/49)

  • Neo4jのCase文には、シンプルな形式とジェネリックな形式があり、条件ロジックを処理するために使用される。

  • シンプルな形式は式を複数の値と比較し、ジェネリックな形式は複数の条件式を表現できる。

  • Case文は値を返すだけでなく、ノードのプロパティを設定することもでき、動的なグラフの更新に役立つ。

はじめに:

このブログ記事では、強力なグラフデータベースであるNeo4jにおけるCase文の世界を深く掘り下げていきます。Case文を使用すると、Cypherクエリ内で条件ロジックを実行できるため、さまざまなシナリオを処理し、特定の条件に基づいてデータを操作できます。Case文のシンプルな形式とジェネリックな形式の両方を探索し、Neo4jクエリでそれらを効果的に活用する方法を学びます。

シンプルな形式:

Neo4jのCase文のシンプルな形式では、式を複数の値と比較できます。特定の条件に基づいて異なる値を割り当てる場合に特に便利です。例を見てみましょう:

MATCH (n:Person)
RETURN n.name, 
CASE n.age
  WHEN null THEN "Empty"
  WHEN 20 THEN "Junior"
  ELSE n.age
END

このクエリでは、ラベル「Person」を持つすべてのノードを一致させ、2つの列を返します:「n.name」とCase文に基づく「n.age」です。Case文は「n.age」の値をチェックし、それに応じて特定の値を割り当てます。「n.age」がnullの場合は「Empty」を返します。「n.age」が20の場合は「Junior」を返します。その他の値の場合は、単に「n.age」の元の値を返します。

WHEN句の順序が重要であることに注意してください。Neo4jは、記述された順序で評価し、最初に一致した条件が適用されます。

ジェネリックな形式:

Neo4jのCase文のジェネリックな形式では、複数の条件式を表現できます。より柔軟性が高く、複雑なシナリオを処理できます。例を見てみましょう:

MATCH (n:Person)
RETURN n.name,
CASE
  WHEN n.age = 20 THEN 1
  WHEN n.age < 20 THEN 0
  WHEN n.age > 20 THEN 2
  ELSE -1
END AS age_weight
ORDER BY age_weight

このクエリでは、ラベル「Person」を持つすべてのノードを一致させ、2つの列を返します:「n.name」とCase文です。Case文は「n.age」に基づいて複数の条件式を評価します。「n.age」が20の場合は1を割り当てます。「n.age」が20より小さい場合は0を割り当てます。「n.age」が20より大きい場合は2を割り当てます。その他の場合は-1を割り当てます。Case文の結果は「age_weight」として別名が付けられます。

ジェネリックな形式をさらに活用して、より複雑な条件を表現できます:

MATCH (n:Person)
RETURN n.name,
CASE
  WHEN n.age > 30 AND n.age < 40 THEN 5
  WHEN n.age < 30 AND n.age > 17 THEN 4
  WHEN n.age > 40 THEN 6
  ELSE 3
END AS age_mark
ORDER BY age_mark DESC

この例では、論理演算子(AND)を使用して複数の条件を組み合わせ、年齢範囲に基づいて特定の値を割り当てています。結果は「age_mark」として別名が付けられ、降順でソートされます。

Case文を使用したプロパティの設定:

Neo4jのCase文は、単に値を返すだけでなく、ノードのプロパティを設定するためにも使用できます。例を見てみましょう:

MATCH (n:Movie)
WITH n,
CASE n.released
  WHEN 2020 THEN 1
  WHEN 2021 THEN 2
  WHEN 2022 THEN 3
  WHEN 2023 THEN 4
  ELSE 0
END AS releaseCode
SET n.releaseCode = releaseCode

このクエリでは、ラベル「Movie」を持つすべてのノードを一致させ、「released」プロパティに基づいてCase文を導入します。リリース年に基づいて、特定のリリースコード(1、2、3、4)を割り当てます。リリース年が指定された条件のいずれにも一致しない場合は、デフォルト値の0が割り当てられます。Case文の結果は「releaseCode」として別名が付けられます。

WITH句を使用して、一致したノード(n)と計算された「releaseCode」を次のクエリに渡します。最後に、SET句を使用して、各映画ノードに「releaseCode」という新しいプロパティを作成し、Case文で計算された「releaseCode」の値を割り当てます。

結論:

Neo4jのCase文は、Cypherクエリ内で条件ロジックを処理する強力な方法を提供します。式を複数の値と比較する必要がある場合でも、複雑な条件式を表現する場合でも、Case文はさまざまなシナリオに対処するための柔軟性を提供します。Case文のシンプルな形式とジェネリックな形式の両方をマスターすることで、Neo4jでより表現力豊かで効率的なクエリを記述できます。

WHEN句の順序を考慮することを忘れないでください。Neo4jは順番に評価します。さらに、Case文は値を返すだけでなく、ノードのプロパティを設定するためにも使用できるため、特定の条件に基づいてグラフを動的に更新できます。

この知識を身につけたら、Neo4jクエリでCase文を自信を持って活用し、複雑なデータ操作や条件ロジックを処理するためにその力を活用できます。ハッピーグラフクエリ!

「超本当にドラゴン」へ

この記事が気に入ったらサポートをしてみませんか?