Formal Grammar of SQL

#grammar #SQL

Formal grammar of considered SQL Queries, in EBNF format.

AGGREGATOR:

AGGREGATOR

AGGREGATOR
         ::= COUNT
           | MAX
           | SUM
           | MIN

referenced by:

  • COLUMN
  • QUERY

QUERY:

QUERY

QUERY    ::= AGGREGATOR? SELECTION JOINS ( WHERE CONDITIONS )? GROUPINGS? ORDERING? LIMITING? ( ( UNION | INTERSECT | EXCEPT ) QUERY )?

referenced by:

  • COLUMN
  • QUERY
  • TABLE

SELECTION:

SELECTION

SELECTION
         ::= SELECT COLUMNS FROM TABLES

referenced by:

  • QUERY

COLUMNS:

COLUMNS

COLUMNS  ::= ( COLUMNS ',' )? COLUMN

referenced by:

  • COLUMNS
  • GROUPINGS
  • ORDERING
  • SELECTION

COLUMN:

COLUMN

COLUMN   ::= AGGREGATOR? ( TOKEN | QUERY | '*' )

referenced by:

  • COLUMNS

TABLES:

TABLES

TABLES   ::= ( TABLES ',' )? TABLE

referenced by:

  • SELECTION
  • TABLES

TABLE:

TABLE

TABLE    ::= ( TOKEN | QUERY ) ( AS TOKEN )?

referenced by:

  • JOINS
  • TABLES

JOINS:

JOINS

JOINS    ::= JOINS? ( LEFT | RIGHT | FULL | OUTER | NATURAL )? JOIN TABLE ON CONDITIONS

referenced by:

  • JOINS
  • QUERY

CONDITIONS:

CONDITIONS

CONDITIONS
         ::= ( CONDITIONS ( AND | OR ) )? CONDITION

referenced by:

  • CONDITIONS
  • GROUPINGS
  • JOINS
  • QUERY

CONDITION:

CONDITION

CONDITION
         ::= EXPRESSION ( '=' | '!=' | '>' | '<' | '>=' | '<=' | '<>' ) EXPRESSION

referenced by:

  • CONDITIONS

GROUPINGS:

GROUPINGS

GROUPINGS
         ::= 'GROUP BY' COLUMNS ( HAVING CONDITIONS )?

referenced by:

  • QUERY

ORDERING:

ORDERING

ORDERING ::= ( 'ORDER BY' COLUMNS ( ASC | DESC )? )?

referenced by:

  • QUERY

LIMITING:

LIMITING

LIMITING ::= ( LIMIT NUMBER )?

referenced by:

  • QUERY

Attribution

rr-2.1 generated by [RR - Railroad Diagram Generator][RR]
[RR]: https://www.bottlecaps.de/rr/ui