diff options
-rw-r--r-- | doc/src/sgml/ref/select.sgml | 915 |
1 files changed, 465 insertions, 450 deletions
diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index 1f4818b8b0f..ef47fa7d09a 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -1,367 +1,372 @@ -<REFENTRY ID="SQL-SELECT-1"> -<REFMETA> -<REFENTRYTITLE> -SELECT -</REFENTRYTITLE> -<REFMISCINFO>SQL - Language Statements</REFMISCINFO> -</REFMETA> -<REFNAMEDIV> -<REFNAME> -SELECT -</REFNAME> -<REFPURPOSE> -Retrieve rows from a table or view -</REFPURPOSE> -<REFSYNOPSISDIV> -<REFSYNOPSISDIVINFO> -<DATE>1998-04-15</DATE> -</REFSYNOPSISDIVINFO> -<SYNOPSIS> -<REPLACEABLE CLASS="PARAMETER"> -</REPLACEABLE> +<refentry id="SQL-SELECT"> + <refmeta> + <refentrytitle> + SELECT + </refentrytitle> + <refmiscinfo>SQL - Language Statements</refmiscinfo> + </refmeta> + <refnamediv> + <refname> + SELECT + </refname> + <refpurpose> + Retrieve rows from a table or view. + </refpurpose></refnamediv> + <refsynopsisdiv> + <refsynopsisdivinfo> + <date>1998-09-06</date> + </refsynopsisdivinfo> + <synopsis> SELECT [ALL|DISTINCT] - <REPLACEABLE CLASS="PARAMETER">expression</REPLACEABLE> [AS <REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>] [, ...] - [INTO [TABLE] <REPLACEABLE CLASS="PARAMETER">intable</REPLACEABLE>] - [FROM <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE> [<REPLACEABLE CLASS="PARAMETER">alias</REPLACEABLE>] [, ...] ] - [WHERE <REPLACEABLE CLASS="PARAMETER">condition</REPLACEABLE>] - [GROUP BY <REPLACEABLE CLASS="PARAMETER">column</REPLACEABLE> [, ...] ] - [HAVING <REPLACEABLE CLASS="PARAMETER">condition</REPLACEABLE> [, ...] ] - [UNION [ALL] <REPLACEABLE CLASS="PARAMETER">select</REPLACEABLE>] - [ORDER BY <REPLACEABLE CLASS="PARAMETER">column</REPLACEABLE> [ASC | DESC] [, ...] ] -</SYNOPSIS> - -<REFSECT2 ID="R2-SQL-SELECT-1"> -<REFSECT2INFO> -<DATE>1998-04-15</DATE> -</REFSECT2INFO> -<TITLE> -Inputs -</TITLE> - -<PARA> -<VARIABLELIST> -<VARLISTENTRY> -<TERM> -<REPLACEABLE CLASS="PARAMETER">expression</REPLACEABLE> -</TERM> -<LISTITEM> -<PARA> - The name of a table's column or an expression. -</PARA> -</LISTITEM> -</VARLISTENTRY> - -<VARLISTENTRY> -<TERM> -<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE> -</TERM> -<LISTITEM> -<PARA> - Specifies another name for a column or an expression using - the AS clause. <REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE> cannot be used in the WHERE - condition. It can, however, be referenced in associated - ORDER BY or GROUP BY clauses. -</PARA> -</LISTITEM> -</VARLISTENTRY> - -<VARLISTENTRY> -<TERM> -<REPLACEABLE CLASS="PARAMETER">intable</REPLACEABLE> -</TERM> -<LISTITEM> -<PARA> - If the INTO TABLE clause is specified, the result of the - query will be stored in another table with the indicated - name. -If <REPLACEABLE CLASS="PARAMETER">intable</REPLACEABLE> does not exist, it will be created automatically. - -<Note> -<Para> -The CREATE TABLE AS statement will also create a new table from a select query. -</Para> -</Note> -</PARA> -</LISTITEM> -</VARLISTENTRY> - -<VARLISTENTRY> -<TERM> -<REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE> -</TERM> -<LISTITEM> -<PARA> - The name of an existing table referenced by FROM clause. -</PARA> -</LISTITEM> -</VARLISTENTRY> - -<VARLISTENTRY> -<TERM> -<REPLACEABLE CLASS="PARAMETER">alias</REPLACEABLE> -</TERM> -<LISTITEM> -<PARA> -An alternate name for the preceeding <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE>. -Used for brevity or to eliminate ambiguity for joins within a single table. -</PARA> -</LISTITEM> -</VARLISTENTRY> - -<VARLISTENTRY> -<TERM> -<REPLACEABLE CLASS="PARAMETER">condition</REPLACEABLE> -</TERM> -<LISTITEM> -<PARA> -An expression leading to a boolean (true/false) result. -See the WHERE clause. -</PARA> -</LISTITEM> -</VARLISTENTRY> - -<VARLISTENTRY> -<TERM> -<REPLACEABLE CLASS="PARAMETER">column</REPLACEABLE> -</TERM> -<LISTITEM> -<PARA> - The name of a table's column. -</PARA> -</LISTITEM> -</VARLISTENTRY> - -<VARLISTENTRY> -<TERM> -<REPLACEABLE CLASS="PARAMETER">select</REPLACEABLE> -</TERM> -<LISTITEM> -<PARA> -A select statement with all features except the ORDER BY clause. -</PARA> -</LISTITEM> -</VARLISTENTRY> - -</VARIABLELIST> -</PARA> -</REFSECT2> - -<REFSECT2 ID="R2-SQL-SELECT-2"> -<REFSECT2INFO> -<DATE>1998-04-15</DATE> -</REFSECT2INFO> -<TITLE> -Outputs -</TITLE> -<VARIABLELIST> -<VARLISTENTRY> -<TERM> - Rows -</TERM> -<LISTITEM> -<PARA> -The complete set of rows resulting from the query specification. -</PARA> -</LISTITEM> -</VARLISTENTRY> - -<VARLISTENTRY> -<TERM> -<ReturnValue>count</ReturnValue> -</TERM> -<LISTITEM> -<PARA> -The count of rows returned by the query. -</PARA> -</LISTITEM> -</VARLISTENTRY> -</VARIABLELIST> - -</REFSECT2> -</REFSYNOPSISDIV> - -<REFSECT1 ID="R1-SQL-SELECT-1"> -<REFSECT1INFO> -<DATE>1998-04-15</DATE> -</REFSECT1INFO> -<TITLE> -Description -</TITLE> -<PARA> -SELECT is the principal means to access information - in <productname>Postgres</productname>. - + <replaceable class="PARAMETER">expression</replaceable> [AS <replaceable class="PARAMETER">name</replaceable>] [, ...] + [INTO [TABLE] <replaceable class="PARAMETER">intable</replaceable>] + [FROM <replaceable class="PARAMETER">table</replaceable> [<replaceable class="PARAMETER">alias</replaceable>] [, ...] ] + [WHERE <replaceable class="PARAMETER">condition</replaceable>] + [GROUP BY <replaceable class="PARAMETER">column</replaceable> [, ...] ] + [HAVING <replaceable class="PARAMETER">condition</replaceable> [, ...] ] + [UNION [ALL] <replaceable class="PARAMETER">select</replaceable>] + [ORDER BY <replaceable class="PARAMETER">column</replaceable> [ASC | DESC] [, ...] ] + </synopsis> + + <refsect2 id="R2-SQL-SELECT-1"> + <refsect2info> + <date>1998-09-06</date> + </refsect2info> + <title> + Inputs + </title> + + <para> + <variablelist> + <varlistentry> + <term> + <replaceable class="PARAMETER">expression</replaceable> + </term> + <listitem> + <para> + The name of a table's column or an expression. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + <replaceable class="PARAMETER">name</replaceable> + </term> + <listitem> + <para> + Specifies another name for a column or an expression using + the AS clause. <replaceable class="PARAMETER">name</replaceable> + cannot be used in the WHERE + condition. It can, however, be referenced in associated + ORDER BY or GROUP BY clauses. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + <replaceable class="PARAMETER">intable</replaceable> + </term> + <listitem> + <para> + If the INTO TABLE clause is specified, the result of the + query will be stored in another table with the indicated + name. + If <replaceable class="PARAMETER">intable</replaceable> does + not exist, it will be created automatically. + + <note> + <para> + The <command>CREATE TABLE AS</command> statement will also + create a new table from a select query. + </para> + </note> + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + <replaceable class="PARAMETER">table</replaceable> + </term> + <listitem> + <para> + The name of an existing table referenced by the FROM clause. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + <replaceable class="PARAMETER">alias</replaceable> + </term> + <listitem> + <para> + An alternate name for the preceding + <replaceable class="PARAMETER">table</replaceable>. + It is used for brevity or to eliminate ambiguity for joins + within a single table. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + <replaceable class="PARAMETER">condition</replaceable> + </term> + <listitem> + <para> + A boolean expression giving a result of true or false. + See the WHERE clause. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + <replaceable class="PARAMETER">column</replaceable> + </term> + <listitem> + <para> + The name of a table's column. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + <replaceable class="PARAMETER">select</replaceable> + </term> + <listitem> + <para> + A select statement with all features except the ORDER BY clause. + </para> + </listitem> + </varlistentry> + + </variablelist> + </para> + </refsect2> + + <refsect2 id="R2-SQL-SELECT-2"> + <refsect2info> + <date>1998-09-06</date> + </refsect2info> + <title> + Outputs + </title> + <variablelist> + <varlistentry> + <term> + Rows + </term> + <listitem> + <para> + The complete set of rows resulting from the query specification. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + <returnvalue>count</returnvalue> + </term> + <listitem> + <para> + The count of rows returned by the query. + </para> + </listitem> + </varlistentry> + </variablelist> + + </refsect2> + </refsynopsisdiv> + + <refsect1 id="R1-SQL-SELECT-1"> + <refsect1info> + <date>1998-09-06</date> + </refsect1info> + <title> + Description + </title> + <para> SELECT will get all rows which satisfy the WHERE condition - or all rows of a table if WHERE is omitted. - -<PARA> + or all rows of a table if WHERE is omitted.</para> + + <para> 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).</para> + + <para> 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).</para> + + <para> 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)</para> + + <para> The UNION clause specifies a table derived from a Cartesian - product union join. (See UNION clause). - -<PARA> + product union join. (See UNION clause).</para> + + <para> You must have SELECT privilege to a table to read its values - (See GRANT/REVOKE statements). - -<REFSECT2 ID="R2-SQL-WHERE-2"> -<REFSECT2INFO> -<DATE>1998-04-15</DATE> -</REFSECT2INFO> -<TITLE> -WHERE clause -</TITLE> -<PARA> - The optional WHERE condition has the general form: - -<Synopsis> -WHERE <REPLACEABLE CLASS="PARAMETER">expr</REPLACEABLE> <REPLACEABLE CLASS="PARAMETER">cond_op</REPLACEABLE> <REPLACEABLE CLASS="PARAMETER">expr</REPLACEABLE> [<REPLACEABLE CLASS="PARAMETER">log_op</REPLACEABLE> ...] -</Synopsis> - - where <REPLACEABLE CLASS="PARAMETER">cond_op</REPLACEABLE> can be one of: =, <, <=, >, >=, <> - or a conditional operator like ALL, ANY, IN, LIKE, et cetera - and <REPLACEABLE CLASS="PARAMETER">log_op</REPLACEABLE> 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. -</PARA> -</REFSECT2> - -<REFSECT2 ID="R2-SQL-GROUPBY-2"> -<REFSECT2INFO> -<DATE>1998-04-15</DATE> -</REFSECT2INFO> -<TITLE> -GROUP BY clause -</TITLE> -<PARA> + (See GRANT/REVOKE statements).</para> + + <refsect2 id="R2-SQL-WHERE-2"> + <refsect2info> + <date>1998-09-06</date> + </refsect2info> + <title> + WHERE clause + </title> + <para> + The optional WHERE condition has the general form: + + <synopsis> +WHERE <replaceable class="PARAMETER">expr</replaceable> <replaceable class="PARAMETER">cond_op</replaceable> <replaceable class="PARAMETER">expr</replaceable> [<replaceable class="PARAMETER">log_op</replaceable> ...] + </synopsis> + + where <replaceable class="PARAMETER">cond_op</replaceable> can be + one of: =, <, <=, >, >=, <> + or a conditional operator like ALL, ANY, IN, LIKE, et cetera + and <replaceable class="PARAMETER">log_op</replaceable> 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. + </para> + </refsect2> + + <refsect2 id="R2-SQL-GROUPBY-2"> + <refsect2info> + <date>1998-09-06</date> + </refsect2info> + <title> + GROUP BY clause + </title> + <para> GROUP BY specifies a grouped table derived by the application of the this clause: -<SYNOPSIS> -GROUP BY <REPLACEABLE CLASS="PARAMETER">column</REPLACEABLE> [, ...] -</SYNOPSIS> - -<REFSECT2 ID="R2-SQL-HAVING-2"> -<REFSECT2INFO> -<DATE>1998-04-15</DATE> -</REFSECT2INFO> -<TITLE> -HAVING clause -</TITLE> -<PARA> - The optional HAVING condition has the general form: - -<Synopsis> -HAVING <REPLACEABLE CLASS="PARAMETER">cond_expr</REPLACEABLE> -</Synopsis> - - where <REPLACEABLE CLASS="PARAMETER">cond_expr</REPLACEABLE> is the same -as specified for the WHERE clause. - -<Para> + <synopsis> + GROUP BY <replaceable class="PARAMETER">column</replaceable> [, ...] + </synopsis></para></refsect2> + + <refsect2 id="R2-SQL-HAVING-2"> + <refsect2info> + <date>1998-09-06</date> + </refsect2info> + <title> + HAVING clause + </title> + <para> + The optional HAVING condition has the general form: + + <synopsis> +HAVING <replaceable class="PARAMETER">cond_expr</replaceable> + </synopsis> + + where <replaceable class="PARAMETER">cond_expr</replaceable> is the same + as specified for the WHERE clause.</para> + + <para> HAVING specifies a grouped table derived by the elimination of groups from the result of the previously specified clause - that do not meet the <REPLACEABLE CLASS="PARAMETER">cond_expr</REPLACEABLE>. - -<Para> - Each column referenced in <REPLACEABLE CLASS="PARAMETER">cond_expr</REPLACEABLE> shall unambiguously + that do not meet the <replaceable class="PARAMETER">cond_expr</replaceable>.</para> + + <para> + Each column referenced in <replaceable class="PARAMETER">cond_expr</replaceable> shall unambiguously reference a grouping column. -</PARA> -</REFSECT2> - -<REFSECT2 ID="R2-SQL-ORDERBYCLAUSE-2"> -<REFSECT2INFO> -<DATE>1998-04-15</DATE> -</REFSECT2INFO> -<TITLE> -ORDER BY clause -</TITLE> -<PARA> -<Synopsis> -ORDER BY <REPLACEABLE CLASS="PARAMETER">column</REPLACEABLE> [ASC | DESC] [, ...] -</Synopsis> - -<PARA> -<REPLACEABLE CLASS="PARAMETER">column</REPLACEABLE> can be either a column -name or an ordinal number. -<PARA> + </para> + </refsect2> + + <refsect2 id="R2-SQL-ORDERBYCLAUSE-2"> + <refsect2info> + <date>1998-09-06</date> + </refsect2info> + <title> + ORDER BY clause + </title> + <para> + <synopsis> +ORDER BY <replaceable class="PARAMETER">column</replaceable> [ASC | DESC] [, ...] + </synopsis></para> + + <para> + <replaceable class="PARAMETER">column</replaceable> can be either a column + name or an ordinal number.</para> + <para> 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.: -<ProgramListing> -SELECT title, date_prod + 1 AS newlen FROM films ORDER BY newlen; -</ProgramListing> - -<PARA> + <programlisting> + SELECT title, date_prod + 1 AS newlen FROM films ORDER BY newlen; + </programlisting></para> + + <para> The columns in the ORDER BY must appear in the SELECT clause. Thus the following statement is illegal: -<ProgramListing> -SELECT name FROM distributors ORDER BY code; -</ProgramListing> - -<PARA> + <programlisting> + SELECT name FROM distributors ORDER BY code; + </programlisting></para> + + <para> 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. -</REFSECT2> - -<REFSECT2 ID="R2-SQL-UNION-2"> -<REFSECT2INFO> -<DATE>1998-04-15</DATE> -</REFSECT2INFO> -<TITLE> -UNION clause -</TITLE> -<PARA> -<Synopsis> -<REPLACEABLE CLASS="PARAMETER">table_query</REPLACEABLE> UNION [ALL] <REPLACEABLE CLASS="PARAMETER">table_query</REPLACEABLE> - [ORDER BY <REPLACEABLE CLASS="PARAMETER">column</REPLACEABLE> [ASC | DESC] [, ...] ] -</Synopsis> - -where - <REPLACEABLE CLASS="PARAMETER">table_query</REPLACEABLE> - specifies any select expression without an ORDER BY clause. - -<PARA> - 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. - -<PARA> - By default, the result of UNION does not contain any duplicate rows - unless the ALL clause is specified. - -<Para> -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. - -</REFSECT2> - -<REFSECT1 ID="R1-SQL-SELECT-2"> -<TITLE> -Usage -</TITLE> -<PARA> -</PARA> -<ProgramListing> - --Join table films with their distributors: - -- + If not specified, ASC is assumed by default.</para> + </refsect2> + + <refsect2 id="R2-SQL-UNION-2"> + <refsect2info> + <date>1998-09-06</date> + </refsect2info> + <title> + UNION clause + </title> + <para> + <synopsis> +<replaceable class="PARAMETER">table_query</replaceable> UNION [ALL] <replaceable class="PARAMETER">table_query</replaceable> + [ORDER BY <replaceable class="PARAMETER">column</replaceable> [ASC | DESC] [, ...] ] + </synopsis> + + where + <replaceable class="PARAMETER">table_query</replaceable> + specifies any select expression without an ORDER BY clause.</para> + + <para> + 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.</para> + + <para> + By default, the result of UNION does not contain any duplicate rows + unless the ALL clause is specified.</para> + + <para> + 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.</para> + + </refsect2></refsect1> + + <refsect1 id="R1-SQL-SELECT-2"> + <title> + Usage + </title> + <para> + To join the table <literal>films</literal> with the table + <literal>distributors</literal>: + </para> + <programlisting> 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 -</ProgramListing> - -<ProgramListing> - --sum column "len" of all films group by "kind": - -- + </programlisting> + <para> + To sum the column <literal>len</literal> of all films and group + the reults by <literal>kind</literal>: + </para> + <programlisting> 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 -</ProgramListing> - -<ProgramListing> - --sum column length of all films group by "kind" - --having total duration < 5 hours: - -- + </programlisting> + + <para> + To sum the column <literal>len</literal> of all films, group + the reults by <literal>kind</literal> and show those group totals + that are less than 5 hours: + </para> + <programlisting> SELECT kind, SUM(len) AS total FROM films GROUP BY kind @@ -411,11 +419,13 @@ Usage ----------+------ Comedy | 02:58 Romantic | 04:38 -</ProgramListing> - -<ProgramListing> - --The following two examples are identicals: - -- + </programlisting> + <para> + The following two examples are identical ways of sorting the individual + results according to the contents of the second column + (<literal>name</literal>): + </para> + <programlisting> 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 -</ProgramListing> - -<ProgramListing> - --union of table distributors and table actors: - -- (only those that begin with letter W): - -- - -- distributors: actors: + </programlisting> + + <para> + This example shows how to obtain the union of the tables + <literal>distributors</literal> and + <literal>actors</literal>, 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: + </para> + <programlisting> + -- 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 -</ProgramListing> - -</REFSECT1> - -<REFSECT1 ID="R1-SQL-SELECT-3"> -<TITLE> -Compatibility -</TITLE> -<PARA> -</PARA> - -<REFSECT2 ID="R2-SQL-SELECT-4"> -<REFSECT2INFO> -<DATE>1998-04-15</DATE> -</REFSECT2INFO> -<TITLE> -<Acronym>SQL92</Acronym> -</TITLE> -<PARA> -</PARA> - -<REFSECT3 ID="R3-SQL-SELECT-1"> -<REFSECT3INFO> -<DATE>1998-04-15</DATE> -</REFSECT3INFO> -<TITLE> -SELECT clause -</TITLE> -<PARA> -In the <Acronym>SQL92</Acronym> standard, the optional keyword "AS" is just noise and can be -omitted without affecting the meaning. -The <ProductName>Postgres</ProductName> parser requires this keyword when -renaming columns because the type extensibility features lead to parsing ambiguities -in this context. - -<PARA> -In the <Acronym>SQL92</Acronym> 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 <ProductName>Postgres</ProductName>. -</PARA> -</REFSECT3> - -<REFSECT3 ID="R3-SQL-UNION-1"> -<REFSECT3INFO> -<DATE>1998-04-15</DATE> -</REFSECT3INFO> -<TITLE> -UNION clause -</TITLE> -<PARA> -The <Acronym>SQL92</Acronym> syntax for UNION allows an additional CORRESPONDING BY clause: -<Synopsis> -<REPLACEABLE CLASS="PARAMETER">table_query</REPLACEABLE> UNION [ALL] - [CORRESPONDING [BY (<REPLACEABLE CLASS="PARAMETER">column</REPLACEABLE> [,...])]] - <REPLACEABLE CLASS="PARAMETER">table_query</REPLACEABLE> -</Synopsis> - -<Para> -The CORRESPONDING BY clause is not supported by <ProductName>Postgres</ProductName>. -</PARA> -</REFSECT3> - -</REFSECT2> -</REFSECT1> -</REFENTRY> - -<!-- -<REPLACEABLE CLASS="PARAMETER"> -</REPLACEABLE> -<ReturnValue></ReturnValue> -<PARA> -</PARA> -<VARIABLELIST> -<VARLISTENTRY> -<TERM>• -</TERM> -<LISTITEM> -<PARA> -</PARA> -</LISTITEM> -</VARLISTENTRY> -</VARIABLELIST> -<PARA> -</PARA> + </programlisting> + + </refsect1> + + <refsect1 id="R1-SQL-SELECT-3"> + <title> + Compatibility + </title> + <para> + </para> + + <refsect2 id="R2-SQL-SELECT-4"> + <refsect2info> + <date>1998-09-06</date> + </refsect2info> + <title> + <acronym>SQL92</acronym> + </title> + <para> + </para> + + <refsect3 id="R3-SQL-SELECT-1"> + <refsect3info> + <date>1998-04-15</date> + </refsect3info> + <title> + SELECT clause + </title> + <para> + In the <acronym>SQL92</acronym> standard, the optional keyword "AS" + is just noise and can be + omitted without affecting the meaning. + The <productname>Postgres</productname> parser requires this keyword when + renaming columns because the type extensibility features lead to + parsing ambiguities + in this context.</para> + + <para> + In the <acronym>SQL92</acronym> 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 <productname>Postgres</productname>. + </para> + </refsect3> + + <refsect3 id="R3-SQL-UNION-1"> + <refsect3info> + <date>1998-09-06</date> + </refsect3info> + <title> + UNION clause + </title> + <para> + The <acronym>SQL92</acronym> syntax for UNION allows an + additional CORRESPONDING BY clause: + <synopsis> +<replaceable class="PARAMETER">table_query</replaceable> UNION [ALL] + [CORRESPONDING [BY (<replaceable class="PARAMETER">column</replaceable> [,...])]] + <replaceable class="PARAMETER">table_query</replaceable> + </synopsis></para> + + <para> + The CORRESPONDING BY clause is not supported by + <productname>Postgres</productname>. + </para> + </refsect3> + + </refsect2> + </refsect1> +</refentry> + +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../reference.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:"/usr/lib/sgml/catalog" +sgml-local-ecat-files:nil +End: --> |