[ 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 ] } [ ... ] ]