From bb06cbdb2cf0a87cd6e8044c92315f8d316d8b00 Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Tue, 4 Nov 2003 00:34:45 +0000 Subject: [PATCH] Copy-editing. --- doc/src/sgml/ref/select.sgml | 80 ++++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index 9444f5f6e6e..82d276381de 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/select.sgml,v 1.71 2003/11/01 01:56:29 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/select.sgml,v 1.72 2003/11/04 00:34:45 tgl Exp $ PostgreSQL documentation --> @@ -41,11 +41,6 @@ where <replaceable class="parameter">from_item</replaceable> can be one of: <replaceable class="parameter">from_item</replaceable> [ NATURAL ] <replaceable class="parameter">join_type</replaceable> <replaceable class="parameter">from_item</replaceable> [ ON <replaceable class="parameter">join_condition</replaceable> | USING ( <replaceable class="parameter">join_column</replaceable> [, ...] ) ] </synopsis> -<comment>FIXME: This last syntax is incorrect if the join type is an -INNER or OUTER join (in which case one of NATURAL, ON ..., or USING -... is mandatory, not optional). What's the best way to fix -this?</comment> - </refsynopsisdiv> <refsect1> @@ -107,7 +102,7 @@ this?</comment> <listitem> <para> - The actual output rows are computed the + The actual output rows are computed using the <command>SELECT</command> output expressions for each selected row. (See <xref linkend="sql-select-list" endterm="sql-select-list-title"> @@ -125,15 +120,6 @@ this?</comment> </para> </listitem> - <listitem> - <para> - If the <literal>LIMIT</literal> or <literal>OFFSET</literal> - clause is specified, the <command>SELECT</command> statement - only returns a subset of the result rows. (See <xref - linkend="sql-limit" endterm="sql-limit-title"> below.) - </para> - </listitem> - <listitem> <para> <literal>DISTINCT</literal> eliminates duplicate rows from the @@ -145,6 +131,15 @@ this?</comment> </para> </listitem> + <listitem> + <para> + If the <literal>LIMIT</literal> or <literal>OFFSET</literal> + clause is specified, the <command>SELECT</command> statement + only returns a subset of the result rows. (See <xref + linkend="sql-limit" endterm="sql-limit-title"> below.) + </para> + </listitem> + <listitem> <para> The <literal>FOR UPDATE</literal> clause causes the @@ -291,17 +286,21 @@ this?</comment> </para> <para> - A <literal>JOIN</literal> clause, combines two - <literal>FROM</> items. (Use parentheses if necessary to - determine the order of nesting.) + A <literal>JOIN</literal> clause combines two + <literal>FROM</> items. Use parentheses if necessary to + determine the order of nesting. In the absence of parentheses, + <literal>JOIN</literal>s nest left-to-right. In any case + <literal>JOIN</literal> binds more tightly than the commas + separating <literal>FROM</> items. </para> <para> <literal>CROSS JOIN</> and <literal>INNER JOIN</literal> - produce a simple Cartesian product, the same as you get from - listing the two items at the top level of <literal>FROM</>. + produce a simple Cartesian product, the same result as you get from + listing the two items at the top level of <literal>FROM</>, + but restricted by the join condition (if any). <literal>CROSS JOIN</> is equivalent to <literal>INNER JOIN ON - (true)</>, that is, no rows are removed by qualification. + (TRUE)</>, that is, no rows are removed by qualification. These join types are just a notational convenience, since they do nothing you couldn't do with plain <literal>FROM</> and <literal>WHERE</>. @@ -315,7 +314,7 @@ this?</comment> condition. This left-hand row is extended to the full width of the joined table by inserting null values for the right-hand columns. Note that only the <literal>JOIN</> - clauses own condition is considered while deciding which rows + clause's own condition is considered while deciding which rows have matches. Outer conditions are applied afterwards. </para> @@ -410,7 +409,7 @@ GROUP BY <replaceable class="parameter">expression</replaceable> [, ...] expressions. <replaceable class="parameter">expression</replaceable> can be an input column name, or the name or ordinal number of an output column - (<command>SELECT</command> list), or it can be an arbitrary + (<command>SELECT</command> list item), or an arbitrary expression formed from input-column values. In case of ambiguity, a <literal>GROUP BY</literal> name will be interpreted as an input-column name rather than an output column name. @@ -497,7 +496,7 @@ HAVING <replaceable class="parameter">condition</replaceable> <para> Currently, <literal>FOR UPDATE</> may not be specified either for - a <literal>UNION</> result or for the inputs of <literal>UNION</>. + a <literal>UNION</> result or for any input of a <literal>UNION</>. </para> </refsect2> @@ -613,7 +612,7 @@ ORDER BY <replaceable class="parameter">expression</replaceable> [ ASC | DESC | </synopsis> <replaceable class="parameter">expression</replaceable> can be the name or ordinal number of an output column - (<command>SELECT</command> list), or it can be an arbitrary + (<command>SELECT</command> list item), or it can be an arbitrary expression formed from input-column values. </para> @@ -623,7 +622,7 @@ ORDER BY <replaceable class="parameter">expression</replaceable> [ ASC | DESC | equal according to the leftmost expression, the are compared according to the next expression and so on. If they are equal according to all specified expressions, they are returned in - random order. + an implementation-dependent order. </para> <para> @@ -660,7 +659,7 @@ SELECT name FROM distributors ORDER BY code; <para> Optionally one may add the key word <literal>ASC</> (ascending) or - <literal>DESC</> (descending) after each expression in the + <literal>DESC</> (descending) after any expression in the <literal>ORDER BY</> clause. If not specified, <literal>ASC</> is assumed by default. Alternatively, a specific ordering operator name may be specified in the <literal>USING</> clause. @@ -689,15 +688,18 @@ SELECT name FROM distributors ORDER BY code; <para> The <literal>LIMIT</literal> clause consists of two independent - clauses: + sub-clauses: <synopsis> LIMIT { <replaceable class="parameter">count</replaceable> | ALL } OFFSET <replaceable class="parameter">start</replaceable> </synopsis> <replaceable class="parameter">count</replaceable> specifies the - maximum number of rows to return, and <replaceable + maximum number of rows to return, while <replaceable class="parameter">start</replaceable> specifies the number of rows - to skip before starting to return rows. + to skip before starting to return rows. When both are specified, + <replaceable class="parameter">start</replaceable> rows are skipped + before starting to count the <replaceable + class="parameter">count</replaceable> rows to be returned. </para> <para> @@ -754,6 +756,13 @@ SELECT DISTINCT ON (location) location, time, report of time values for each location, we'd have gotten a report from an unpredictable time for each location. </para> + + <para> + The <literal>DISTINCT ON</> expression(s) must match the leftmost + <literal>ORDER BY</> expression(s). The <literal>ORDER BY</> clause + will normally contain additional expression(s) that determine the + desired precedence of rows within each <literal>DISTINCT ON</> group. + </para> </refsect2> <refsect2 id="SQL-FOR-UPDATE"> @@ -889,10 +898,10 @@ SELECT * FROM distributors ORDER BY 2; </para> <para> - This example shows how to obtain the union of the tables + The next 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 wanted, so the + with the letter W in each table. Only distinct rows are wanted, so the key word <literal>ALL</literal> is omitted. <programlisting> @@ -925,7 +934,7 @@ SELECT actors.name <para> This example shows how to use a function in the <literal>FROM</> - clause, both with and without a column definition list. + clause, both with and without a column definition list: <programlisting> CREATE FUNCTION distributors(int) RETURNS SETOF distributors AS ' @@ -1048,7 +1057,8 @@ SELECT distributors.* FROM distributors d, distributors distributors; </para> <para> - SQL99 uses a slightly different definition which is not upward compatible + SQL99 uses a slightly different definition which is not entirely upward + compatible with SQL92. In most cases, however, <productname>PostgreSQL</productname> will interpret an <literal>ORDER BY</literal> or <literal>GROUP BY</literal> expression the same way SQL99 does. -- GitLab