diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index bf44ee9c3f..a3dc22fa28 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -24,7 +24,7 @@ SELECT [ALL|DISTINCT [ON column] ] [ WHERE condition ] [ GROUP BY column [, ...] ] [ HAVING condition [, ...] ] - [ UNION [ALL] select ] + [ { UNION [ALL] | INTERSECT | EXCEPT } select ] [ ORDER BY column [ ASC | DESC ] [, ...] ] @@ -230,8 +230,16 @@ including duplicates. DESCending mode operator. (See ORDER BY clause) - The UNION clause specifies a table derived from a Cartesian - product union join. (See UNION clause). + The UNION clause allows the result to be the collection of rows + returned by the queries involved. (See UNION clause). + + + The INTERSECT give you the rows that are common to both queries. + (See INTERSECT clause). + + + The EXCEPT give you the rows in the upper query not in the lower query. + (See EXCEPT clause). You must have SELECT privilege to a table to read its values @@ -370,7 +378,8 @@ SELECT name FROM distributors ORDER BY code; specifies any select expression without an ORDER BY clause. - The UNION operator specifies a table derived from a Cartesian product. + The UNION clause allows the result to be the collection of rows + returned by the queries involved. (See UNION clause). 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. @@ -381,11 +390,75 @@ SELECT name FROM distributors ORDER BY code; Multiple UNION operators in the same SELECT statement are -evaluated left to right. + evaluated left to right. Note that the ALL keyword is not global in nature, being -applied only for the current pair of table results. + applied only for the current pair of table results. - + + + + + 1998-09-24 + + + INTERSECT Clause + + + +table_query INTERSECT table_query + [ ORDER BY column [ ASC | DESC ] [, ...] ] + + + where + table_query + specifies any select expression without an ORDER BY clause. + + + The INTERSECT clause allows the result to be all rows that are + common to the involved queries. (See INTERSECT clause). + The two tables that represent the direct operands of the INTERSECT must + have the same number of columns, and corresponding columns must be + of compatible data types. + + + Multiple INTERSECT operators in the same SELECT statement are + evaluated left to right. + + + + + + + 1998-09-24 + + + EXCEPT Clause + + + +table_query EXCEPT table_query + [ ORDER BY column [ ASC | DESC ] [, ...] ] + + + where + table_query + specifies any select expression without an ORDER BY clause. + + + The EXCEPT clause allows the result to be rows from the upper query + that are not in the lower query. (See EXCEPT clause). + The two tables that represent the direct operands of the EXCEPT must + have the same number of columns, and corresponding columns must be + of compatible data types. + + + Multiple EXCEPT operators in the same SELECT statement are + evaluated left to right. + + + + + @@ -633,7 +706,7 @@ SELECT [ ALL | DISTINCT ] <replaceable class="PARAMETER">expression</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>] + [ { UNION [ALL] | INTERSECT | EXCEPT } <replaceable class="PARAMETER">select</replaceable>] [ ORDER BY <replaceable class="PARAMETER">column</replaceable> [ ASC | DESC ] [, ...] ] </synopsis> diff --git a/doc/src/sgml/sql.sgml b/doc/src/sgml/sql.sgml index 08481bf66d..ed56c4515e 100644 --- a/doc/src/sgml/sql.sgml +++ b/doc/src/sgml/sql.sgml @@ -463,7 +463,7 @@ used to retrieve data. The syntax is: [WHERE condition] [GROUP BY <name_of_attr_i> [,... [, <name_of_attr_j>]] [HAVING condition]] - [{UNION | INTERSECT | EXCEPT} SELECT ...] + [{UNION [ALL] | INTERSECT | EXCEPT} SELECT ...] [ORDER BY <name_of_attr_i> [ASC|DESC] [, ... [, <name_of_attr_j> [ASC|DESC]]]]; \end{verbatim} diff --git a/src/bin/psql/psqlHelp.h b/src/bin/psql/psqlHelp.h index 9be1fdadd7..611716c4bb 100644 --- a/src/bin/psql/psqlHelp.h +++ b/src/bin/psql/psqlHelp.h @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: psqlHelp.h,v 1.59 1999/02/13 23:20:40 momjian Exp $ + * $Id: psqlHelp.h,v 1.60 1999/03/19 02:41:36 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -108,7 +108,7 @@ static struct _helpStruct QL_HELP[] = { "define a new rule", "\ \tCREATE RULE rule_name AS ON\n\ -\t[SELECT|UPDATE|DELETE|INSERT]\n\ +\t{ SELECT | UPDATE | DELETE | INSERT }\n\ \tTO object [WHERE qual]\n\ \tDO [INSTEAD] [action|NOTHING|[actions]];"}, {"create sequence", @@ -175,7 +175,7 @@ static struct _helpStruct QL_HELP[] = { \t[GROUP BY group_list]\n\ \t[HAVING having_clause]\n\ \t[ORDER BY attr1 [USING op1], ...attrN]\n\ -\t[UNION [ALL] SELECT ...];"}, +\t[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...];"}, {"delete", "delete tuples", "\ @@ -258,8 +258,8 @@ static struct _helpStruct QL_HELP[] = { "grant access control to a user or group", "\ \tGRANT privilege1, ...privilegeN ON rel1, ...relN TO \n\ -[PUBLIC|GROUP group|username]\n\ -\t privilege is ALL|SELECT|INSERT|UPDATE|DELETE|RULE"}, +{ PUBLIC | GROUP group | username }\n\ +\t privilege is { ALL | SELECT | INSERT | UPDATE | DELETE | RULE }"}, {"insert", "insert tuples", "\ @@ -271,7 +271,7 @@ static struct _helpStruct QL_HELP[] = { \t[WHERE qual]\n\ \t[GROUP BY group_list]\n\ \t[HAVING having_clause]\n\ -\t[UNION [ALL] SELECT ...];"}, +\t[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...];"}, {"listen", "listen for notification on a condition name", "\ @@ -305,8 +305,8 @@ static struct _helpStruct QL_HELP[] = { "revoke access control from a user or group", "\ \tREVOKE privilege1, ...privilegeN ON rel1, ...relN FROM \n\ -[PUBLIC|GROUP group|username]\n\ -\t privilege is ALL|SELECT|INSERT|UPDATE|DELETE|RULE"}, +{ PUBLIC | GROUP group | username }\n\ +\t privilege is { ALL | SELECT | INSERT | UPDATE | DELETE | RULE }"}, {"rollback work", "abort a transaction", "\ @@ -321,7 +321,7 @@ static struct _helpStruct QL_HELP[] = { \t[GROUP BY group_list]\n\ \t[HAVING having_clause]\n\ \t[ORDER BY attr1 [ASC|DESC] [USING op1], ...attrN ]\n\ -\t[UNION [ALL] SELECT ...];"}, +\t[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...];"}, {"set", "set run-time environment", #ifdef MULTIBYTE diff --git a/src/man/select.l b/src/man/select.l index 5853212a3f..9de52c4749 100644 --- a/src/man/select.l +++ b/src/man/select.l @@ -1,6 +1,6 @@ .\" This is -*-nroff-*- .\" XXX standard disclaimer belongs here.... -.\" $Header: /cvsroot/pgsql/src/man/Attic/select.l,v 1.11 1999/02/02 03:45:32 momjian Exp $ +.\" $Header: /cvsroot/pgsql/src/man/Attic/select.l,v 1.12 1999/03/19 02:41:41 momjian Exp $ .TH SELECT SQL 11/05/95 PostgreSQL PostgreSQL .SH NAME select - retrieve instances from a class @@ -15,7 +15,7 @@ select - retrieve instances from a class [\fBgroup by\fR attr_name1 {, attr_name-i....}] [\fBhaving\fR having-clause] [\fBorder by\fR attr_name1 [\fBasc\fR | \fBdesc\fR] [\fBusing op1\fR] {, attr_namei...}] -[\fBunion {all} select\fR ...] +[ { \fBunion {all}\fR | \fBintersect\fR | \fBexcept\fR } \fBselect\fR ...] .fi .SH DESCRIPTION