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文を自信を持って活用し、複雑なデータ操作や条件ロジックを処理するためにその力を活用できます。ハッピーグラフクエリ!
この記事が気に入ったらサポートをしてみませんか?