diff --git a/doc/src/sgml/queries.sgml b/doc/src/sgml/queries.sgml index a3b0aa2d147d765b622e4378dbc59329d2518e17..185602c151ceb26f84d23ca03b64248934ddca51 100644 --- a/doc/src/sgml/queries.sgml +++ b/doc/src/sgml/queries.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/queries.sgml,v 1.28 2003/11/29 19:51:37 pgsql Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/queries.sgml,v 1.29 2004/03/03 22:22:24 neilc Exp $ --> <chapter id="queries"> <title>Queries</title> @@ -108,8 +108,9 @@ SELECT random(); <title>The <literal>FROM</literal> Clause</title> <para> - The <literal>FROM</> clause derives a table from one or more other - tables given in a comma-separated table reference list. + The <xref linkend="sql-from" endterm="sql-from-title"> derives a + table from one or more other tables given in a comma-separated + table reference list. <synopsis> FROM <replaceable>table_reference</replaceable> <optional>, <replaceable>table_reference</replaceable> <optional>, ...</optional></optional> </synopsis> @@ -677,7 +678,8 @@ SELECT * </indexterm> <para> - The syntax of the <literal>WHERE</> clause is + The syntax of the <xref linkend="sql-where" + endterm="sql-where-title"> clause is <synopsis> WHERE <replaceable>search_condition</replaceable> </synopsis> @@ -783,13 +785,14 @@ SELECT <replaceable>select_list</replaceable> </synopsis> <para> - The <literal>GROUP BY</> clause is used to group together those rows in - a table that share the same values in all the columns listed. The - order in which the columns are listed does not matter. The - purpose is to reduce each group of rows sharing common values into - one group row that is representative of all rows in the group. - This is done to eliminate redundancy in the output and/or compute - aggregates that apply to these groups. For instance: + The <xref linkend="sql-groupby" endterm="sql-groupby-title"> is + used to group together those rows in a table that share the same + values in all the columns listed. The order in which the columns + are listed does not matter. The purpose is to reduce each group + of rows sharing common values into one group row that is + representative of all rows in the group. This is done to + eliminate redundancy in the output and/or compute aggregates that + apply to these groups. For instance: <screen> <prompt>=></> <userinput>SELECT * FROM test1;</> x | y @@ -1058,7 +1061,7 @@ SELECT a AS value, b + c AS sum FROM ... <synopsis> SELECT DISTINCT <replaceable>select_list</replaceable> ... </synopsis> - (Instead of <literal>DISTINCT</> the word <literal>ALL</literal> + (Instead of <literal>DISTINCT</> the key word <literal>ALL</literal> can be used to select the default behavior of retaining all rows.) </para> diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index c765329df11fde15c2f4419cc6a62d70a572a3d3..63a85b2a00df4ba9519bd52e6567f10e8f515d02 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/ref/select.sgml,v 1.74 2003/12/14 00:15:03 neilc Exp $ +$PostgreSQL: pgsql/doc/src/sgml/ref/select.sgml,v 1.75 2004/03/03 22:22:24 neilc Exp $ PostgreSQL documentation --> @@ -174,7 +174,8 @@ where <replaceable class="parameter">from_item</replaceable> can be one of: </para> <para> - <literal>FROM</literal>-clause elements can contain: + The <literal>FROM</literal> clause can contain the following + elements: <variablelist> <varlistentry> @@ -289,16 +290,16 @@ where <replaceable class="parameter">from_item</replaceable> can be one of: 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. + <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 result as you get from listing the two items at the top level of <literal>FROM</>, - but restricted by the join condition (if any). + 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. These join types are just a notational convenience, since they @@ -647,7 +648,7 @@ SELECT name FROM distributors ORDER BY code; <literal>INTERSECT</>, or <literal>EXCEPT</> clause may only specify an output column name or number, not an expression. </para> - + <para> If an <literal>ORDER BY</> expression is a simple name that matches both a result column name and an input column name, diff --git a/doc/src/sgml/ref/update.sgml b/doc/src/sgml/ref/update.sgml index e95278af288c7cd47817af5338835b1f8c424cbd..6a6cf99137314ec811c37306b94867610c3656a6 100644 --- a/doc/src/sgml/ref/update.sgml +++ b/doc/src/sgml/ref/update.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/ref/update.sgml,v 1.27 2003/11/29 19:51:39 pgsql Exp $ +$PostgreSQL: pgsql/doc/src/sgml/ref/update.sgml,v 1.28 2004/03/03 22:22:24 neilc Exp $ PostgreSQL documentation --> @@ -32,8 +32,8 @@ UPDATE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> SET <replacea <para> <command>UPDATE</command> changes the values of the specified columns in all rows that satisfy the condition. Only the columns to - be modified need be mentioned in the statement; columns not explicitly - <literal>SET</> retain their previous values. + be modified need be mentioned in the <literal>SET</literal> clause; + columns not explicitly modified retain their previous values. </para> <para> @@ -43,6 +43,14 @@ UPDATE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> SET <replacea clause. </para> + <para> + There are two ways to modify a table using information contained in + other tables in the database: using sub-selects, or specifying + additional tables in the <literal>FROM</literal> clause. Which + technique is more appropriate depends on the specific + circumstances. + </para> + <para> You must have the <literal>UPDATE</literal> privilege on the table to update it, as well as the <literal>SELECT</literal> @@ -99,7 +107,12 @@ UPDATE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> SET <replacea <listitem> <para> A list of table expressions, allowing columns from other tables - to appear in the <literal>WHERE</> condition and the update expressions. + to appear in the <literal>WHERE</> condition and the update + expressions. This is similar to the list of tables that can be + specified in the <xref linkend="sql-from" + endterm="sql-from-title"> of a <command>SELECT</command> + statement; for example, an alias for the table name can be + specified. </para> </listitem> </varlistentry> @@ -139,7 +152,7 @@ UPDATE <replaceable class="parameter">count</replaceable> <para> Change the word <literal>Drama</> to <literal>Dramatic</> in the - column <structfield>kind</> of the table <literal>films</literal>: + column <structfield>kind</> of the table <structname>films</structname>: <programlisting> UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama'; @@ -148,7 +161,7 @@ UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama'; <para> Adjust temperature entries and reset precipitation to its default - value in one row of the table <literal>weather</literal>: + value in one row of the table <structname>weather</structname>: <programlisting> UPDATE weather SET temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT @@ -156,13 +169,30 @@ UPDATE weather SET temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT </programlisting> </para> + <para> + Increment the sales count of the salesperson who manages the + account for Acme Corporation, using the <literal>FROM</literal> + clause syntax: +<programlisting> +UPDATE employees SET sales_count = sales_count + 1 FROM accounts + WHERE accounts.name = 'Acme Corporation' + AND employees.id = accounts.sales_person; +</programlisting> + + Perform the same operation, using a sub-select in the + <literal>WHERE</literal> clause: +<programlisting> +UPDATE employees SET sales_count = sales_count + 1 WHERE id = + (SELECT sales_person FROM accounts WHERE name = 'Acme Corporation'); +</programlisting> + </para> </refsect1> <refsect1> <title>Compatibility</title> <para> - This command conforms to the SQL standard. The + This command conforms to the <acronym>SQL</acronym> standard. The <literal>FROM</literal> clause is a <productname>PostgreSQL</productname> extension. </para> diff --git a/doc/src/sgml/trigger.sgml b/doc/src/sgml/trigger.sgml index 79a438da8fb40235473099b170186829c75b91bf..a8ee6c7d9515926ceeba37d2b6d6347ce01164b4 100644 --- a/doc/src/sgml/trigger.sgml +++ b/doc/src/sgml/trigger.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/trigger.sgml,v 1.34 2004/01/22 19:50:21 neilc Exp $ +$PostgreSQL: pgsql/doc/src/sgml/trigger.sgml,v 1.35 2004/03/03 22:22:24 neilc Exp $ --> <chapter id="triggers"> @@ -449,9 +449,9 @@ typedef struct Trigger <para> The function <function>trigf</> reports the number of rows in the - table <literal>ttest</> and skips the actual operation if the + table <structname>ttest</> and skips the actual operation if the command attempts to insert a null value into the column - <literal>x</>. (So the trigger acts as a not-null constraint but + <structfield>x</>. (So the trigger acts as a not-null constraint but doesn't abort the transaction.) </para>