WHERE 语法

WHERE 子句可以为查询返回的数据指定搜索条件。WHERE 子句语法如下:

  1. WHERE <expression> [ AND | OR <expression> ...])

目前,WHERE 语句适用于 GOLOOKUP 语句。注意部分 WHERE 过滤条件尚未在 LOOKUP 语句中支持。详情参考 LOOKUP 文档

通常,筛选条件是关于点、边的表达式的逻辑组合。

作为语法,逻辑与可用 AND&& 表示,同理,逻辑或可用 OR|| 表示。

示例

  1. -- follow degree 属性大于 90
  2. nebula> GO FROM 100 OVER follow WHERE follow.degree > 90;
  3. -- 返回以下值:
  4. ===============
  5. | follow._dst |
  6. ===============
  7. | 101 |
  8. ---------------
  9. -- 找到与起点 player 104 age 值相等的点。
  10. nebula> GO FROM 104 OVER follow WHERE $^.player.age == $$.player.age;
  11. -- 返回以下值:
  12. ===============
  13. | follow._dst |
  14. ===============
  15. | 103 |
  16. ---------------
  17. -- 多种逻辑组合。
  18. nebula> GO FROM 100 OVER follow WHERE follow.degree > 90 OR $$.player.age != 33 AND $$.player.name != "Tony Parker";
  19. -- 返回以下值:
  20. ===============
  21. | follow._dst |
  22. ===============
  23. | 101 |
  24. ---------------
  25. | 106 |
  26. ---------------
  27. --下面 WHERE 语句中的条件总是为 TRUE
  28. nebula> GO FROM 101 OVER follow WHERE 1 == 1 OR TRUE;
  29. -- 返回以下值:
  30. ===============
  31. | follow._dst |
  32. ===============
  33. | 100 |
  34. ---------------
  35. | 102 |
  36. ---------------

使用 WHERE 对边 rank 筛选

WHERE 子句支持对边 rank 进行筛选。例如:

  1. nebula> CREATE SPACE test;
  2. nebula> USE test;
  3. nebula> CREATE EDGE e1(p1 int);
  4. nebula> CREATE TAG person(p1 int);
  5. nebula> INSERT VERTEX person(p1) VALUES 1:(1);
  6. nebula> INSERT VERTEX person(p1) VALUES 2:(2);
  7. nebula> INSERT EDGE e1(p1) VALUES 1->2@0:(10);
  8. nebula> INSERT EDGE e1(p1) VALUES 1->2@1:(11);
  9. nebula> INSERT EDGE e1(p1) VALUES 1->2@2:(12);
  10. nebula> INSERT EDGE e1(p1) VALUES 1->2@3:(13);
  11. nebula> INSERT EDGE e1(p1) VALUES 1->2@4:(14);
  12. nebula> INSERT EDGE e1(p1) VALUES 1->2@5:(15);
  13. nebula> INSERT EDGE e1(p1) VALUES 1->2@6:(16);
  14. nebula> GO FROM 1 OVER e1 WHERE e1._rank>2 YIELD e1._src, e1._dst, e1._rank AS Rank, e1.p1 | ORDER BY Rank DESC;
  15. ====================================
  16. | e1._src | e1._dst | Rank | e1.p1 |
  17. ====================================
  18. | 1 | 2 | 6 | 16 |
  19. ------------------------------------
  20. | 1 | 2 | 5 | 15 |
  21. ------------------------------------
  22. | 1 | 2 | 4 | 14 |
  23. ------------------------------------
  24. | 1 | 2 | 3 | 13 |
  25. ------------------------------------