GQL overview

Graph Query Language (GQL) is a language designed to query graph data. This page describes the high level structure of GQL.

Statement and clause

In GQL, a statement refers to a complete unit of execution, and a clause represents a modifier to statements. See the statement list for a complete list.

Working table

A working table refers to the intermediate table representing the input or output of a GQL statement.

A GQL statement receives an incoming working table and produces an outgoing working table.

The first incoming working table is a table with a single row. The last outgoing working table is returned as the query results.

Linear query statement

A linear query statement consists of multiple statements from the statement list. It always ends with a RETURN statement.

Each statement generates intermediate results (the working table) and then passes those results to the next statement. The output of a linear query statement comes from the final RETURN statement.

Examples

GRAPH FinGraph MATCH (p:Person)-[o:Owns]->(a:Account) FILTER p.birthday < '1990-01-10' RETURN p.name /*------+  | name |  +------+  | Dana |  | Lee |  +------*/ 

Combining linear query statements with set operators

You can use a set operator to combine multiple linear query statements into one. For more information, see the syntax for the GQL set operation.

Examples

A set operator between two linear query statements with the same set of output column names and types but with different column orders is supported. For example:

GRAPH FinGraph MATCH (p:Person) RETURN p.name, 1 AS group_id UNION ALL MATCH (p:Person) RETURN 2 AS group_id, p.name /*------+----------+  | name | group_id |  +------+----------+  | Alex | 1 |  | Dana | 1 |  | Lee | 1 |  | Alex | 2 |  | Dana | 2 |  | Lee | 2 |  +------+----------*/ 

Chaining linear query statements with the NEXT statement

You can use the NEXT keyword to chain multiple linear query statements into one.

The final linear query statement must produce non-GQL data types, but linear query statements that proceed it can produce GQL data types, such as nodes and edges.

Examples

The following is an example of a graph query chaining multiple linear query statements using NEXT.

GRAPH FinGraph MATCH (a:Account {is_blocked: TRUE}) RETURN a UNION ALL MATCH (a:Account)<-[:Owns]-(p:Person {id: 2}) RETURN a NEXT MATCH (a:Account)-[t:Transfers]->(oa:Account) WITH DISTINCT oa RETURN oa.nick_name /*----------------+  | nick_name |  +----------------+  | Vacation Fund |  | Vacation Fund |  | Rainy Day Fund |  +----------------*/