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 |
 +----------------*/