Fix up typos.
authorThomas G. Lockhart
Wed, 14 Jun 2000 13:10:48 +0000 (13:10 +0000)
committerThomas G. Lockhart
Wed, 14 Jun 2000 13:10:48 +0000 (13:10 +0000)
Move "query result" tables to left side of page (remove leading spaces).

doc/src/sgml/sql.sgml

index f61b085c2ff329b0a667445e76222d464a9050b5..054b2fba730b2e645cd0fdf3f95a11ab44afba23 100644 (file)
@@ -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,
-   R ∪ S is the
+   R ∩ S 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 ≥ p ≥ qq ≥ 0).
+(15 ≥ p ≥ q ≥ 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';