select-expr =
-+-+-> select-clause ------------+-+------+
| +-> ( select-expr ) -----------+ | |
| +-> TABLE table-ref ----------+ | |
+------ select-merge-clause <-------+ |
+------------------- <-------------------+
+-+--------------------+--+------------------+--+--------------------+->
+-> order-by-clause -+ +-> offset-clause -+ +-> limit-to-clause -+
select-merge-clause =
-+-> EXCEPT -+--------------+---+----+-------------------+-->
| +-> DISTINCT --+ | +-> CORRESPONDING --+
+-> INTERSECT -+-------------+-+ +-> NATURAL --------+
| +-> DISTINCT -+ |
+-> MINUS ---------------------+
+-> UNION --+-------------+----+
+-> ALL ------+
+-> DISTINCT -+
select-clause =
SELECT -+-------------+-> select-list -------------------------------+
+-> ALL ------+ |
+-> DISTINCT -+ |
+------------------<-------------------------------------------------+
+-> FROM -+--> table-ref --+-----------------------------------------+
+------ , <------+ |
+--------------------------------------------------------------------+
++--------->-----------------------+-+------------->----------------++
+> WHERE predicate ---------------+ +> GROUP BY -+> <column-name> -+|
+> value-expr ----+|
+------- ,<-------+|
+--------------------------------------<-----------------------------+
++---------->----------+---------------------------------------------->
+-> HAVING predicate -+
select-list =
-+-+----> * ------------------------------------------------------+-+->
| +-+--> value-expr --+--------------------------------------+-+-+ |
| | +-> AS <name> -+----------------------++ | |
| | +-> edit-using-clause -+ | |
| | | |
| ++-> <table-name> ------+-> . * ---------------------------+ |
| +-> <view-name> -------+ |
| +-> <correlation-name> + |
+---------------- , <----------------------------------------------+
edit-using-clause =
--> EDIT USING -+-> edit-string ---+->
+-> <domain-name> -+
table-ref =
--+--> <table-name> --+--+-----------------------------+-->
+--> <view-name> --+ +-> correlation-name-clause --+
+--> derived-table -+ |
+--> joined-table -----------------------------------+
derived-table =
----> ( -+-> select-expr --+-> ) ---->
+-> joined-table -+
joined-table =
--+-------> qualified-join ------+---->
+-------> cross-join ----------+
+-> ( --> joined-table --> ) --+
qualified-join =
-+-> table-ref -+-------------+--> JOIN --> table-ref -+
| +> join-type -+ |
| +---------------------------------------------------+
| ++-> ON predicate -------------------------------+-----------+>
| +-> USING ----> ( -+> <column-name> +-> ) ------+ |
| +------ , <------+ |
+-> table-ref -> NATURAL -+-------------+-> JOIN -> table-ref -+
+> join-type -+
cross-join =
---> table-ref --> CROSS JOIN --> table-ref --->
join-type =
--+-> INNER ------------------+-->
+-> LEFT ---+--> OUTER -----+
+-> RIGHT --+
+-> FULL ---+
correlation-name-clause =
-> AS <correlation-name> +------------------------------------+->
+-> ( -+-> <name-of-column> -+-> ) --+
+-------- , <---------+
order-by-clause =
--> ORDER BY -++-> value-expr -++---------+-+-->
|+-> <integer> ----++-> ASC --+ |
| +-> DESC -+ |
+------------ , <---------------+
offset-clause =
---> OFFSET skip-expression -+-> ROW --+-->
+-> ROWS --+
limit-to-clause =
-+> LIMIT TO -+-> limit-expression -+---------------------------+++---------++>
| | +-> OFFSET skip-expression -+|+-> ROW -+|
| | +-> SKIP skip-expression --+|+-> ROWS -+|
| +-> skip-expression , limit-expression -----------+ |
| |
+> FETCH -+> FIRST -+--+---------------------+--+----------+-> ONLY --------+
+> NEXT --+ +-> limit-expression -+ +-> ROW --+
+-> ROWS -+
optimize-clause =
--+---------------------------------------------------------------+--->
+-> OPTIMIZE --+-+-> FOR -+-> FAST FIRST --------+----------+-+-+
| | +-> TOTAL TIME --------+ | |
| | +-> SEQUENTIAL ACCESS -+ | |
| +-> USING <outline-name> ------------------+ |
| +-> WITH -+-> DEFAULT --+-> SELECTIVITY -+ |
| | +-> SAMPLED --+ | |
| | +-> AGGRESSIVE + | |
| +-> AS <query-name> -----------------------+ |
+---------------- <----------------------------+