home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / sqlfun.zip / COURSE.SQL < prev   
Text File  |  1993-10-25  |  16KB  |  597 lines

  1.    ---------------------------------------------------
  2.    ---  Date:        Oct-93                        ---
  3.    ---  Author:      Graeme Birchall               ---
  4.    ---  Address:     35 River Drive South #1214    ---
  5.    ---               Jersey City NJ 07310          ---
  6.    ---  Ph/Fax:      (201)-963-0071                --- 
  7.    ---  Compuserve   73540,1566                    ---
  8.    ---  Purpose:     DB2/2 Course - Sample DDL     ---
  9.    ---                            - Exercise SQL   ---
  10.    ---------------------------------------------------
  11.  
  12.    CREATE TABLE BASE_TABLE
  13.      (U1     SMALLINT  NOT NULL,
  14.       U2     CHAR(02)  NOT NULL,
  15.       U3     CHAR(02)  NOT NULL,
  16.       D1     SMALLINT  NOT NULL,
  17.       D2     CHAR(01)  NOT NULL,
  18.       DATE1  DATE      NOT NULL);
  19.    COMMIT;
  20.  
  21.    INSERT INTO BASE_TABLE VALUES (0,'C0','W0',9,'J','0001-01-01');
  22.    INSERT INTO BASE_TABLE VALUES (1,'C1','W1',8,'I','0001-01-01');
  23.    INSERT INTO BASE_TABLE VALUES (2,'C2','W2',7,'H','0001-01-01');
  24.    INSERT INTO BASE_TABLE VALUES (3,'C3','W3',6,'G','0001-01-01');
  25.    INSERT INTO BASE_TABLE VALUES (4,'C4','W4',5,'F','0001-01-01');
  26.    INSERT INTO BASE_TABLE VALUES (5,'C5','W5',4,'E','0001-01-01');
  27.    INSERT INTO BASE_TABLE VALUES (6,'C6','W6',3,'D','0001-01-01');
  28.    INSERT INTO BASE_TABLE VALUES (7,'C7','W7',2,'C','0001-01-01');
  29.    INSERT INTO BASE_TABLE VALUES (8,'C8','W8',1,'B','0001-01-01');
  30.    INSERT INTO BASE_TABLE VALUES (9,'C9','W9',0,'A','0001-01-01');
  31.    COMMIT;
  32.  
  33.    CREATE TABLE CITY_TABLE
  34.      (CITY_NUM            INTEGER   NOT NULL,
  35.       CITY_RGN            CHAR(04)  NOT NULL,
  36.       CITY_DATA           CHAR(04)  NOT NULL,
  37.       CITY_PADDING        CHAR(80)  NOT NULL);
  38.    COMMIT;
  39.  
  40.    CREATE UNIQUE INDEX ICITYNUM  ON CITY_TABLE
  41.       (CITY_NUM);
  42.    COMMIT;
  43.  
  44.    CREATE INDEX ICITYNME  ON CITY_TABLE
  45.       (CITY_RGN);
  46.    COMMIT;
  47.  
  48.    INSERT INTO CITY_TABLE
  49.    SELECT U1
  50.          ,' '
  51.          ,D2
  52.          ,'CITY'
  53.    FROM BASE_TABLE;
  54.    COMMIT;
  55.  
  56.    UPDATE CITY_TABLE
  57.    SET    CITY_RGN = 'C0' 
  58.    WHERE  CITY_NUM = CITY_NUM/2 * 2;
  59.  
  60.    UPDATE CITY_TABLE
  61.    SET    CITY_RGN = 'C1'
  62.    WHERE  CITY_NUM <> CITY_NUM/2 * 2;
  63.    COMMIT;
  64.  
  65.    CREATE TABLE WHSE_TABLE
  66.      (CITY_NUM            INTEGER   NOT NULL,
  67.       WHSE_NUM            INTEGER   NOT NULL,
  68.       WHSE_NAME           CHAR(04)  NOT NULL,
  69.       WHSE_SIZE           INTEGER   NOT NULL,
  70.       WHSE_PADDING        CHAR(76)  NOT NULL);
  71.    COMMIT;
  72.  
  73.    CREATE UNIQUE INDEX IWHSENUM  ON WHSE_TABLE
  74.       (CITY_NUM, WHSE_NUM);
  75.    COMMIT;
  76.  
  77.    CREATE UNIQUE INDEX IWHSENME  ON WHSE_TABLE
  78.       (WHSE_NAME);
  79.    COMMIT;
  80.  
  81.    INSERT INTO WHSE_TABLE
  82.    SELECT A.U1
  83.          ,100 + B.U1
  84.          ,SUBSTR(CHAR(A.DATE1 + (A.U1*10 + B.U1) YEARS,ISO),1,4)
  85.          ,100 + A.U1
  86.          ,'WHSE'
  87.    FROM  BASE_TABLE A,
  88.          BASE_TABLE B
  89.    WHERE B.U1 < 4;
  90.    COMMIT;
  91.  
  92.    CREATE TABLE PROD_TABLE
  93.      (PROD_NUM            INTEGER   NOT NULL,
  94.       PROD_NAME           CHAR(04)  NOT NULL,
  95.       PROD_TYPE           CHAR(04)  NOT NULL,
  96.       PROD_COST           INTEGER   NOT NULL,
  97.       PROD_PADDING        CHAR(76)  NOT NULL);
  98.    COMMIT;
  99.  
  100.    CREATE UNIQUE INDEX IPRODNUM  ON PROD_TABLE
  101.       (PROD_NUM);
  102.    COMMIT;
  103.  
  104.    CREATE UNIQUE INDEX IPRODNME  ON PROD_TABLE
  105.       (PROD_NAME);
  106.    COMMIT;
  107.  
  108.    CREATE INDEX IPRODTYP  ON PROD_TABLE
  109.       (PROD_TYPE);
  110.    COMMIT;
  111.  
  112.    INSERT INTO PROD_TABLE
  113.    SELECT  2000 + A.U1*100 + B.U1*10 + C.U1
  114.           ,SUBSTR(CHAR(A.DATE1 + (A.U1*100 + B.U1*10 + C.U1) YEARS,ISO),1,4)
  115.           ,A.D2
  116.           ,2000 + A.U1*10+B.U1
  117.           ,'PROD'
  118.    FROM  BASE_TABLE A,
  119.          BASE_TABLE B,
  120.          BASE_TABLE C
  121.    WHERE B.U1 < 3;
  122.    COMMIT;
  123.  
  124.    UPDATE PROD_TABLE
  125.    SET    PROD_PADDING = 'ABC%DEF'
  126.    WHERE  PROD_NUM     =  2000;
  127.  
  128.    CREATE VIEW PROD_VIEW  (PROD_COST)
  129.        AS   SELECT  AVG(PROD_COST)
  130.        FROM PROD_TABLE;
  131.  
  132.    CREATE TABLE WP_TABLE
  133.      (CITY_NUM            INTEGER   NOT NULL,
  134.       WHSE_NUM            INTEGER   NOT NULL,
  135.       PROD_NUM            INTEGER   NOT NULL,
  136.       QTY                 INTEGER   NOT NULL,
  137.       WP_PADDING          CHAR(76)  NOT NULL);
  138.    COMMIT;
  139.  
  140.    CREATE VIEW WP_VIEW
  141.     (CITY_NUM
  142.     ,NMBR_PROD
  143.     ,SUM_QTY
  144.     ,NMBR_ROWS)
  145.    AS
  146.    SELECT   CITY_NUM
  147.            ,COUNT(DISTINCT PROD_NUM)
  148.            ,SUM(QTY)
  149.            ,COUNT(*)
  150.    FROM     WP_TABLE
  151.    GROUP BY CITY_NUM;
  152.    COMMIT;
  153.  
  154.    INSERT INTO WP_TABLE
  155.    SELECT CITY_NUM
  156.          ,WHSE_NUM
  157.          ,PROD_NUM
  158.          ,WHSE_SIZE + PROD_COST
  159.          ,'WP'
  160.    FROM   WHSE_TABLE,
  161.           PROD_TABLE
  162.    WHERE CITY_NUM IN (0,1);
  163.    COMMIT;
  164.  
  165.    INSERT INTO WP_TABLE
  166.    SELECT CITY_NUM
  167.          ,WHSE_NUM
  168.          ,PROD_NUM
  169.          ,WHSE_SIZE + PROD_COST
  170.          ,'WP'
  171.    FROM   WHSE_TABLE,
  172.           PROD_TABLE
  173.    WHERE CITY_NUM IN (2,3);
  174.    COMMIT;
  175.  
  176.    INSERT INTO WP_TABLE
  177.    SELECT CITY_NUM
  178.          ,WHSE_NUM
  179.          ,PROD_NUM
  180.          ,WHSE_SIZE + PROD_COST
  181.          ,'WP'
  182.    FROM   WHSE_TABLE,
  183.           PROD_TABLE
  184.    WHERE CITY_NUM IN (4,5);
  185.    COMMIT;
  186.  
  187.    INSERT INTO WP_TABLE
  188.    SELECT CITY_NUM
  189.          ,WHSE_NUM
  190.          ,PROD_NUM
  191.          ,WHSE_SIZE + PROD_COST
  192.          ,'WP'
  193.    FROM   WHSE_TABLE,
  194.           PROD_TABLE
  195.    WHERE CITY_NUM IN (6,7);
  196.    COMMIT;
  197.  
  198.    INSERT INTO WP_TABLE
  199.    SELECT CITY_NUM
  200.          ,WHSE_NUM
  201.          ,PROD_NUM
  202.          ,WHSE_SIZE + PROD_COST
  203.          ,'WP'
  204.    FROM   WHSE_TABLE,
  205.           PROD_TABLE
  206.    WHERE CITY_NUM IN (8,9);
  207.    COMMIT;
  208.  
  209.    CREATE UNIQUE INDEX IWPWHSE ON WP_TABLE
  210.       (CITY_NUM, WHSE_NUM, PROD_NUM);
  211.    COMMIT;
  212.  
  213.    CREATE UNIQUE INDEX IWPPROD ON WP_TABLE
  214.       (PROD_NUM, CITY_NUM, WHSE_NUM);
  215.    COMMIT;
  216.  
  217.    CREATE TABLE SALE_TABLE
  218.      (PROD_NUM        INTEGER       NOT NULL,
  219.       SALE_DATE       DATE                  ,
  220.       SALE_TIME       TIME                  ,
  221.       NUM_SOLD        INTEGER               ,
  222.       ITEM_COST       DECIMAL(7,2)          ,
  223.       CUST_NUM        INTEGER               ,
  224.       SALE_PADDING    CHAR(63)              );
  225.    COMMIT;
  226.  
  227.    CREATE VIEW SALE_WEEK
  228.      (PROD_NUM       ,SALE_DATE   ,SALE_TIME
  229.      ,NUM_SOLD       ,ITEM_COST   ,CUST_NUM
  230.      ,SALE_PADDING   ,WEEK_DAY)
  231.    AS SELECT
  232.       PROD_NUM       ,SALE_DATE   ,SALE_TIME
  233.      ,NUM_SOLD       ,ITEM_COST   ,CUST_NUM
  234.      ,SALE_PADDING
  235.      ,((DAYS(SALE_DATE) - DAYS('1993-01-17')) -
  236.      (((DAYS(SALE_DATE) - DAYS('1993-01-17'))/7) * 7)) + 1
  237.    FROM SALE_TABLE;
  238.    COMMIT;
  239.  
  240.    CREATE UNIQUE INDEX ISALENUM  ON SALE_TABLE
  241.       (PROD_NUM
  242.       ,SALE_DATE
  243.       ,SALE_TIME);
  244.    COMMIT;
  245.  
  246.    CREATE INDEX ISALCUST  ON SALE_TABLE
  247.       (CUST_NUM);
  248.    COMMIT;
  249.  
  250.    INSERT INTO SALE_TABLE
  251.    SELECT 2000 + A.U1*100 + B.U1*10 + C.U1
  252.          ,DATE('1994-01-01') + B.U1 MONTHS - A.U1 DAYS
  253.          ,TIME('12.00.00')   - D.U1 HOURS  + C.U1 MINUTES
  254.          ,D.U1*10 + A.U1
  255.          ,A.U1*100 + B.U1*10 + D.U1/100
  256.          ,D.U1*1000 + C.U1*100
  257.          ,'SALE'
  258.    FROM  BASE_TABLE A
  259.         ,BASE_TABLE B
  260.         ,BASE_TABLE C
  261.         ,BASE_TABLE D
  262.    WHERE B.U1 = 0
  263.      AND C.U1 BETWEEN 1 AND 8;
  264.    COMMIT;
  265.  
  266.    INSERT INTO SALE_TABLE
  267.    SELECT 2000 + A.U1*100 + B.U1*10 + C.U1
  268.          ,DATE('1994-01-01') + B.U1 MONTHS - A.U1 DAYS
  269.          ,TIME('12.00.00')   - D.U1 HOURS  + C.U1 MINUTES
  270.          ,D.U1*10 + A.U1
  271.          ,A.U1*100 + B.U1*10 + D.U1/100
  272.          ,D.U1*1000 + C.U1*100
  273.          ,'SALE'
  274.    FROM  BASE_TABLE A
  275.         ,BASE_TABLE B
  276.         ,BASE_TABLE C
  277.         ,BASE_TABLE D
  278.    WHERE B.U1 = 1
  279.      AND C.U1 BETWEEN 1 AND 8;
  280.    COMMIT;
  281.  
  282.    INSERT INTO SALE_TABLE
  283.    SELECT 2000 + A.U1*100 + B.U1*10 + C.U1
  284.          ,DATE('1994-01-01') + B.U1 MONTHS - A.U1 DAYS
  285.          ,TIME('12.00.00')   - D.U1 HOURS  + C.U1 MINUTES
  286.          ,D.U1*10 + A.U1
  287.          ,A.U1*100 + B.U1*10 + D.U1/100
  288.          ,D.U1*1000 + C.U1*100
  289.          ,'SALE'
  290.    FROM  BASE_TABLE A
  291.         ,BASE_TABLE B
  292.         ,BASE_TABLE C
  293.         ,BASE_TABLE D
  294.    WHERE B.U1 = 2
  295.      AND C.U1 BETWEEN 1 AND 8;
  296.    COMMIT;
  297.  
  298.    UPDATE SALE_TABLE
  299.    SET    CUST_NUM = NULL
  300.    WHERE  PROD_NUM - (PROD_NUM/10*10) BETWEEN 3 AND 4;
  301.    COMMIT;
  302.  
  303.    UPDATE SALE_TABLE
  304.    SET    CUST_NUM  = NULL
  305.          ,NUM_SOLD  = NULL
  306.    WHERE  PROD_NUM - (PROD_NUM/10*10) BETWEEN 5 AND 6;
  307.    COMMIT;
  308.  
  309.    UPDATE SALE_TABLE
  310.    SET    CUST_NUM  = NULL
  311.          ,NUM_SOLD  = NULL
  312.          ,ITEM_COST = NULL
  313.    WHERE  PROD_NUM - (PROD_NUM/10*10) BETWEEN 7 AND 8;
  314.    COMMIT;
  315.  
  316.    ---------------------------------------------------
  317.    ---    CHAPTER 2, EXERCISE SQL SAMPLES          ---
  318.    ---------------------------------------------------
  319.  
  320.    SELECT COUNT(*)
  321.    FROM   SALE_TABLE
  322.    WHERE  CUST_NUM IS NULL;
  323.  
  324.    SELECT COUNT(*)
  325.    FROM   SALE_TABLE
  326.    WHERE  DAY(SALE_DATE) IN (1,11,21,31);
  327.  
  328.    SELECT COUNT(DISTINCT WHSE_NUM)
  329.    FROM   WP_TABLE
  330.    WHERE  CITY_NUM < 2;
  331.  
  332.    SELECT AVG(PROD_NUM) 
  333.          ,AVG(DISTINCT PROD_NUM)
  334.    FROM   SALE_TABLE;
  335.  
  336.    SELECT INTEGER(SUM(NUM_SOLD))
  337.          ,DECIMAL(SUM(NUM_SOLD))
  338.          ,FLOAT(SUM(NUM_SOLD))
  339.    FROM   SALE_TABLE;
  340.  
  341.    SELECT COUNT(*)
  342.    FROM   SALE_TABLE
  343.    WHERE  MONTH(SALE_DATE) = 12
  344.      AND  HOUR(SALE_TIME)  =  9
  345.      AND  NUM_SOLD IS NOT NULL;
  346.  
  347.    SELECT COUNT(*)
  348.    FROM   PROD_TABLE
  349.    WHERE  PROD_TYPE LIKE '%J%'
  350.      AND  PROD_PADDING LIKE 'P%'
  351.      AND  LENGTH(PROD_PADDING)  >  3
  352.      AND  SUBSTR(PROD_NAME,2,1) < 'A';
  353.  
  354.    SELECT AVG(CITY_NUM)
  355.          ,AVG(CITY_NUM * 1.0)
  356.    FROM   CITY_TABLE;
  357.  
  358.    SELECT CHAR(SALE_DATE,USA)
  359.          ,CHAR(SALE_DATE,EUR)
  360.          ,DAY(SALE_DATE)
  361.          ,DECIMAL(DAY(SALE_DATE),2,0)
  362.          ,TIMESTAMP(SALE_DATE,SALE_TIME)
  363.    FROM   SALE_TABLE
  364.    WHERE  PROD_NUM = 2001
  365.      AND  HOUR(SALE_TIME) = 3;
  366.  
  367.    SELECT SALE_DATE
  368.          ,SALE_DATE + 10 YEARS + 2 MONTHS + 5 DAYS
  369.          ,SALE_DATE + DECIMAL(00100205,8,0)
  370.          ,DAYS('1995-12-31') - DAYS(SALE_DATE)
  371.          ,DAY(SALE_DATE) * HOUR(SALE_TIME)
  372.    FROM   SALE_TABLE
  373.    WHERE  PROD_NUM = 2001
  374.      AND  HOUR(SALE_TIME) = 3;
  375.  
  376.    SELECT SALE_DATE
  377.          ,CHAR(SALE_DATE,ISO)
  378.          ,SUBSTR(CHAR(SALE_DATE,ISO),1,7)
  379.          ,FLOAT(CUST_NUM)
  380.    FROM   SALE_TABLE
  381.    WHERE  PROD_NUM = 2001
  382.      AND  HOUR(SALE_TIME) = 3;
  383.  
  384.    SELECT COUNT(*)
  385.    FROM   SALE_TABLE
  386.    WHERE  PROD_NUM  BETWEEN 2000 AND 3000
  387.      AND  SALE_DATE > '1991-12-31'
  388.      AND  SALE_TIME BETWEEN '03.00.00' AND '06.00.00'
  389.      AND  SALE_PADDING LIKE '_A%';
  390.  
  391.    SELECT PROD_NUM
  392.          ,SUBSTR(PROD_PADDING,1,4)
  393.          ,TRANSLATE(SUBSTR(PROD_PADDING,1,4),'D','P')
  394.          ,TRANSLATE(SUBSTR(PROD_PADDING,1,4),'DQ','PR')
  395.          ,TRANSLATE(SUBSTR(PROD_PADDING,1,4),'DP','PD')
  396.          ,TRANSLATE(SUBSTR(PROD_PADDING,1,4),'D','P','Z')
  397.    FROM   PROD_TABLE
  398.    WHERE  PROD_NUM  < 2009
  399.      AND  PROD_TYPE IN ('J','K','L','M')
  400.      AND  PROD_NAME <> ''''
  401.      AND  PROD_PADDING LIKE '% %'
  402.      AND  TRANSLATE(PROD_PADDING,'$@','%$') NOT LIKE '%$%';
  403.  
  404.    ---------------------------------------------------
  405.    ---    CHAPTER 3, EXERCISE SQL SAMPLES          ---
  406.    ---------------------------------------------------
  407.  
  408.    SELECT   PROD_NUM
  409.            ,COUNT(*)
  410.    FROM     SALE_TABLE
  411.    WHERE    PROD_NUM < 2010
  412.      AND    CUST_NUM IS NOT NULL
  413.    GROUP BY PROD_NUM
  414.    HAVING   COUNT(DISTINCT SALE_DATE) = 1;
  415.  
  416.    SELECT   PROD_NUM
  417.            ,COUNT(*)
  418.    FROM     SALE_TABLE
  419.    WHERE    PROD_NUM < 2010
  420.      AND    CUST_NUM IS NULL
  421.    GROUP BY PROD_NUM
  422.    HAVING   COUNT(*) > 5
  423.       AND   COUNT(DISTINCT SALE_DATE) = 1
  424.       AND   AVG(HOUR(SALE_TIME)) > 4;
  425.  
  426.    SELECT   *
  427.    FROM     SALE_TABLE A
  428.    WHERE    PROD_NUM  < 2005
  429.      AND    ITEM_COST < 10
  430.      AND    SALE_TIME < '05.00.00'
  431.      AND    1 <
  432.            (SELECT COUNT(DISTINCT CUST_NUM)
  433.             FROM   SALE_TABLE B
  434.             WHERE  A.PROD_NUM = B.PROD_NUM
  435.               AND  B.CUST_NUM IS NOT NULL);
  436.  
  437.    SELECT   COUNT(*)
  438.            ,COUNT(DISTINCT A.PROD_TYPE)
  439.    FROM     PROD_TABLE A
  440.            ,SALE_TABLE B
  441.    WHERE    A.PROD_NUM = B.PROD_NUM
  442.      AND    A.PROD_TYPE LIKE 'J%'
  443.      AND    B.SALE_TIME < '11.00.00';
  444.  
  445.    SELECT   COUNT(*)
  446.    FROM     PROD_TABLE A
  447.    WHERE    PROD_NUM BETWEEN 2000 AND 2100
  448.      AND    5 <
  449.            (SELECT COUNT(*)
  450.             FROM   SALE_TABLE B
  451.             WHERE  A.PROD_NUM = B.PROD_NUM)
  452.      AND    10 <
  453.            (SELECT COUNT(*)
  454.             FROM   WP_TABLE C
  455.             WHERE  A.PROD_NUM = C.PROD_NUM);
  456.  
  457.    SELECT   COUNT(*)
  458.    FROM     PROD_TABLE
  459.    WHERE    PROD_NUM NOT IN
  460.            (SELECT PROD_NUM
  461.             FROM   SALE_TABLE);
  462.  
  463.    SELECT   COUNT(*)
  464.    FROM     PROD_TABLE A
  465.    WHERE    PROD_NUM NOT IN
  466.            (SELECT B.PROD_NUM
  467.             FROM   SALE_TABLE B
  468.             WHERE  A.PROD_NUM = B.PROD_NUM);
  469.  
  470.    SELECT  'NULL'
  471.            ,COUNT(*)
  472.    FROM     SALE_TABLE A
  473.    WHERE    CUST_NUM IS NULL
  474.    UNION
  475.    SELECT  'NOT NULL'
  476.            ,COUNT(*)
  477.    FROM     SALE_TABLE A
  478.    WHERE    CUST_NUM IS NOT NULL;
  479.  
  480.    SELECT   PROD_NUM
  481.    FROM     PROD_TABLE
  482.    WHERE    PROD_TYPE = 'J'
  483.    EXCEPT
  484.    SELECT   PROD_NUM
  485.    FROM     SALE_TABLE;
  486.  
  487.    SELECT CITY_NUM
  488.    FROM   CITY_TABLE
  489.    INTERSECT
  490.    SELECT CITY_NUM
  491.    FROM   WHSE_TABLE
  492.    WHERE  WHSE_SIZE < 104
  493.    EXCEPT
  494.    SELECT CITY_NUM
  495.    FROM   WHSE_TABLE
  496.    WHERE  WHSE_NAME > '0033'
  497.    UNION ALL
  498.    SELECT CITY_NUM
  499.    FROM   WHSE_TABLE
  500.    WHERE  WHSE_SIZE > 108
  501.    ORDER BY 1 DESC;
  502.  
  503.    ---------------------------------------------------
  504.    ---    CHAPTER 4, EXERCISE SQL SAMPLES          ---
  505.    ---------------------------------------------------
  506.  
  507.    SELECT   PROD_NUM
  508.    FROM     SALE_TABLE
  509.    GROUP BY PROD_NUM
  510.    HAVING   COUNT(*) > 8
  511.       AND   COUNT(DISTINCT CUST_NUM) > 3
  512.       AND  (AVG(NUM_SOLD)  > 40
  513.        OR   MAX(CUST_NUM)  < 9999)
  514.       AND   MIN(SALE_TIME) < '23.00.00'
  515.       AND   AVG(NUM_SOLD)  < 47
  516.    ORDER BY PROD_NUM DESC;
  517.  
  518.    SELECT  *
  519.    FROM    PROD_TABLE A
  520.    WHERE   PROD_NUM < 2100
  521.      AND ( SUBSTR(PROD_TYPE,4,1) = '0'
  522.       OR   EXISTS
  523.           (SELECT *
  524.            FROM   SALE_TABLE B
  525.            WHERE  A.PROD_NUM = B.PROD_NUM
  526.              AND  B.CUST_NUM IS NOT NULL) );
  527.  
  528.    SELECT   D.PROD_TYPE
  529.            ,A.CITY_RGN
  530.            ,B.*
  531.    FROM     CITY_TABLE A
  532.            ,WHSE_TABLE B
  533.            ,WP_TABLE   C
  534.            ,PROD_TABLE D
  535.    WHERE    A.CITY_DATA = 'A'
  536.      AND    A.CITY_NUM  = B.CITY_NUM
  537.      AND  ( B.WHSE_NAME = '0093'
  538.       OR    B.WHSE_SIZE < 22 )
  539.      AND    B.CITY_NUM  = C.CITY_NUM
  540.      AND    B.WHSE_NUM  = C.WHSE_NUM
  541.      AND    C.QTY       < 2222
  542.      AND    C.PROD_NUM  = D.PROD_NUM
  543.      AND    D.PROD_TYPE = 'J'
  544.      AND    EXISTS
  545.            (SELECT *
  546.             FROM   SALE_TABLE E
  547.             WHERE  D.PROD_NUM  = E.PROD_NUM
  548.               AND  E.SALE_DATE > DATE('1992246')
  549.               AND  E.CUST_NUM IS NOT NULL);
  550.  
  551.    SELECT   *
  552.    FROM     SALE_TABLE A
  553.    WHERE    PROD_NUM < 2020
  554.      AND (  CUST_NUM IN
  555.            (SELECT MAX(CUST_NUM)
  556.             FROM   SALE_TABLE B
  557.             WHERE  A.PROD_NUM = B.PROD_NUM)
  558.      OR     CUST_NUM IN
  559.            (SELECT MIN(CUST_NUM)
  560.             FROM   SALE_TABLE B
  561.             WHERE  A.PROD_NUM = B.PROD_NUM) )
  562.    ORDER BY PROD_NUM
  563.            ,SALE_TIME;
  564.  
  565.    SELECT   CITY_NUM
  566.            ,CITY_RGN
  567.            ,SUBSTR(CITY_RGN,LENGTH(CITY_RGN)-2,1)
  568.    FROM     CITY_TABLE;
  569.  
  570.    SELECT   DECIMAL(PROD_NUM,8,3)
  571.            ,CHAR(SALE_DATE,USA)
  572.            ,DECIMAL(MINUTE(SALE_TIME),2,0)
  573.            ,SUBSTR(SALE_PADDING,1,4)
  574.            ,NUM_SOLD * 16
  575.    FROM     SALE_TABLE
  576.    WHERE    PROD_NUM   < 2010
  577.      AND    PROD_NUM   < YEAR(SALE_DATE + 100 YEARS)
  578.      AND    HOUR(SALE_TIME)           > MINUTE(SALE_TIME)
  579.      AND    YEAR(CURRENT DATE)        < 1997
  580.      AND    CURRENT SERVER           <> 'FRED';
  581.  
  582.    SELECT AVG(WHSE_SIZE)
  583.    FROM   WHSE_TABLE;
  584.  
  585.    SELECT AVG(WHSE_SIZE * 1.0)
  586.    FROM   WHSE_TABLE;
  587.  
  588.    SELECT *
  589.    FROM   WHSE_TABLE
  590.    WHERE  CITY_NUM =
  591.          (SELECT MAX(CITY_NUM)
  592.           FROM   WHSE_TABLE
  593.           WHERE  CITY_NUM <
  594.                 (SELECT MAX(CITY_NUM)
  595.                  FROM   WHSE_TABLE));
  596.  
  597.