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