SQL and Cypher

이 절에서는 아래 예제와 같이 SQL 쿼리와 Cypher 쿼리 구문을 함께 사용하는 방법을 설명합니다.

RDB에서 사용하는 SQL 구문을 통해 테이블 및 열 집계, 통계 처리를 수행하고, GDB의 Cypher 구문이 RDB의 조인 연산을 대체함으로써 보다 나은 데이터 쿼리를 지원합니다.

CREATE GRAPH skai;
CREATE VLABEL dev;
CREATE (:dev {name: 'someone', year: 2015});
CREATE (:dev {name: 'somebody', year: 2016});

CREATE TABLE history (year, event)
AS VALUES (1996, 'PostgreSQL'), (2016, 'AgensGraph');

Cypher in SQL

그래프 DB에 저장된 정점이나 간선의 데이터셋을 SQL 구문에서 데이터셋으로 활용하기 위해 FROM 절 안에서 Cypher 구문을 사용할 수 있습니다.

구문 :

SELECT [column_name]
FROM ({table_name|SQLquery|CYPHERquery})
WHERE [column_name operator value];

다음 예제와 같이 사용할 수 있습니다:

SELECT n->>'name' as name 
FROM history, (MATCH (n:dev) RETURN n) as dev 
WHERE history.year > (n->>'year')::int;

결과 :

  name
---------
 someone
(1 row)

SQL in Cypher

Cypher 구문을 통해 그래프 DB의 내용을 쿼리할 때, RDB의 특정 데이터로 검색하기 위해 Match 및 Where 구문을 사용할 수 있습니다. 단, SQL 구문의 결과 데이터셋은 단일 행의 결과를 반환하도록 구성해야 합니다.

구문 :

MATCH [table_name]
WHERE (column_name operator {value|SQLquery|CYPHERquery})
RETURN [column_name];

다음 예제와 같이 사용할 수 있습니다:

MATCH (n:dev)
WHERE n.year < (SELECT year FROM history WHERE event = 'AgensGraph')
RETURN properties(n) AS n;

결과 :

                 n
-----------------------------------
 {"name": "someone", "year": 2015}
(1 row)