The syntax EZOQL in the BNF (Backus Normal Form) is as follows. You can safely skip it if you know enough about the SQL SELECT statement. The syntax is almost same as the SQL statement. Only difference is that classes and variables, instead of database tables and columns, are used.
<query> ::=
"from" <selected_class> "where" <where_clause>
<selected_class> ::=
<class_name> [ ["as"] <class_alias> ]
<where_clause> ::=
["not"] <logical_term> {"or" <logical_term>}
<logical_term> ::=
<logical_factor> {"and" <logical_factor>}
<logical_factor> ::=
( <exp_simple> <comparison_op> <exp_simple> )
| ( [ "not" ] "between" <exp_simple> "and" <exp_simple>)
| ( [ "not" ] "like" match_string )
| ( "is" [ "not" ] "null" )
<exp_simple> ::=
[ "+" | "-" ] term { ( "+" | "-" ) term };
<term> ::=
<factor> { ( "*" | "/" ) <factor> };
<factor> ::=
(<variable> | <constant>)
<comparison_op> ::=
"=" | "<" | ">" | "<>" | "!=" | "^=" | "<=" | ">="
<variable> ::=
[ <class_identifier> "." ] <column_name>
<class_identifier> ::=
<class_name> | <class_alias>
<class_alias> ::=
<identifier>
<class_name> ::=
<identifier>
<identifier> ::=
( "letter" { "letter" | "digit" | "underline" | "dollar" | "sharp" } ) | "quote" { "any character" } "quote"