From: Thomas G. Lockhart Date: Wed, 14 Jun 2000 13:18:59 +0000 (+0000) Subject: Fix markup to allow doc building. X-Git-Tag: REL7_0_3~47 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=3a82b67b22ab61812b06e4051b003e3854d55b99;p=postgresql.git Fix markup to allow doc building. --- diff --git a/doc/src/sgml/inherit.sgml b/doc/src/sgml/inherit.sgml index f50c4bb34dd..7bdd48ff802 100644 --- a/doc/src/sgml/inherit.sgml +++ b/doc/src/sgml/inherit.sgml @@ -1,5 +1,5 @@ @@ -40,6 +40,7 @@ CREATE TABLE capitals ( The inheritance hierarchy is a actually a directed acyclic graph. + For example, the following query finds all the cities that are situated at an attitude of 500ft or higher: @@ -87,6 +88,7 @@ SELECT c.name, c.altitude ALTER TABLE. + @@ -154,7 +154,7 @@ INSERT INTO weather - You can also use the COPY command to perform load large + You can also use COPY to load large amounts of data from flat (ASCII) files. This is usually faster because the data is read (or written) as a single atomic diff --git a/doc/src/sgml/release.sgml b/doc/src/sgml/release.sgml index f57b7ef2780..17019957662 100644 --- a/doc/src/sgml/release.sgml +++ b/doc/src/sgml/release.sgml @@ -1,87 +1,83 @@ Release Notes - -Release 7.0.2 - + + Release 7.0.2 + - -2000-06-05 - - -This is a repackaging of 7.0.1 with added documentation. - + + Release date 2000-06-05. This is a repackaging of 7.0.1 with added documentation. + - -Migration to v7.0.2 + + Migration to v7.0.2 - -A dump/restore is not required for those running -7.*. - - - -Changes + + A dump/restore is not required for those running + v7.*. + + - - + + Changes + + + Added documentation to tarball. - - - - + + + + - -Release 7.0.1 - + + Release 7.0.1 + - -2000-06-01 - - -This is basically a cleanup release for 7.0. - + + Release date 2000-06-01. + This is a cleanup release for 7.0. + + + Migration to v7.0.1 - -Migration to v7.0.1 + + A dump/restore is not required for those running + v7.0. + + - -A dump/restore is not required for those running -7.0. - - - -Changes + + Changes - - + + Fix many CLUSTER failures (Tom) Allow ALTER TABLE RENAME works on indexes (Tom) Fix plpgsql to handle datetime->timestamp and timespan->interval (Bruce) @@ -106,11 +102,10 @@ Fix too long syslog message (Tatsuo) Fix problem with quoted indexes that are too long (Tom) JDBC ResultSet.getTimestamp() fix (Gregory Krasnow & Floyd Marinescu) ecpg changes (Michael) - - - - - + + + + Release 7.0 @@ -126,9 +121,7 @@ ecpg changes (Michael) --> -2000-05-08 - - + Released 2000-05-08. This release contains improvements in many areas, demonstrating the continued growth of PostgreSQL. There are more improvements and fixes in 7.0 than in any previous @@ -287,6 +280,8 @@ Ack! This isn't yet in the code?? - thomas 2000-04-30 + Changes + Bug Fixes @@ -611,87 +606,84 @@ New multibyte encodings - -Release 6.5.3 - + + Release 6.5.3 + - -1999-10-13 - - -This is basically a cleanup release for 6.5.2. We have added a new -pgaccess that was missing in 6.5.2, and installed an NT-specific fix. - + + Released 1999-10-13. + This is basically a cleanup release for 6.5.2. We have added a new + pgaccess that was missing in 6.5.2, and installed an NT-specific fix. + - -Migration to v6.5.3 + + Migration to v6.5.3 - -A dump/restore is not required for those running -6.5.*. - - - -Changes + + A dump/restore is not required for those running + 6.5.*. + + + + Changes - - + + Updated version of pgaccess 0.98 NT-specific patch Fix dumping rules on inherited tables - - - - + + + + - -Release 6.5.2 - + + Release 6.5.2 + - -1999-09-15 - - -This is basically a cleanup release for 6.5.1. We have fixed a variety of -problems reported by 6.5.1 users. - + + Released 1999-09-15. + This is basically a cleanup release for 6.5.1. We have fixed a variety of + problems reported by 6.5.1 users. + - -Migration to v6.5.2 + + Migration to v6.5.2 - -A dump/restore is not required for those running -6.5.*. - - - -Changes + + A dump/restore is not required for those running + 6.5.*. + + - - + + Changes + + + subselect+CASE fixes(Tom) Add SHLIB_LINK setting for solaris_i386 and solaris_sparc ports(Daren Sefcik) Fixes for CASE in WHERE join clauses(Tom) @@ -716,48 +708,47 @@ Repair logic error in LIKE: should not return LIKE_ABORT when reach end of pattern before end of text(Tom) Repair incorrect cleanup of heap memory allocation during transaction abort(Tom) Updated version of pgaccess 0.98 - - - - - + + + + - -Release 6.5.1 - + + Release 6.5.1 + - -1999-07-15 - - -This is basically a cleanup release for 6.5. We have fixed a variety of -problems reported by 6.5 users. - + + Released 1999-07-15. + + + This is basically a cleanup release for 6.5. We have fixed a variety of + problems reported by 6.5 users. + + + Migration to v6.5.1 - -Migration to v6.5.1 + + A dump/restore is not required for those running + 6.5. + + - -A dump/restore is not required for those running -6.5. - - - -Changes + + Changes - - + + Add NT README file Portability fixes for linux_ppc, Irix, linux_alpha, OpenBSD, alpha Remove QUERY_LIMIT, use SELECT...LIMIT @@ -781,30 +772,27 @@ Shared library dependencies fixed (Tom) Fixed glitches affecting GROUP BY in subselects(Tom) Fix some compiler warnings (Tomoaki Nishiyama) Add Win1250 (Czech) support (Pavel Behal) - - - - - + + + + - -Release 6.5 - + + Release 6.5 + -1999-06-09 - - + Released 1999-06-09. This release marks a major step in the development team's mastery of the source code we inherited from Berkeley. You will see we are now easily adding major features, thanks to the increasing size and experience of our @@ -1023,6 +1011,8 @@ Add Win1250 (Czech) support (Pavel Behal) + Changes + Bug Fixes @@ -1412,10 +1402,12 @@ is required for those wishing to migrate data from any previous release of Postgres. - - - + +Changes + + + Bug Fixes --------- Fix for a tiny memory leak in PQsetdb/PQfinish(Bryan) @@ -1664,12 +1656,11 @@ For upgrades from pre-v6.3 installations, refer to the installation and migration instructions for v6.3. - + + Changes - - -Changes -------- + + Configure detection improvements for tcl/tk(Brook Milligan, Alvin) Manual page improvements(Bruce) BETWEEN and LIKE fix(Thomas) @@ -1688,29 +1679,28 @@ libreadline cleanup(Erwan MAS) Remove DISTDIR(Bruce) Makefile dependency cleanup(Jeroen van Vianen) ASSERT fixes(Bruce) - - - - - -Release 6.3.1 - + + + + - -1998-03-23 - - -Summary: + + Release 6.3.1 + + + + Released 1998-03-23. + Summary: @@ -1750,12 +1740,11 @@ For upgrades from pre-v6.3 installations, refer to the installation and migration instructions for v6.3. - + + Changes - - -Changes -------- + + ecpg cleanup/fixes, now version 1.1(Michael Meskes) pg_user cleanup(Bruce) large object fix for pg_dump and tclsh (alvin) @@ -1783,59 +1772,58 @@ Fix Alpha port(Dwayne Bailey) Fix for text arrays containing quotes(Doug Gibson) Solaris compile fix(Albert Chin-A-Young) Better identify tcl and tk libs and includes(Bruce) - - - - - -Release 6.3 - + + + + - -1998-03-01 - - -There are many new features and improvements in this release. -Here is a brief, incomplete summary: + + Release 6.3 + - - - -Many new SQL features, including -full SQL92 subselect capability -(everything is here but target-list subselects). - - + + Released 1998-03-01. + There are many new features and improvements in this release. + Here is a brief, incomplete summary: - - -Support for client-side environment variables to specify time zone and date style. - - + + + + Many new SQL features, including + full SQL92 subselect capability + (everything is here but target-list subselects). + + - - -Socket interface for client/server connection. This is the default now -so you may need to start postmaster with the - flag. - - + + + Support for client-side environment variables to specify time zone and date style. + + - - -Better password authorization mechanisms. Default table permissions have changed. - - + + + Socket interface for client/server connection. This is the default now + so you may need to start postmaster with the + flag. + + + + + + Better password authorization mechanisms. Default table permissions have changed. + + @@ -1843,101 +1831,101 @@ Better password authorization mechanisms. Default table permissions have changed has been removed. Performance has been improved. + + - - - - - -Bruce Momjian wrote the following notes to introduce the new release. - - + + + Bruce Momjian wrote the following notes to introduce the new release. + + - -There are some general 6.3 issues that I want to mention. These are -only the big items that can not be described in one sentence. A review -of the detailed changes list is still needed. - - -First, we now have subselects. Now that we have them, I would like to -mention that without subselects, SQL is a very limited language. -Subselects are a major feature, and you should review your code for -places where subselects provide a better solution for your queries. I -think you will find that there are more uses for subselects than you may -think. Vadim has put us on the big SQL map with subselects, and fully -functional ones too. The only thing you can't do with subselects is to -use them in the target list. - - -Second, 6.3 uses unix domain sockets rather than TCP/IP by default. To -enable connections from other machines, you have to use the new -postmaster -i option, and of course edit pg_hba.conf. Also, for this -reason, the format of pg_hba.conf has changed. - - -Third, char() fields will now allow faster access than varchar() or -text. Specifically, the text and varchar() have a penalty for access to -any columns after the first column of this type. char() used to also -have this access penalty, but it no longer does. This may suggest that -you redesign some of your tables, especially if you have short character -columns that you have defined as varchar() or text. This and other -changes make 6.3 even faster than earlier releases. - - -We now have passwords definable independent of any Unix file. There are -new SQL USER commands. See the pg_hba.conf manual page for more -information. There is a new table, pg_shadow, which is used to store -user information and user passwords, and it by default only SELECT-able -by the postgres super-user. pg_user is now a view of pg_shadow, and is -SELECT-able by PUBLIC. You should keep using pg_user in your -application without changes. - - -User-created tables now no longer have SELECT permission to PUBLIC by -default. This was done because the ANSI standard requires it. You can -of course GRANT any permissions you want after the table is created. -System tables continue to be SELECT-able by PUBLIC. - - -We also have real deadlock detection code. No more sixty-second -timeouts. And the new locking code implements a FIFO better, so there -should be less resource starvation during heavy use. - - -Many complaints have been made about inadequate documenation in previous -releases. Thomas has put much effort into many new manuals for this -release. Check out the doc/ directory. - - -For performance reasons, time travel is gone, but can be implemented -using triggers (see pgsql/contrib/spi/README). Please check out the new -\d command for types, operators, etc. Also, views have their own -permissions now, not based on the underlying tables, so permissions on -them have to be set separately. Check /pgsql/interfaces for some new -ways to talk to Postgres. - - -This is the first release that really required an explanation for -existing users. In many ways, this was necessary because the new -release removes many limitations, and the work-arounds people were using -are no longer needed. - + + There are some general 6.3 issues that I want to mention. These are + only the big items that can not be described in one sentence. A review + of the detailed changes list is still needed. + + + First, we now have subselects. Now that we have them, I would like to + mention that without subselects, SQL is a very limited language. + Subselects are a major feature, and you should review your code for + places where subselects provide a better solution for your queries. I + think you will find that there are more uses for subselects than you may + think. Vadim has put us on the big SQL map with subselects, and fully + functional ones too. The only thing you can't do with subselects is to + use them in the target list. + + + Second, 6.3 uses unix domain sockets rather than TCP/IP by default. To + enable connections from other machines, you have to use the new + postmaster -i option, and of course edit pg_hba.conf. Also, for this + reason, the format of pg_hba.conf has changed. + + + Third, char() fields will now allow faster access than varchar() or + text. Specifically, the text and varchar() have a penalty for access to + any columns after the first column of this type. char() used to also + have this access penalty, but it no longer does. This may suggest that + you redesign some of your tables, especially if you have short character + columns that you have defined as varchar() or text. This and other + changes make 6.3 even faster than earlier releases. + + + We now have passwords definable independent of any Unix file. There are + new SQL USER commands. See the pg_hba.conf manual page for more + information. There is a new table, pg_shadow, which is used to store + user information and user passwords, and it by default only SELECT-able + by the postgres super-user. pg_user is now a view of pg_shadow, and is + SELECT-able by PUBLIC. You should keep using pg_user in your + application without changes. + + + User-created tables now no longer have SELECT permission to PUBLIC by + default. This was done because the ANSI standard requires it. You can + of course GRANT any permissions you want after the table is created. + System tables continue to be SELECT-able by PUBLIC. + + + We also have real deadlock detection code. No more sixty-second + timeouts. And the new locking code implements a FIFO better, so there + should be less resource starvation during heavy use. + + + Many complaints have been made about inadequate documenation in previous + releases. Thomas has put much effort into many new manuals for this + release. Check out the doc/ directory. + + + For performance reasons, time travel is gone, but can be implemented + using triggers (see pgsql/contrib/spi/README). Please check out the new + \d command for types, operators, etc. Also, views have their own + permissions now, not based on the underlying tables, so permissions on + them have to be set separately. Check /pgsql/interfaces for some new + ways to talk to Postgres. + + + This is the first release that really required an explanation for + existing users. In many ways, this was necessary because the new + release removes many limitations, and the work-arounds people were using + are no longer needed. + - -Migration to v6.3 + + Migration to v6.3 - -A dump/restore using pg_dump -or pg_dumpall -is required for those wishing to migrate data from any -previous release of Postgres. - - + + A dump/restore using pg_dump + or pg_dumpall + is required for those wishing to migrate data from any + previous release of Postgres. + + - + + Changes - - + + Bug Fixes --------- Fix binary cursors broken by MOVE implementation(Vadim) @@ -2176,12 +2164,12 @@ from psql to update the existing system table: This will need to be done to every existing database, including template1. - - - -Changes -------- + + Changes + + + Allow TIME and TYPE column names(Thomas) Allow larger range of true/false as boolean values(Thomas) Support output of "now" and "current"(Thomas) @@ -2193,10 +2181,10 @@ Fix avg(cash) computation(Thomas) Fix for specifying a column twice in ORDER/GROUP BY(Vadim) Documented new libpq function to return affected rows, PQcmdTuples(Bruce) Trigger function for inserting user names for INSERT/UPDATE(Brook Milligan) - - - - + + + + Release 6.2 @@ -2243,10 +2231,11 @@ because the COPY output format was improved from the 1.02 release. - + + Changes - - + + Bug Fixes --------- Fix problems with pg_dump for inheritance, sequences, archive tables(Bruce) @@ -2388,12 +2377,11 @@ Refer to the release notes for v6.1 for more details. - + + Changes - - -Changes -------- + + fix for SET with options (Thomas) allow pg_dump/pg_dumpall to preserve ownership of all tables/objects(Bruce) new psql \connect option allows changing usernames without changing databases @@ -2411,10 +2399,10 @@ major fix for endian handling of communication to server(Thomas, Tatsuo) Fix for Solaris assembler and include files(Yoshihiko Ichikawa) allow underscores in usernames(Bruce) pg_dumpall now returns proper status, portability fix(Bruce) - - - - + + + + Release 6.1 @@ -2492,10 +2480,11 @@ because the COPY output format was improved from the 1.02 release. - + + Changes - - + + Bug Fixes --------- packet length checking in library routines @@ -2635,10 +2624,11 @@ because the COPY output format was improved from the 1.02 release. - + + Changes - - + + Bug Fixes --------- ALTER TABLE bug - running postgress process needs to re-read table definition diff --git a/doc/src/sgml/sql.sgml b/doc/src/sgml/sql.sgml index f61b085c2ff..c4c2057699c 100644 --- a/doc/src/sgml/sql.sgml +++ b/doc/src/sgml/sql.sgml @@ -1,5 +1,5 @@ @@ -155,20 +155,22 @@ $Header: /cvsroot/pgsql/doc/src/sgml/sql.sgml,v 1.9 2000/05/02 20:01:52 thomas E The Suppliers and Parts Database - SUPPLIER SNO | SNAME | CITY SELLS SNO | PNO - -----+---------+-------- -----+----- - 1 | Smith | London 1 | 1 - 2 | Jones | Paris 1 | 2 - 3 | Adams | Vienna 2 | 4 - 4 | Blake | Rome 3 | 1 - 3 | 3 - 4 | 2 - PART PNO | PNAME | PRICE 4 | 3 - -----+---------+--------- 4 | 4 - 1 | Screw | 10 - 2 | Nut | 8 - 3 | Bolt | 15 - 4 | Cam | 25 +SUPPLIER: SELLS: + SNO | SNAME | CITY SNO | PNO +----+---------+-------- -----+----- + 1 | Smith | London 1 | 1 + 2 | Jones | Paris 1 | 2 + 3 | Adams | Vienna 2 | 4 + 4 | Blake | Rome 3 | 1 + 3 | 3 + 4 | 2 +PART: 4 | 3 + PNO | PNAME | PRICE 4 | 4 +----+---------+--------- + 1 | Screw | 10 + 2 | Nut | 8 + 3 | Bolt | 15 + 4 | Cam | 25 @@ -474,7 +476,7 @@ attributes are taken from. We often write a relation scheme as INTERSECT (∩): builds the set-theoretic intersection of two tables. Given the tables R and S, - RS is the + RS is the set of tuples that are in R and in S. @@ -532,11 +534,12 @@ attributes are taken from. We often write a relation scheme as Let the following two tables be given: - R A | B | C S C | D | E - ---+---+--- ---+---+--- - 1 | 2 | 3 3 | a | b - 4 | 5 | 6 6 | c | d - 7 | 8 | 9 +R: S: + A | B | C C | D | E +---+---+--- ---+---+--- + 1 | 2 | 3 3 | a | b + 4 | 5 | 6 6 | c | d + 7 | 8 | 9 @@ -547,14 +550,15 @@ attributes are taken from. We often write a relation scheme as get: - R x S A | B | R.C | S.C | D | E - ---+---+-----+-----+---+--- - 1 | 2 | 3 | 3 | a | b - 1 | 2 | 3 | 6 | c | d - 4 | 5 | 6 | 3 | a | b - 4 | 5 | 6 | 6 | c | d - 7 | 8 | 9 | 3 | a | b - 7 | 8 | 9 | 6 | c | d +R x S: + A | B | R.C | S.C | D | E +---+---+-----+-----+---+--- + 1 | 2 | 3 | 3 | a | b + 1 | 2 | 3 | 6 | c | d + 4 | 5 | 6 | 3 | a | b + 4 | 5 | 6 | 6 | c | d + 7 | 8 | 9 | 3 | a | b + 7 | 8 | 9 | 6 | c | d @@ -564,10 +568,10 @@ attributes are taken from. We often write a relation scheme as we get: - A | B | R.C | S.C | D | E - ---+---+-----+-----+---+--- - 1 | 2 | 3 | 3 | a | b - 4 | 5 | 6 | 6 | c | d + A | B | R.C | S.C | D | E +---+---+-----+-----+---+--- + 1 | 2 | 3 | 3 | a | b + 4 | 5 | 6 | 6 | c | d @@ -579,10 +583,10 @@ attributes are taken from. We often write a relation scheme as and get: - A | B | C | D | E - ---+---+---+---+--- - 1 | 2 | 3 | a | b - 4 | 5 | 6 | c | d + A | B | C | D | E +---+---+---+---+--- + 1 | 2 | 3 | a | b + 4 | 5 | 6 | c | d @@ -595,8 +599,9 @@ attributes are taken from. We often write a relation scheme as C and D. Then we define the division as: -R ÷ S = {t ∣ ∀ ts ∈ S - ∃ tr ∈ R + +R ÷ S = {t ∣ ∀ ts ∈ S ∃ tr ∈ R + such that tr(A,B)=t∧tr(C,D)=ts} @@ -614,24 +619,25 @@ tr(A,B)=t∧tr(C,D)=t Given the following tables - R A | B | C | D S C | D - ---+---+---+--- ---+--- - a | b | c | d c | d - a | b | e | f e | f - b | c | e | f - e | d | c | d - e | d | e | f - a | b | d | e +R: S: + A | B | C | D C | D +---+---+---+--- ---+--- + a | b | c | d c | d + a | b | e | f e | f + b | c | e | f + e | d | c | d + e | d | e | f + a | b | d | e R ÷ S is derived as - A | B - ---+--- - a | b - e | d + A | B +---+--- + a | b + e | d @@ -668,10 +674,10 @@ tr(A,B)=t∧tr(C,D)=t we will obtain the following result: - SNAME - ------- - Smith - Adams + SNAME +------- + Smith + Adams @@ -720,7 +726,10 @@ tr(A,B)=t∧tr(C,D)=t The queries used in TRC are of the following form: - x(A) ∣ F(x) + + +x(A) ∣ F(x) + where x is a tuple variable A is a set of attributes and F is a @@ -733,11 +742,11 @@ tr(A,B)=t∧tr(C,D)=t using TRC we formulate the following query: - - {x(SNAME) ∣ x ∈ SUPPLIER ∧ \nonumber - ∃ y ∈ SELLS ∃ z ∈ PART (y(SNO)=x(SNO) ∧ \nonumber - z(PNO)=y(PNO) ∧ \nonumber - z(PNAME)='Screw')} \nonumber + +{x(SNAME) ∣ x ∈ SUPPLIER ∧ + ∃ y ∈ SELLS ∃ z ∈ PART (y(SNO)=x(SNO) ∧ + z(PNO)=y(PNO) ∧ + z(PNAME)='Screw')} @@ -806,7 +815,9 @@ tr(A,B)=t∧tr(C,D)=t to involve arithmetic operations as well as comparisons, e.g. - A < B + 3. + +A < B + 3. + Note that + or other arithmetic operators appear neither in relational @@ -843,17 +854,17 @@ tr(A,B)=t∧tr(C,D)=t used to retrieve data. The syntax is: - SELECT [ALL|DISTINCT] - { * | expr_1 [AS c_alias_1] [, ... - [, expr_k [AS c_alias_k]]]} - FROM table_name_1 [t_alias_1] - [, ... [, table_name_n [t_alias_n]]] - [WHERE condition] - [GROUP BY name_of_attr_i - [,... [, name_of_attr_j]] [HAVING condition]] - [{UNION [ALL] | INTERSECT | EXCEPT} SELECT ...] - [ORDER BY name_of_attr_i [ASC|DESC] - [, ... [, name_of_attr_j [ASC|DESC]]]]; +SELECT [ALL|DISTINCT] + { * | expr_1 [AS c_alias_1] [, ... + [, expr_k [AS c_alias_k]]]} + FROM table_name_1 [t_alias_1] + [, ... [, table_name_n [t_alias_n]]] + [WHERE condition] + [GROUP BY name_of_attr_i + [,... [, name_of_attr_j]] [HAVING condition]] + [{UNION [ALL] | INTERSECT | EXCEPT} SELECT ...] + [ORDER BY name_of_attr_i [ASC|DESC] + [, ... [, name_of_attr_j [ASC|DESC]]]]; @@ -876,17 +887,17 @@ tr(A,B)=t∧tr(C,D)=t greater than 10 we formulate the following query: - SELECT * FROM PART - WHERE PRICE > 10; +SELECT * FROM PART + WHERE PRICE > 10; and get the table: - PNO | PNAME | PRICE - -----+---------+-------- - 3 | Bolt | 15 - 4 | Cam | 25 + PNO | PNAME | PRICE +-----+---------+-------- + 3 | Bolt | 15 + 4 | Cam | 25 @@ -896,9 +907,9 @@ tr(A,B)=t∧tr(C,D)=t from table PART we use the statement: - SELECT PNAME, PRICE - FROM PART - WHERE PRICE > 10; +SELECT PNAME, PRICE + FROM PART + WHERE PRICE > 10; In this case the result is: @@ -920,18 +931,18 @@ tr(A,B)=t∧tr(C,D)=t using the keywords OR, AND, and NOT: - SELECT PNAME, PRICE - FROM PART - WHERE PNAME = 'Bolt' AND +SELECT PNAME, PRICE + FROM PART + WHERE PNAME = 'Bolt' AND (PRICE = 0 OR PRICE < 15); will lead to the result: - PNAME | PRICE - --------+-------- - Bolt | 15 + PNAME | PRICE +--------+-------- + Bolt | 15 @@ -941,19 +952,19 @@ tr(A,B)=t∧tr(C,D)=t take two pieces of a part we could use the following query: - SELECT PNAME, PRICE * 2 AS DOUBLE - FROM PART - WHERE PRICE * 2 < 50; +SELECT PNAME, PRICE * 2 AS DOUBLE + FROM PART + WHERE PRICE * 2 < 50; and we get: - PNAME | DOUBLE - --------+--------- - Screw | 20 - Nut | 16 - Bolt | 30 + PNAME | DOUBLE +--------+--------- + Screw | 20 + Nut | 16 + Bolt | 30 Note that the word DOUBLE after the keyword AS is the new title of the @@ -980,25 +991,25 @@ tr(A,B)=t∧tr(C,D)=t attributes we formulate the following statement: - SELECT S.SNAME, P.PNAME - FROM SUPPLIER S, PART P, SELLS SE - WHERE S.SNO = SE.SNO AND - P.PNO = SE.PNO; +SELECT S.SNAME, P.PNAME + FROM SUPPLIER S, PART P, SELLS SE + WHERE S.SNO = SE.SNO AND + P.PNO = SE.PNO; and get the following table as a result: - SNAME | PNAME - -------+------- - Smith | Screw - Smith | Nut - Jones | Cam - Adams | Screw - Adams | Bolt - Blake | Nut - Blake | Bolt - Blake | Cam + SNAME | PNAME +-------+------- + Smith | Screw + Smith | Nut + Jones | Cam + Adams | Screw + Adams | Bolt + Blake | Nut + Blake | Bolt + Blake | Cam @@ -1040,8 +1051,8 @@ tr(A,B)=t∧tr(C,D)=t the following query: - SELECT AVG(PRICE) AS AVG_PRICE - FROM PART; +SELECT AVG(PRICE) AS AVG_PRICE + FROM PART; @@ -1049,9 +1060,9 @@ tr(A,B)=t∧tr(C,D)=t The result is: - AVG_PRICE - ----------- - 14.5 + AVG_PRICE +----------- + 14.5 @@ -1060,16 +1071,16 @@ tr(A,B)=t∧tr(C,D)=t the statement: - SELECT COUNT(PNO) - FROM PART; +SELECT COUNT(PNO) + FROM PART; and get: - COUNT - ------- - 4 + COUNT +------- + 4 @@ -1108,21 +1119,21 @@ tr(A,B)=t∧tr(C,D)=t formulate the query: - SELECT S.SNO, S.SNAME, COUNT(SE.PNO) - FROM SUPPLIER S, SELLS SE - WHERE S.SNO = SE.SNO - GROUP BY S.SNO, S.SNAME; +SELECT S.SNO, S.SNAME, COUNT(SE.PNO) + FROM SUPPLIER S, SELLS SE + WHERE S.SNO = SE.SNO + GROUP BY S.SNO, S.SNAME; and get: - SNO | SNAME | COUNT - -----+-------+------- - 1 | Smith | 2 - 2 | Jones | 1 - 3 | Adams | 2 - 4 | Blake | 3 + SNO | SNAME | COUNT +-----+-------+------- + 1 | Smith | 2 + 2 | Jones | 1 + 3 | Adams | 2 + 4 | Blake | 3 @@ -1132,16 +1143,16 @@ tr(A,B)=t∧tr(C,D)=t tables SUPPLIER and SELLS is derived: - S.SNO | S.SNAME | SE.PNO - -------+---------+-------- - 1 | Smith | 1 - 1 | Smith | 2 - 2 | Jones | 4 - 3 | Adams | 1 - 3 | Adams | 3 - 4 | Blake | 2 - 4 | Blake | 3 - 4 | Blake | 4 + S.SNO | S.SNAME | SE.PNO +-------+---------+-------- + 1 | Smith | 1 + 1 | Smith | 2 + 2 | Jones | 4 + 3 | Adams | 1 + 3 | Adams | 3 + 4 | Blake | 2 + 4 | Blake | 3 + 4 | Blake | 4 @@ -1150,19 +1161,19 @@ tr(A,B)=t∧tr(C,D)=t together that agree on both attributes S.SNO and S.SNAME: - S.SNO | S.SNAME | SE.PNO - -------+---------+-------- - 1 | Smith | 1 - | 2 - -------------------------- - 2 | Jones | 4 - -------------------------- - 3 | Adams | 1 - | 3 - -------------------------- - 4 | Blake | 2 - | 3 - | 4 + S.SNO | S.SNAME | SE.PNO +-------+---------+-------- + 1 | Smith | 1 + | 2 +-------------------------- + 2 | Jones | 4 +-------------------------- + 3 | Adams | 1 + | 3 +-------------------------- + 4 | Blake | 2 + | 3 + | 4 @@ -1204,21 +1215,21 @@ tr(A,B)=t∧tr(C,D)=t query: - SELECT S.SNO, S.SNAME, COUNT(SE.PNO) - FROM SUPPLIER S, SELLS SE - WHERE S.SNO = SE.SNO - GROUP BY S.SNO, S.SNAME - HAVING COUNT(SE.PNO) > 1; +SELECT S.SNO, S.SNAME, COUNT(SE.PNO) + FROM SUPPLIER S, SELLS SE + WHERE S.SNO = SE.SNO + GROUP BY S.SNO, S.SNAME + HAVING COUNT(SE.PNO) > 1; and get: - SNO | SNAME | COUNT - -----+-------+------- - 1 | Smith | 2 - 3 | Adams | 2 - 4 | Blake | 3 + SNO | SNAME | COUNT +-----+-------+------- + 1 | Smith | 2 + 3 | Adams | 2 + 4 | Blake | 3 @@ -1243,10 +1254,10 @@ tr(A,B)=t∧tr(C,D)=t named 'Screw' we use the query: - SELECT * - FROM PART - WHERE PRICE > (SELECT PRICE FROM PART - WHERE PNAME='Screw'); +SELECT * + FROM PART + WHERE PRICE > (SELECT PRICE FROM PART + WHERE PNAME='Screw'); @@ -1254,10 +1265,10 @@ tr(A,B)=t∧tr(C,D)=t The result is: - PNO | PNAME | PRICE - -----+---------+-------- - 3 | Bolt | 15 - 4 | Cam | 25 + PNO | PNAME | PRICE +-----+---------+-------- + 3 | Bolt | 15 + 4 | Cam | 25 @@ -1272,16 +1283,16 @@ tr(A,B)=t∧tr(C,D)=t greater. - + If we want to know all suppliers that do not sell any part (e.g. to be able to remove these suppliers from the database) we use: - SELECT * - FROM SUPPLIER S - WHERE NOT EXISTS - (SELECT * FROM SELLS SE - WHERE SE.SNO = S.SNO); +SELECT * + FROM SUPPLIER S + WHERE NOT EXISTS + (SELECT * FROM SELLS SE + WHERE SE.SNO = S.SNO); @@ -1310,22 +1321,22 @@ tr(A,B)=t∧tr(C,D)=t The following query is an example for UNION: - SELECT S.SNO, S.SNAME, S.CITY - FROM SUPPLIER S - WHERE S.SNAME = 'Jones' - UNION - SELECT S.SNO, S.SNAME, S.CITY - FROM SUPPLIER S - WHERE S.SNAME = 'Adams'; +SELECT S.SNO, S.SNAME, S.CITY + FROM SUPPLIER S + WHERE S.SNAME = 'Jones' + UNION + SELECT S.SNO, S.SNAME, S.CITY + FROM SUPPLIER S + WHERE S.SNAME = 'Adams'; gives the result: - SNO | SNAME | CITY - -----+-------+-------- - 2 | Jones | Paris - 3 | Adams | Vienna + SNO | SNAME | CITY +-----+-------+-------- + 2 | Jones | Paris + 3 | Adams | Vienna @@ -1333,45 +1344,46 @@ gives the result: Here an example for INTERSECT: - SELECT S.SNO, S.SNAME, S.CITY - FROM SUPPLIER S - WHERE S.SNO > 1 - INTERSECT - SELECT S.SNO, S.SNAME, S.CITY - FROM SUPPLIER S - WHERE S.SNO > 2; +SELECT S.SNO, S.SNAME, S.CITY + FROM SUPPLIER S + WHERE S.SNO > 1 + INTERSECT + SELECT S.SNO, S.SNAME, S.CITY + FROM SUPPLIER S + WHERE S.SNO > 2; gives the result: - SNO | SNAME | CITY - -----+-------+-------- - 2 | Jones | Paris -The only tuple returned by both parts of the query is the one having $SNO=2$. + SNO | SNAME | CITY +-----+-------+-------- + 2 | Jones | Paris + + The only tuple returned by both parts of the query is the one having $SNO=2$. Finally an example for EXCEPT: - SELECT S.SNO, S.SNAME, S.CITY - FROM SUPPLIER S - WHERE S.SNO > 1 - EXCEPT - SELECT S.SNO, S.SNAME, S.CITY - FROM SUPPLIER S - WHERE S.SNO > 3; +SELECT S.SNO, S.SNAME, S.CITY + FROM SUPPLIER S + WHERE S.SNO > 1 + EXCEPT + SELECT S.SNO, S.SNAME, S.CITY + FROM SUPPLIER S + WHERE S.SNO > 3; gives the result: - SNO | SNAME | CITY - -----+-------+-------- - 2 | Jones | Paris - 3 | Adams | Vienna + SNO | SNAME | CITY +-----+-------+-------- + 2 | Jones | Paris + 3 | Adams | Vienna @@ -1395,11 +1407,11 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. one that creates a new relation (a new table). The syntax of the CREATE TABLE command is: - - CREATE TABLE table_name - (name_of_attr_1 type_of_attr_1 - [, name_of_attr_2 type_of_attr_2 - [, ...]]); + +CREATE TABLE table_name + (name_of_attr_1 type_of_attr_1 + [, name_of_attr_2 type_of_attr_2 + [, ...]]); @@ -1411,23 +1423,23 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. following SQL statements are used: - CREATE TABLE SUPPLIER - (SNO INTEGER, - SNAME VARCHAR(20), - CITY VARCHAR(20)); - +CREATE TABLE SUPPLIER + (SNO INTEGER, + SNAME VARCHAR(20), + CITY VARCHAR(20)); + - - CREATE TABLE PART - (PNO INTEGER, - PNAME VARCHAR(20), - PRICE DECIMAL(4 , 2)); - + +CREATE TABLE PART + (PNO INTEGER, + PNAME VARCHAR(20), + PRICE DECIMAL(4 , 2)); + - - CREATE TABLE SELLS - (SNO INTEGER, - PNO INTEGER); + +CREATE TABLE SELLS + (SNO INTEGER, + PNO INTEGER); @@ -1463,7 +1475,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. q of them right to the decimal point. -(15 ≥ pqq ≥ 0). +(15 ≥ pq ≥ 0). If q is omitted it is assumed to be 0. @@ -1514,8 +1526,8 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. the CREATE INDEX command is used. The syntax is: - CREATE INDEX index_name - ON table_name ( name_of_attribute ); +CREATE INDEX index_name + ON table_name ( name_of_attribute ); @@ -1528,8 +1540,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. we use the following statement: - CREATE INDEX I - ON SUPPLIER (SNAME); +CREATE INDEX I ON SUPPLIER (SNAME); @@ -1578,8 +1589,8 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. is: - CREATE VIEW view_name - AS select_stmt +CREATE VIEW view_name + AS select_stmt where select_stmt @@ -1597,12 +1608,12 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. again): - CREATE VIEW London_Suppliers - AS SELECT S.SNAME, P.PNAME - FROM SUPPLIER S, PART P, SELLS SE - WHERE S.SNO = SE.SNO AND - P.PNO = SE.PNO AND - S.CITY = 'London'; +CREATE VIEW London_Suppliers + AS SELECT S.SNAME, P.PNAME + FROM SUPPLIER S, PART P, SELLS SE + WHERE S.SNO = SE.SNO AND + P.PNO = SE.PNO AND + S.CITY = 'London'; @@ -1612,17 +1623,16 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. if it were another base table: - SELECT * - FROM London_Suppliers - WHERE P.PNAME = 'Screw'; +SELECT * FROM London_Suppliers + WHERE P.PNAME = 'Screw'; which will return the following table: - SNAME | PNAME - -------+------- - Smith | Screw + SNAME | PNAME +-------+------- + Smith | Screw @@ -1646,7 +1656,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. DROP TABLE command is used: - DROP TABLE table_name; +DROP TABLE table_name; @@ -1654,7 +1664,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. To destroy the SUPPLIER table use the following statement: - DROP TABLE SUPPLIER; +DROP TABLE SUPPLIER; @@ -1662,7 +1672,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. The DROP INDEX command is used to destroy an index: - DROP INDEX index_name; +DROP INDEX index_name; @@ -1670,7 +1680,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. Finally to destroy a given view use the command DROP VIEW: - DROP VIEW view_name; +DROP VIEW view_name; @@ -1689,10 +1699,9 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. The syntax is: - INSERT INTO table_name (name_of_attr_1 - [, name_of_attr_2 [,...]]) - VALUES (val_attr_1 - [, val_attr_2 [, ...]]); +INSERT INTO table_name (name_of_attr_1 + [, name_of_attr_2 [,...]]) + VALUES (val_attr_1 [, val_attr_2 [, ...]]); @@ -1702,8 +1711,8 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. following statement: - INSERT INTO SUPPLIER (SNO, SNAME, CITY) - VALUES (1, 'Smith', 'London'); +INSERT INTO SUPPLIER (SNO, SNAME, CITY) + VALUES (1, 'Smith', 'London'); @@ -1711,8 +1720,8 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. To insert the first tuple into the relation SELLS we use: - INSERT INTO SELLS (SNO, PNO) - VALUES (1, 1); +INSERT INTO SELLS (SNO, PNO) + VALUES (1, 1); @@ -1725,10 +1734,10 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. UPDATE command is used. The syntax is: - UPDATE table_name - SET name_of_attr_1 = value_1 - [, ... [, name_of_attr_k = value_k]] - WHERE condition; +UPDATE table_name + SET name_of_attr_1 = value_1 + [, ... [, name_of_attr_k = value_k]] + WHERE condition; @@ -1737,9 +1746,9 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. relation PART we use: - UPDATE PART - SET PRICE = 15 - WHERE PNAME = 'Screw'; +UPDATE PART + SET PRICE = 15 + WHERE PNAME = 'Screw'; @@ -1757,8 +1766,8 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. FROM. The syntax is: - DELETE FROM table_name - WHERE condition; +DELETE FROM table_name + WHERE condition; @@ -1767,8 +1776,8 @@ The only tuple returned by both parts of the query is the one having $SNO=2$. following statement is used: - DELETE FROM SUPPLIER - WHERE SNAME = 'Smith'; +DELETE FROM SUPPLIER + WHERE SNAME = 'Smith';