AGE 在CTE表达式中使用Cypher

在使用CTE(公共表达式)时,没有对使用Cypher的限制。

查询:

WITH graph_query as (
    SELECT *
        FROM cypher('graph_name', $$
        MATCH (n)
        RETURN n.name, n.age
    $$) as (name agtype, age agtype)
)
SELECT * FROM graph_query;

结果:

name	age
‘Andres’	36
‘Tobias’	25
‘Peter’	35
3 row(s) returned

在Join表达式中使用Cypher

Cypher查询可以是JOIN子句的一部分。

开发者注意事项 使用CREATE、SET、REMOVE子句的Cypher查询不能在带有JOIN的SQL查询中使用,因为它们会影响Postgres事务系统。一个可能的解决方案是使用CTE来保护查询。有关更多详细信息,请参阅“使用CTE与CREATE、REMOVE和SET”子节。

查询:

SELECT id, 
    graph_query.name = t.name as names_match,
    graph_query.age = t.age as ages_match
FROM schema_name.sql_person AS t
JOIN cypher('graph_name', $$
        MATCH (n:Person)
        RETURN n.name, n.age, id(n)
$$) as graph_query(name agtype, age agtype, id agtype)
ON t.person_id = graph_query.id

结果:

id	names_match	ages_match
1	True	True
2	False	True
3	True	False
3 row(s) returned

SQL表达式中的Cypher

Cypher不能在表达式中使用—查询必须存在于查询的FROM子句中。但是,如果将Cypher查询放置在子查询中,它将像任何SQL样式查询一样工作。

使用Cypher和‘=’

当编写已知返回一列和一行的cypher查询时,可以使用‘=’比较运算符。

查询:

SELECT t.name FROM schema_name.sql_person AS t
where t.name = (
    SELECT a
    FROM cypher('graph_name', $$
    	  MATCH (v)
        RETURN v.name
    $$) as (name varchar(50))
    ORDER BY name
    LIMIT 1);

结果:

name	age
‘Andres’	36
3 row(s) returned

使用Postgres的IN子句

当编写已知返回一列但可能有多行的cypher查询时,可以使用IN运算符。

查询:

SELECT t.name, t.age FROM schema_name.sql_person as t 
where t.name in (
    SELECT *
    FROM cypher('graph_name', $$
        MATCH (v:Person)
        RETURN v.name 
    $$) as (a agtype));

结果:

name	age
‘Andres’	36
‘Tobias’	25
‘Peter’	35
3 row(s) returned

使用Postgres的EXISTS子句

当编写可能返回多个列和行的cypher查询时,可以使用EXISTS运算符。

查询:

SELECT t.name, t.age
FROM schema_name.sql_person as t
WHERE EXISTS (
    SELECT *
    FROM cypher('graph_name', $$
	  MATCH (v:Person)
        RETURN v.name, v.age
    $$) as (name agtype, age agtype)
    WHERE name = t.name AND age = t.age
);

结果:

name	age
‘Andres’	36
‘Tobias’	25
3 row(s) returned

查询多个图

SQL语句可以查询多个图,没有限制。用户可以同时查询多个图。

查询:

SELECT graph_1.name, graph_1.age, graph_2.license_number
FROM cypher('graph_1', $$
    MATCH (v:Person)
    RETURN v.name, v.age
$$) as graph_1(col_1 agtype, col_2 agtype, col_3 agtype)
JOIN cypher('graph_2', $$
    MATCH (v:Doctor)
    RETURN v.name, v.license_number
$$) as graph_2(name agtype, license_number agtype)
ON graph_1.name = graph_2.name

结果:

name	age	license_number
‘Andres’	36	1234567890
3 row(s) returned

  使用公有云服务

一些公有云的提供了免安装的数据库服务,无需自己部署。以MemFireCloud为例

直接连接

每个MemFire Cloud应用内置一个完整的Postgres数据库,你可以使用任何支持Postgres的工具来连接到数据库。你可以在控制台内的数据库设置中获取连接信息:

  1. 来到左侧菜单栏的 设置部分
  2. 点击数据库
  3. 启用数据库直连
  4. 找到应用的连接信息

开启直连

白名单

MemFire Cloud内置白名单功能,开启白名单后,只允许白名单内的IP地址段访问你的数据库。关闭白名单后,访问你数据库的IP地址不受限制,即任何IP地址只要有连接信息都可以与你的数据库进行直连。 在进行白名单配置时,要遵循CIDR规则。MemFire Cloud中白名单功能 默认是关闭的,需用户手动开启。

配置白名单

通过数据库客户端连接数据库,可以执行图操作

CREATE EXTENSION age;
LOAD 'age';
SET search_path = ag_catalog, "$user", public;

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值