diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index 1f4818b8b0..ef47fa7d09 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -1,367 +1,372 @@ - - - -SELECT - -SQL - Language Statements - - - -SELECT - - -Retrieve rows from a table or view - - - -1998-04-15 - - - - + + + + SELECT + + SQL - Language Statements + + + + SELECT + + + Retrieve rows from a table or view. + + + + 1998-09-06 + + SELECT [ALL|DISTINCT] - expression [AS name] [, ...] - [INTO [TABLE] intable] - [FROM table [alias] [, ...] ] - [WHERE condition] - [GROUP BY column [, ...] ] - [HAVING condition [, ...] ] - [UNION [ALL] select] - [ORDER BY column [ASC | DESC] [, ...] ] - - - - -1998-04-15 - - -Inputs - - - - - - -expression - - - - The name of a table's column or an expression. - - - - - - -name - - - - Specifies another name for a column or an expression using - the AS clause. name cannot be used in the WHERE - condition. It can, however, be referenced in associated - ORDER BY or GROUP BY clauses. - - - - - - -intable - - - - If the INTO TABLE clause is specified, the result of the - query will be stored in another table with the indicated - name. -If intable does not exist, it will be created automatically. - - - -The CREATE TABLE AS statement will also create a new table from a select query. - - - - - - - - -table - - - - The name of an existing table referenced by FROM clause. - - - - - - -alias - - - -An alternate name for the preceeding table. -Used for brevity or to eliminate ambiguity for joins within a single table. - - - - - - -condition - - - -An expression leading to a boolean (true/false) result. -See the WHERE clause. - - - - - - -column - - - - The name of a table's column. - - - - - - -select - - - -A select statement with all features except the ORDER BY clause. - - - - - - - - - - -1998-04-15 - - -Outputs - - - - - Rows - - - -The complete set of rows resulting from the query specification. - - - - - - -count - - - -The count of rows returned by the query. - - - - - - - - - - -1998-04-15 - - -Description - - -SELECT is the principal means to access information - in Postgres. - + expression [AS name] [, ...] + [INTO [TABLE] intable] + [FROM table [alias] [, ...] ] + [WHERE condition] + [GROUP BY column [, ...] ] + [HAVING condition [, ...] ] + [UNION [ALL] select] + [ORDER BY column [ASC | DESC] [, ...] ] + + + + + 1998-09-06 + + + Inputs + + + + + + + expression + + + + The name of a table's column or an expression. + + + + + + + name + + + + Specifies another name for a column or an expression using + the AS clause. name + cannot be used in the WHERE + condition. It can, however, be referenced in associated + ORDER BY or GROUP BY clauses. + + + + + + + intable + + + + If the INTO TABLE clause is specified, the result of the + query will be stored in another table with the indicated + name. + If intable does + not exist, it will be created automatically. + + + + The CREATE TABLE AS statement will also + create a new table from a select query. + + + + + + + + + table + + + + The name of an existing table referenced by the FROM clause. + + + + + + + alias + + + + An alternate name for the preceding + table. + It is used for brevity or to eliminate ambiguity for joins + within a single table. + + + + + + + condition + + + + A boolean expression giving a result of true or false. + See the WHERE clause. + + + + + + + column + + + + The name of a table's column. + + + + + + + select + + + + A select statement with all features except the ORDER BY clause. + + + + + + + + + + + 1998-09-06 + + + Outputs + + + + + Rows + + + + The complete set of rows resulting from the query specification. + + + + + + + count + + + + The count of rows returned by the query. + + + + + + + + + + + 1998-09-06 + + + Description + + SELECT will get all rows which satisfy the WHERE condition - or all rows of a table if WHERE is omitted. - - + or all rows of a table if WHERE is omitted. + + The GROUP BY clause allows a user to divide a table - conceptually into groups. (See GROUP BY clause). - + conceptually into groups. (See GROUP BY clause). + + The HAVING clause specifies a grouped table derived by the elimination of groups from the result of the previously - specified clause. (See HAVING clause). - + specified clause. (See HAVING clause). + + The ORDER BY clause allows a user to specify that he/she wishes the rows sorted according to the ASCending or - DESCending mode operator. (See ORDER BY clause) - + DESCending mode operator. (See ORDER BY clause) + + The UNION clause specifies a table derived from a Cartesian - product union join. (See UNION clause). - - + product union join. (See UNION clause). + + You must have SELECT privilege to a table to read its values - (See GRANT/REVOKE statements). - - - -1998-04-15 - - -WHERE clause - - - The optional WHERE condition has the general form: - - -WHERE expr cond_op expr [log_op ...] - - - where cond_op can be one of: =, <, <=, >, >=, <> - or a conditional operator like ALL, ANY, IN, LIKE, et cetera - and log_op can be one of: AND, OR, NOT. - The comparison returns either TRUE or FALSE and all - instances will be discarded - if the expression evaluates to FALSE. - - - - - -1998-04-15 - - -GROUP BY clause - - + (See GRANT/REVOKE statements). + + + + 1998-09-06 + + + WHERE clause + + + The optional WHERE condition has the general form: + + +WHERE expr cond_op expr [log_op ...] + + + where cond_op can be + one of: =, <, <=, >, >=, <> + or a conditional operator like ALL, ANY, IN, LIKE, et cetera + and log_op can be one + of: AND, OR, NOT. + The comparison returns either TRUE or FALSE and all + instances will be discarded + if the expression evaluates to FALSE. + + + + + + 1998-09-06 + + + GROUP BY clause + + GROUP BY specifies a grouped table derived by the application of the this clause: - -GROUP BY column [, ...] - - - - -1998-04-15 - - -HAVING clause - - - The optional HAVING condition has the general form: - - -HAVING cond_expr - - - where cond_expr is the same -as specified for the WHERE clause. - - + + GROUP BY column [, ...] + + + + + 1998-09-06 + + + HAVING clause + + + The optional HAVING condition has the general form: + + +HAVING cond_expr + + + where cond_expr is the same + as specified for the WHERE clause. + + HAVING specifies a grouped table derived by the elimination of groups from the result of the previously specified clause - that do not meet the cond_expr. - - - Each column referenced in cond_expr shall unambiguously + that do not meet the cond_expr. + + + Each column referenced in cond_expr shall unambiguously reference a grouping column. - - - - - -1998-04-15 - - -ORDER BY clause - - - -ORDER BY column [ASC | DESC] [, ...] - - - -column can be either a column -name or an ordinal number. - + + + + + + 1998-09-06 + + + ORDER BY clause + + + +ORDER BY column [ASC | DESC] [, ...] + + + + column can be either a column + name or an ordinal number. + The ordinal numbers refers to the ordinal (left-to-right) position of the column. This feature makes it possible to define an ordering on the basis of a column that does not have a proper name. This is never absolutely necessary because it is always possible assign a name to a calculated column using the AS clause, e.g.: - -SELECT title, date_prod + 1 AS newlen FROM films ORDER BY newlen; - - - + + SELECT title, date_prod + 1 AS newlen FROM films ORDER BY newlen; + + + The columns in the ORDER BY must appear in the SELECT clause. Thus the following statement is illegal: - -SELECT name FROM distributors ORDER BY code; - - - + + SELECT name FROM distributors ORDER BY code; + + + Optionally one may add the keyword DESC (descending) or ASC (ascending) after each column name in the ORDER BY clause. - If not specified, ASC is assumed by default. - - - - -1998-04-15 - - -UNION clause - - - -table_query UNION [ALL] table_query - [ORDER BY column [ASC | DESC] [, ...] ] - - -where - table_query - specifies any select expression without an ORDER BY clause. - - - The UNION operator specifies a table derived from a Cartesian product. - The two tables that represent the direct operands of the UNION must - have the same number of columns, and corresponding columns must be - of compatible data types. - - - By default, the result of UNION does not contain any duplicate rows - unless the ALL clause is specified. - - -Multiple UNION operators in the same SELECT statement are evaluated left to right. -Note that the ALL keyword is not global in nature, being applied only for the current pair of -table results. - - - - - -Usage - - - - - --Join table films with their distributors: - -- + If not specified, ASC is assumed by default. + + + + + 1998-09-06 + + + UNION clause + + + +table_query UNION [ALL] table_query + [ORDER BY column [ASC | DESC] [, ...] ] + + + where + table_query + specifies any select expression without an ORDER BY clause. + + + The UNION operator specifies a table derived from a Cartesian product. + The two tables that represent the direct operands of the UNION must + have the same number of columns, and corresponding columns must be + of compatible data types. + + + By default, the result of UNION does not contain any duplicate rows + unless the ALL clause is specified. + + + Multiple UNION operators in the same SELECT statement are evaluated left to right. + Note that the ALL keyword is not global in nature, being applied only for the current pair of + table results. + + + + + + Usage + + + To join the table films with the table + distributors: + + SELECT f.title, f.did, d.name, f.date_prod, f.kind FROM distributors d, films f - WHERE f.did = d.did; + WHERE f.did = d.did title |did|name | date_prod|kind -------------------------+---+----------------+----------+---------- @@ -382,11 +387,12 @@ Usage The King and I |109|20th Century Fox|1956-08-11|Musical Das Boot |110|Bavaria Atelier |1981-11-11|Drama Bed Knobs and Broomsticks|111|Walt Disney | |Musical - - - - --sum column "len" of all films group by "kind": - -- + + + To sum the column len of all films and group + the reults by kind: + + SELECT kind, SUM(len) AS total FROM films GROUP BY kind; kind |total @@ -396,12 +402,14 @@ Usage Drama | 14:28 Musical | 06:42 Romantic | 04:38 - + - - --sum column length of all films group by "kind" - --having total duration < 5 hours: - -- + + To sum the column len of all films, group + the reults by kind and show those group totals + that are less than 5 hours: + + SELECT kind, SUM(len) AS total FROM films GROUP BY kind @@ -411,11 +419,13 @@ Usage ----------+------ Comedy | 02:58 Romantic | 04:38 - - - - --The following two examples are identicals: - -- + + + The following two examples are identical ways of sorting the individual + results according to the contents of the second column + (name): + + SELECT * FROM distributors ORDER BY name; SELECT * FROM distributors ORDER BY 2; @@ -434,29 +444,31 @@ Usage 111|Walt Disney 112|Warner Bros. 108|Westward - + - - --union of table distributors and table actors: - -- (only those that begin with letter W): - -- - -- distributors: actors: + + This example shows how to obtain the union of the tables + distributors and + actors, restricting the results to those that begin + with letter W in each table. Only distinct rows are to be used, so the + ALL keyword is omitted: + + + -- distributors: actors: -- did|name id|name -- ---+------------ --+-------------- -- 108|Westward 1|Woody Allen -- 111|Walt Disney 2|Warren Beatty -- 112|Warner Bros. 3|Walter Matthau -- ... ... - -- - --select only distinct rows (without ALL): - -- + SELECT distributors.name FROM distributors WHERE distributors.name LIKE 'W%' UNION SELECT actors.name FROM actors - WHERE actors.name LIKE 'W%'; + WHERE actors.name LIKE 'W%' name -------------- @@ -466,88 +478,91 @@ Usage Warren Beatty Westward Woody Allen - + + + + + + + Compatibility + + + + + + + 1998-09-06 + + + <acronym>SQL92</acronym> + + + + + + + 1998-04-15 + + + SELECT clause + + + In the SQL92 standard, the optional keyword "AS" + is just noise and can be + omitted without affecting the meaning. + The Postgres parser requires this keyword when + renaming columns because the type extensibility features lead to + parsing ambiguities + in this context. + + + In the SQL92 standard, the new column name + specified in an + "AS" clause may be referenced in GROUP BY and HAVING clauses. + This is not currently + allowed in Postgres. + + - + + + 1998-09-06 + + + UNION clause + + + The SQL92 syntax for UNION allows an + additional CORRESPONDING BY clause: + +table_query UNION [ALL] + [CORRESPONDING [BY (column [,...])]] + table_query + - - -Compatibility - - - + + The CORRESPONDING BY clause is not supported by + Postgres. + + + + + + - - -1998-04-15 - - -<Acronym>SQL92</Acronym> - - - - - - -1998-04-15 - - -SELECT clause - - -In the SQL92 standard, the optional keyword "AS" is just noise and can be -omitted without affecting the meaning. -The Postgres parser requires this keyword when -renaming columns because the type extensibility features lead to parsing ambiguities -in this context. - - -In the SQL92 standard, the new column name specified in an -"AS" clause may be referenced in GROUP BY and HAVING clauses. This is not currently -allowed in Postgres. - - - - - -1998-04-15 - - -UNION clause - - -The SQL92 syntax for UNION allows an additional CORRESPONDING BY clause: - -table_query UNION [ALL] - [CORRESPONDING [BY (column [,...])]] - table_query - - - -The CORRESPONDING BY clause is not supported by Postgres. - - - - - - - -