10.3 Where
- 10.3.1 Основы использования
- 10.3.2 Регулярные выражения
- 10.3.3 Использование образцов в WHERE
- 10.3.4 Коллекции
- 10.3.5 Отсутствующие свойства и значения
WHERE не является предложением по своей сути – скорее, это часть MATCH, OPTIONAL MATCH, START и WITH.
В случае использования WITH и START, WHERE просто фильтрует результаты.
Для MATCH и OPTIONAL MATCH, напротив, WHERE добавляет ограничения к описываемому образцу. Оно не будет рассматриваться как фильтр после завершения сопоставления.
Замечание
В случае нескольких предложений (OPTIONAL) MATCH предикат в WHERE всегда является частью образца в непосредственно предшествующем MATCH. Как на результаты, так и на производительность, может повлиять размещение WHERE не у того предложения MATCH.
Рис. 10.3 Граф
10.3.1 Основы использования
10.3.1.1 Булевы операции
Вы можете использовать традиционные булевы операторы AND и OR, а также булеву функцию NOT. Смотрите разделе 8.7 “Работа с NULL” подробности о том, как это работает с NULL-значениями.
Запрос
MATCH (n) WHERE n.name = 'Peter' XOR (n.age < 30 AND n.name = "Tobias") OR NOT (n.name = "Tobias" OR n.name="Peter") RETURN n;
демонстрирует использование булевых операторов.
Таблица 10.23 Результат
n |
---|
Node[0]{name:"Tobias",age:25} |
Node[1]{name:"Peter",age:34} |
Node[2]{name:"Andres",age:36,belt:"white"} |
10.3.1.2 Фильтр на метке узла
Для фильтрации узлов по метке напишите предикат метки после ключевого слова WHERE следующим образом: WHERE n:foo.
Запрос
MATCH (n) WHERE n:Swedish RETURN n
вернёт узел "Andres".
Таблица 10.24 Результат
n |
---|
Node[2]{name:"Andres",age:36,belt:"white"} |
10.3.1.3 Фильтр на свойстве узла
Для фильтрации по свойству напишите своё предложение после ключевого слова WHERE. Фильтрация по свойствам связи работает точно так же.
Запрос
MATCH (n) WHERE n.age < 30 RETURN n
вернёт узел "Tobias".
Таблица 10.25 Результат
n |
---|
Node[0]{name:"Tobias",age:25} |
10.3.1.4 Существование свойства
Чтобы включить только узлы/связи, которые имеют некоторое свойство, используйте функцию HAS() и просто запишите идентификатор и свойство, которое, как вы предполагаете, они имеют.
Запрос
MATCH (n) WHERE HAS (n.belt) RETURN n
возвращает узел с именем "Andres".
Таблица 10.26 Результат
n |
---|
Node[2]{name:"Andres",age:36,belt:"white"} |