5.3 複雑なパス・パターン

複雑なパス・パターンを使用してSQLプロパティ・グラフを問い合せることができます。

循環パス・パターン

頂点およびエッジ・パス・パターンは循環を形成できます。たとえば、次のグラフ・パターンについて考えてみます:

MATCH (a IS person) -[IS friends]-> (a IS person)

前述のグラフ・パターンは単一のパス・パターンを示し、頂点変数aが2回含まれています。したがって、これによって、afriendsエッジを持つpersonにバインドされるように、グラフ内の循環が検索されます。

また、次の点にも注意してください。

  • 頂点変数aのラベルpersonを2回繰り返す必要はありません。結果は、そのラベル式の繰返しの有無にかかわらず同じです。
  • 複数のインラインWHERE句を使用すると、同じパターン変数に条件を追加できます。
  • パス・パターンで同じエッジ変数を2回使用することは、エッジが同じである必要があるというセマンティクスもあるということです。

循環は単一のエッジより長くなる可能性があります。例5-11を参照してください。

複数のパス・パターン

MATCH句は、カンマ区切りのリストで複数のパス・パターンを含めることができます。たとえば、次の例では2つのパス・パターンを示します:

MATCH (a IS person WHERE a.name='John') -[IS student_of]-> (b IS university),
(a IS person WHERE a.name='John') -[IS friends]-> (c IS person)

2つのパス・パターンに共通するグラフ・パターン変数は、パス・パターン間の重複を示します。前述の例では、頂点変数aが共有されています。変数aは、グラフ・パターンの各要素パターンの同じグラフ要素表にバインドする必要があるため、このような繰返しグラフ・パターン変数には暗黙的で自然な内部結合が存在することに注意してください。

2つのパス・パターン間に共有の変数がない場合、結果の出力セットは個別のパス・パターンの出力のクロス積になります。例5-9および例5-10を参照してください。