10.2. Необязательное сопоставление

  1. 10.2.1 Введение
  2. 10.2.2 Связь
  3. 10.2.3 Свойства на необязательных элементах
  4. 10.2.4 Необязательные типизированные и именованные связи

10.2.1 Введение

OPTIONAL MATCH сопоставляет образцы вашей графовой базе данных точно так же, как это делает MATCH. Разница состоит в том, что если совпадений не найдено, OPTIONAL MATCH будет использовать NULL-значения для отсутствующих частей образца. OPTIONAL MATCH следует рассматривать как эквивалент Cypher для внешнего соединения в SQL.

Либо весь образец совпадает, либо ничего. Помните, что WHERE является частью описания образца, и предикаты будут учитываться при поиске совпадений, а не после него. Это особенно актуально в случае нескольких предложений (OPTIONAL) MATCH, когда критично поместить WHERE вместе с MATCH, которому он соответствует.

Совет

Для лучшего понимания образцов, используемых в предложении OPTIONAL MATCH, прочитайте раздел 8.5 “Образцы”.

Следующий граф используется для последующих примеров:


Рис. 10.2 Граф

10.2.2 Связи

Если связь необязательная, используйте предложение OPTIONAL MATCH. Оно подобно тому, как работает внешнее соединение в SQL. Если связь имеется, она возвращается. Если – нет, вместо неё возвращается NULL.

Запрос

MATCH (a:Movie { title: 'Wall Street' })
OPTIONAL MATCH (a)-->(x)
RETURN x

возвращает NULL, поскольку узел не имеет исходящих связей.

Таблица 10.20 Результат

x
<null>

10.2.3 Свойства на необязательных элементах

Возвращение свойства из необязательного элемента, который есть NULL, также даст NULL.

Запрос

MATCH (a:Movie { title: 'Wall Street' })
OPTIONAL MATCH (a)-->(x)
RETURN x, x.name

возвращает элемент x (NULL в этом запросе), и NULL в качестве его имени.

Таблица 10.21 Результат

xx.name
<null><null>

10.2.4 Необязательные типизированные и именованные связи

Так же, как и с обычной связью, вы можете решить, какой идентификатор будет на нее указывать, и какой тип связи вам нужен.

Запрос

MATCH (a:Movie { title: 'Wall Street' })
OPTIONAL MATCH (a)-[r:ACTS_IN]->()
RETURN r

возвращает узел, и NULL, поскольку узел не имеет исходящих связей ACTS_IN.

Таблица 10.22 Результат

r
<null>

Предыдущая | Следующая