[ WITH [ RECURSIVE ] $with_query$ [ , ... ] ]
    SELECT [ ALL | DISTINCT [ ON ( $expression$ [ , ... ] ) ] ]
    { * | { $expression$ [ [ AS ] $output_name$ ] } [ , ... ] }
    INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] $new_table$
    [ FROM $from_item$ [ , ... ] ]
    [ WHERE $condition$ ]
    [ GROUP BY $expression$ [ , ... ] ]
    [ HAVING $condition$ ]
    [ WINDOW { $window_name$ AS ( $window_definition$ ) } [ , ... ] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] $select$ ]
    [ ORDER BY { $expression$ [ ASC | DESC | USING $operator$ ] [ NULLS { FIRST | LAST } ] } [ , ... ] ]
    [ LIMIT { $count$ | ALL } | FETCH { FIRST | NEXT } [ $count$ ] { ROW | ROWS } ONLY ]
    [ OFFSET $start$ [ ROW | ROWS ] ]
    [ { FOR { UPDATE | SHARE } [ OF $table_name$ [ , ... ] ] [ NOWAIT ] } [ ... ] ]
