Below is the HQL full sintax, based on the latest Hibernate version, and which is being implemented in NHibernate. However, some statements or expressions might be not yet valid for NHibernate.
| <Query> | ::= | <SelectStatement> | 
| | | <DeleteStatement> | |
| | | <UpdateStatement> | |
| | | <InsertStatement> | 
| <DeleteStatement> | ::= | DELETE <AliasedEntityName> <WhereClause> | 
| | | DELETE FROM <AliasedEntityName> <WhereClause> | 
| <UpdateStatement> | ::= | UPDATE <AliasedEntityName> SET <AssignList> <WhereClause> | 
| | | UPDATE VERSIONED <AliasedEntityName> SET <AssignList> <WhereClause> | |
| | | UPDATE FROM <AliasedEntityName> SET <AssignList> <WhereClause> | |
| | | UPDATE VERSIONED FROM <AliasedEntityName> SET <AssignList> <WhereClause> | 
| <AssignList> | ::= | <EntityName> '=' <Expression> ',' <AssignList> | 
| | | <EntityName> '=' <Expression> | 
| <InsertStatement> | ::= | INSERT INTO <EntityName> '(' <EntityNameList> ')' <SelectStatement> | 
| <SelectStatement> | ::= | <SelectClause> <FromClause> | 
| | | <FromClause> | 
| <SelectClause> | ::= | SELECT <Restriction> <AliasedExpressionList> | 
| | | SELECT NEW <EntityName> '(' <ExpressionList> ')' | 
| <FromClause> | ::= | FROM <AliasedEntityNameList> <JoinClauseChain> <WhereClause> <GroupByClause> <HavingClause> <OrderByClause> | 
| <JoinClauseChain> | ::= | <JoinClause> <JoinClauseChain> | 
| | | <JoinClause> ',' <AliasedEntityNameList> <JoinClauseChain> | |
| | | 
| <JoinClause> | ::= | <JoinDefinition> <WithClause> | 
| <JoinDefinition> | ::= | LEFT JOIN <AliasedEntityName> | 
| | | RIGHT JOIN <AliasedEntityName> | |
| | | LEFT OUTER JOIN <AliasedEntityName> | |
| | | RIGHT OUTER JOIN <AliasedEntityName> | |
| | | FULL JOIN <AliasedEntityName> | |
| | | INNER JOIN <AliasedEntityName> | |
| | | LEFT JOIN FETCH <AliasedEntityName> | |
| | | LEFT OUTER JOIN FETCH <AliasedEntityName> | |
| | | INNER JOIN FETCH <AliasedEntityName> | |
| | | JOIN <AliasedEntityName> | |
| | | JOIN FETCH <AliasedEntityName> | 
| <WithClause> | ::= | WITH <Expression> | 
| | | 
| <WhereClause> | ::= | WHERE <Expression> | 
| | | 
| <GroupByClause> | ::= | 'GROUP BY' <ExpressionList> | 
| | | 
| <HavingClause> | ::= | HAVING <Expression> | 
| | | 
| <OrderByClause> | ::= | 'ORDER BY' <OrderList> | 
| | | 
| <OrderList> | ::= | <OrderItem> ',' <OrderList> | 
| | | <OrderItem> | 
| <OrderItem> | ::= | <Expression> <OrderType> | 
| <OrderType> | ::= | ASC | 
| | | DESC | |
| | | ASCENDING | |
| | | DESCENDING | |
| | | 
| <Restriction> | ::= | ALL | 
| | | DISTINCT | |
| | | 
| <AggregateExpression> | ::= | COUNT '(' '*' ')' | 
| | | COUNT '(' <Restriction> <EntityName> ')' | |
| | | COUNT '(' <Restriction> <CollectionExpression> ')' | |
| | | AVG '(' <MathAddExpression> ')' | |
| | | MIN '(' <MathAddExpression> ')' | |
| | | MAX '(' <MathAddExpression> ')' | 
| <FunctionExpression> | ::= | Identifier '(' ')' | 
| | | Identifier '(' <ExpressionList> ')' | |
| | | CAST '(' <Expression> AS Identifier ')' | |
| | | <TrimFunctionExpression> | |
| | | <ExtractFunctionExpression> | |
| | | YEAR '(' <Expression> ')' | |
| | | MONTH '(' <Expression> ')' | |
| | | DAY '(' <Expression> ')' | |
| | | HOUR '(' <Expression> ')' | |
| | | MINUTE '(' <Expression> ')' | |
| | | SECOND '(' <Expression> ')' | 
| <TrimFunctionExpression> | ::= | TRIM '(' <StringValueExpression> ')' | 
| | | TRIM '(' <TrimOperands> <StringValueExpression> ')' | 
| <TrimOperands> | ::= | <StringValueExpression> FROM | 
| | | <TrimSpecification> <StringValueExpression> FROM | |
| | | <TrimSpecification> FROM | |
| | | FROM | 
| <TrimSpecification> | ::= | LEADING | 
| | | TRAILING | |
| | | BOTH | 
| <ExtractFunctionExpression> | ::= | EXTRACT '(' <ExtractField> FROM <Expression> ')' | 
| <ExtractField> | ::= | YEAR | 
| | | MONTH | |
| | | DAY | |
| | | HOUR | |
| | | MINUTE | |
| | | SECOND | |
| | | 'TIMEZONE_HOUR' | |
| | | 'TIMEZONE_MINUTE' | 
| <CollectionExpression> | ::= | <ElementsExpression> | 
| | | INDICES '(' Path ')' | 
| <ElementsExpression> | ::= | ELEMENTS '(' Path ')' | 
| <EntityName> | ::= | Identifier | 
| | | Path | 
| <EntityNameList> | ::= | <EntityName> ',' <EntityNameList> | 
| | | <EntityName> | 
| <AliasedEntityName> | ::= | <EntityName> Identifier | 
| | | <EntityName> AS Identifier | |
| | | Identifier IN CLASS <EntityName> | |
| | | Identifier IN <ElementsExpression> | |
| | | <EntityName> | 
| <AliasedEntityNameList> | ::= | <AliasedEntityName> ',' <AliasedEntityNameList> | 
| | | <AliasedEntityName> | 
| <AliasedExpression> | ::= | <Expression> AS Identifier | 
| | | <Expression> | 
| <AliasedExpressionList> | ::= | <AliasedExpression> ',' <AliasedExpressionList> | 
| | | <AliasedExpression> | 
| <Expression> | ::= | <OrExpression> | 
| | | <AndExpression> | 
| <OrExpression> | ::= | <AndExpression> OR <Expression> | 
| <AndExpression> | ::= | <NotExpression> AND <AndExpression> | 
| | | <NotExpression> | 
| <NotExpression> | ::= | NOT <PredicateExpression> | 
| | | <PredicateExpression> | 
| <QuantifiedExpression> | ::= | SOME Path | 
| | | ALL Path | |
| | | ANY Path | |
| | | SOME <CollectionExpression> | |
| | | ALL <CollectionExpression> | |
| | | ANY <CollectionExpression> | |
| | | SOME '(' <SelectStatement> ')' | |
| | | ALL '(' <SelectStatement> ')' | |
| | | ANY '(' <SelectStatement> ')' | 
| <LikeEscape> | ::= | ESCAPE StringLiteral | 
| | | 
| <ExistsPredicate> | ::= | EXISTS Path | 
| | | EXISTS <CollectionExpression> | |
| | | EXISTS '(' <SelectStatement> ')' | 
| <MemberPredicate> | ::= | Path MEMBER OF Path | 
| | | Path MEMBER Path | 
| <MathAddExpression> | ::= | <MathAddExpression> '+' <MathMultExpression> | 
| | | <MathAddExpression> '-' <MathMultExpression> | |
| | | <MathMultExpression> | 
| <MathMultExpression> | ::= | <MathMultExpression> '*' <MathNegateExpression> | 
| | | <MathMultExpression> '/' <MathNegateExpression> | |
| | | <MathNegateExpression> | 
| <MathNegateExpression> | ::= | '-' <Value> | 
| | | <Value> | 
| <CaseExpression> | ::= | <SimpleCaseExpression> | 
| | | <SearchedCaseExpression> | 
| <SimpleCaseExpression> | ::= | CASE <Value> <SimpleWhenClause> <ElseClause> END | 
| <SearchedCaseExpression> | ::= | CASE <SearchedWhenClause> <ElseClause> END | 
| <SimpleWhenClause> | ::= | WHEN <Value> THEN <CaseResult> | 
| | | WHEN <Value> THEN <CaseResult> <SimpleWhenClause> | 
| <SearchedWhenClause> | ::= | WHEN <Expression> THEN <CaseResult> | 
| | | WHEN <Expression> THEN <CaseResult> <SearchedWhenClause> | 
| <CaseResult> | ::= | <MathAddExpression> | 
| <ElseClause> | ::= | ELSE <CaseResult> | 
| | | 
| <IndexedExpression> | ::= | Path '[' <Expression> ']' '.' Path | 
| | | Path '[' <Expression> ']' '.' Identifier | |
| | | Path '[' <Expression> ']' | 
| <StringValueExpression> | ::= | Identifier | 
| | | Path | |
| | | StringLiteral | |
| | | Parameter | |
| | | <IndexedExpression> | |
| | | <FunctionExpression> | |
| | | <CaseExpression> | 
| <ConcatenationExpression> | ::= | <StringValueExpression> '||' <ConcatenationExpression> | 
| | | <StringValueExpression> | 
| <Value> | ::= | <ConcatenationExpression> | 
| | | IntegerLiteral | |
| | | FloatLiteral | |
| | | HexLiteral | |
| | | NULL | |
| | | BooleanLiteral | |
| | | <Tuple> | |
| | | <AggregateExpression> | |
| | | <CollectionExpression> | 
| <Tuple> | ::= | '(' <SelectStatement> ')' | 
| | | '(' <ExpressionList> ')' | 
| <ExpressionList> | ::= | <Expression> ',' <ExpressionList> | 
| | | <Expression> |