《SQL for MySQL developers 》中的示例SQL语句

本文转自:http://www.r20.nl/SQLforMySQL_V1_All_SQL_Statements.txt

 

Example 4.1:



CREATE USER 'BOOKSQL'@'localhost' IDENTIFIED BY 'BOOKSQLPW'



Example 4.2:



GRANT ALL PRIVILEGES

ON    *.*

TO    'BOOKSQL'@'localhost'

WITH  GRANT OPTION



Example 4.3:



CREATE DATABASE TENNIS



Example 4.4:



USE TENNIS



Example 4.5:



CREATE   TABLE PLAYERS

        (PLAYERNO       INTEGER      NOT NULL,

         NAME           CHAR(15)     NOT NULL,

         INITIALS       CHAR(3)      NOT NULL,

         BIRTH_DATE     DATE                 ,

         SEX            CHAR(1)      NOT NULL,

         JOINED         SMALLINT     NOT NULL,

         STREET         VARCHAR(30)  NOT NULL,

         HOUSENO        CHAR(4)              ,

         POSTCODE       CHAR(6)              ,

         TOWN           VARCHAR(30)  NOT NULL,

         PHONENO        CHAR(13)             ,

         LEAGUENO       CHAR(4)              ,

         PRIMARY KEY    (PLAYERNO)           )

;

CREATE   TABLE TEAMS

        (TEAMNO         INTEGER      NOT NULL,

         PLAYERNO       INTEGER      NOT NULL,

         DIVISION       CHAR(6)      NOT NULL,

         PRIMARY KEY    (TEAMNO)             )

;

CREATE   TABLE MATCHES

        (MATCHNO        INTEGER      NOT NULL,

         TEAMNO         INTEGER      NOT NULL,

         PLAYERNO       INTEGER      NOT NULL,

         WON            SMALLINT     NOT NULL,

         LOST           SMALLINT     NOT NULL,

         PRIMARY KEY    (MATCHNO)            )

;

CREATE   TABLE PENALTIES

        (PAYMENTNO      INTEGER      NOT NULL,

         PLAYERNO       INTEGER      NOT NULL,

         PAYMENT_DATE   DATE         NOT NULL,

         AMOUNT         DECIMAL(7,2) NOT NULL,

         PRIMARY KEY    (PAYMENTNO)          )

;

CREATE   TABLE COMMITTEE_MEMBERS

        (PLAYERNO       INTEGER      NOT NULL,

         BEGIN_DATE     DATE         NOT NULL,

         END_DATE       DATE                 ,

         POSITION       CHAR(20)             ,

         PRIMARY KEY    (PLAYERNO, BEGIN_DATE))



Example 4.6:



INSERT INTO PLAYERS VALUES (

  2, 'Everett', 'R', '1948-09-01', 'M', 1975, 'Stoney Road',

    '43', '3575NH', 'Stratford', '070-237893', '2411')

;

INSERT INTO PLAYERS VALUES (

  6, 'Parmenter', 'R', '1964-06-25', 'M', 1977, 'Haseltine Lane',

    '80', '1234KK', 'Stratford', '070-476537', '8467')

;

INSERT INTO PLAYERS VALUES (

  7, 'Wise', 'GWS', '1963-05-11', 'M', 1981, 'Edgecombe Way',

    '39', '9758VB', 'Stratford', '070-347689', NULL)

;

INSERT INTO PLAYERS VALUES (

  8, 'Newcastle', 'B', '1962-07-08', 'F', 1980, 'Station Road',

    '4', '6584WO', 'Inglewood', '070-458458', '2983')

;

INSERT INTO PLAYERS VALUES (

 27, 'Collins', 'DD', '1964-12-28', 'F', 1983, 'Long Drive',

    '804', '8457DK', 'Eltham', '079-234857', '2513')

;

INSERT INTO PLAYERS VALUES (

 28, 'Collins', 'C', '1963-06-22', 'F', 1983, 'Old Main Road',

    '10', '1294QK', 'Midhurst', '010-659599', NULL)

;

INSERT INTO PLAYERS VALUES (

 39, 'Bishop', 'D', '1956-10-29', 'M', 1980, 'Eaton Square',

    '78', '9629CD', 'Stratford', '070-393435', NULL)

;

INSERT INTO PLAYERS VALUES (

 44, 'Baker', 'E', '1963-01-09', 'M', 1980, 'Lewis Street',

    '23', '4444LJ', 'Inglewood', '070-368753', '1124')

;

INSERT INTO PLAYERS VALUES (

 57, 'Brown', 'M', '1971-08-17', 'M', 1985, 'Edgecombe Way',

    '16', '4377CB', 'Stratford', '070-473458', '6409')

;

INSERT INTO PLAYERS VALUES (

 83, 'Hope', 'PK', '1956-11-11', 'M', 1982, 'Magdalene Road',

    '16A', '1812UP', 'Stratford', '070-353548', '1608')

;

INSERT INTO PLAYERS VALUES (

 95, 'Miller', 'P', '1963-05-14', 'M', 1972, 'High Street',

    '33A', '5746OP', 'Douglas', '070-867564', NULL)

;

INSERT INTO PLAYERS VALUES (

100, 'Parmenter', 'P', '1963-02-28', 'M', 1979, 'Haseltine Lane',

    '80', '6494SG', 'Stratford', '070-494593', '6524')

;

INSERT INTO PLAYERS VALUES (

104, 'Moorman', 'D', '1970-05-10', 'F', 1984, 'Stout Street',

    '65', '9437AO', 'Eltham', '079-987571', '7060')

;

INSERT INTO PLAYERS VALUES (

112, 'Bailey', 'IP', '1963-10-01', 'F', 1984, 'Vixen Road',

    '8', '6392LK', 'Plymouth', '010-548745', '1319')

;

INSERT INTO TEAMS VALUES (1,  6, 'first')

;

INSERT INTO TEAMS VALUES (2, 27, 'second')

;

INSERT INTO MATCHES VALUES ( 1, 1,   6, 3, 1)

;

INSERT INTO MATCHES VALUES ( 2, 1,   6, 2, 3)

;

INSERT INTO MATCHES VALUES ( 3, 1,   6, 3, 0)

;

INSERT INTO MATCHES VALUES ( 4, 1,  44, 3, 2)

;

INSERT INTO MATCHES VALUES ( 5, 1,  83, 0, 3)

;

INSERT INTO MATCHES VALUES ( 6, 1,   2, 1, 3)

;

INSERT INTO MATCHES VALUES ( 7, 1,  57, 3, 0)

;

INSERT INTO MATCHES VALUES ( 8, 1,   8, 0, 3)

;

INSERT INTO MATCHES VALUES ( 9, 2,  27, 3, 2)

;

INSERT INTO MATCHES VALUES (10, 2, 104, 3, 2)

;

INSERT INTO MATCHES VALUES (11, 2, 112, 2, 3)

;

INSERT INTO MATCHES VALUES (12, 2, 112, 1, 3)

;

INSERT INTO MATCHES VALUES (13, 2,   8, 0, 3)

;

INSERT INTO PENALTIES VALUES (1,  6, '1980-12-08',100)

;

INSERT INTO PENALTIES VALUES (2, 44, '1981-05-05', 75)

;

INSERT INTO PENALTIES VALUES (3, 27, '1983-09-10',100)

;

INSERT INTO PENALTIES VALUES (4,104, '1984-12-08', 50)

;

INSERT INTO PENALTIES VALUES (5, 44, '1980-12-08', 25)

;

INSERT INTO PENALTIES VALUES (6,  8, '1980-12-08', 25)

;

INSERT INTO PENALTIES VALUES (7, 44, '1982-12-30', 30)

;

INSERT INTO PENALTIES VALUES (8, 27, '1984-11-12', 75)

;

INSERT INTO COMMITTEE_MEMBERS VALUES (  6, '1990-01-01', '1990-12-31', 'Secretary')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (  6, '1991-01-01', '1992-12-31', 'Member')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (  6, '1992-01-01', '1993-12-31', 'Treasurer')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (  6, '1993-01-01',  NULL, 'Chairman')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (  2, '1990-01-01', '1992-12-31', 'Chairman')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (  2, '1994-01-01',  NULL, 'Member')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (112, '1992-01-01', '1992-12-31', 'Member')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (112, '1994-01-01',  NULL, 'Secretary')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (  8, '1990-01-01', '1990-12-31', 'Treasurer')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (  8, '1991-01-01', '1991-12-31', 'Secretary')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (  8, '1993-01-01', '1993-12-31', 'Member')

;

INSERT INTO COMMITTEE_MEMBERS VALUES (  8, '1994-01-01',  NULL, 'Member')

;

INSERT INTO COMMITTEE_MEMBERS VALUES ( 57, '1992-01-01', '1992-12-31', 'Secretary')

;

INSERT INTO COMMITTEE_MEMBERS VALUES ( 27, '1990-01-01', '1990-12-31', 'Member')

;

INSERT INTO COMMITTEE_MEMBERS VALUES ( 27, '1991-01-01', '1991-12-31', 'Treasurer')

;

INSERT INTO COMMITTEE_MEMBERS VALUES ( 27, '1993-01-01', '1993-12-31', 'Treasurer')

;

INSERT INTO COMMITTEE_MEMBERS VALUES ( 95, '1994-01-01',  NULL, 'Treasurer')



Example 4.7:



SELECT   PLAYERNO, NAME, BIRTH_DATE

FROM     PLAYERS

WHERE    TOWN = 'Stratford'

ORDER BY NAME



Example 4.8:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    JOINED > 1980

AND      TOWN = 'Stratford'

ORDER BY PLAYERNO



Example 4.9:



SELECT   *

FROM     PENALTIES



Example 4.10:



SELECT   33 * 121



Example 4.11:



UPDATE   PENALTIES

SET      AMOUNT = 200

WHERE    PLAYERNO = 44

;

SELECT   PLAYERNO, AMOUNT

FROM     PENALTIES

WHERE    PLAYERNO = 44



Example 4.12:



DELETE

FROM     PENALTIES

WHERE    AMOUNT > 100



Example 4.13:



CREATE   INDEX PENALTIES_AMOUNT ON

         PENALTIES (AMOUNT)



Example 4.14:



CREATE   VIEW NUMBER_SETS (MATCHNO, DIFFERENCE) AS

SELECT   MATCHNO, ABS(WON - LOST)

FROM     MATCHES

;

SELECT   *

FROM     NUMBER_SETS



Example 4.15:



GRANT   SELECT

ON      PLAYERS

TO      DIANE

;

GRANT   SELECT, UPDATE

ON      PLAYERS

TO      PAUL

;

GRANT   SELECT, UPDATE

ON      TEAMS

TO      PAUL

;

SELECT   *

FROM     TEAMS



Example 4.16:



DROP TABLE MATCHES



Example 4.17:



DROP VIEW NUMBER_SETS



Example 4.18:



DROP INDEX PENALTIES_AMOUNT



Example 4.19:



DROP DATABASE TENNIS



Example 4.20:



SELECT @@VERSION



Example 4.21:



SET @@SQL_MODE = 'PIPES_AS_CONCAT'



Example 4.22:



SET @@SQL_MODE = CONCAT(@@SQL_MODE,

                 CASE @@SQL_MODE WHEN '' THEN '' ELSE ',' END,

                 'NO_ZERO_IN_DATE')



Example 4.23:



CREATE   OR REPLACE VIEW USERS

        (USER_NAME) AS

SELECT   DISTINCT UPPER(CONCAT('''',USER,'''@''',HOST,''''))

FROM     MYSQL.USER

;

CREATE   OR REPLACE VIEW TABLES

        (TABLE_CREATOR, TABLE_NAME,

         CREATE_TIMESTAMP, COMMENT) AS

SELECT   UPPER(TABLE_SCHEMA), UPPER(TABLE_NAME), 

         CREATE_TIME, TABLE_COMMENT

FROM     INFORMATION_SCHEMA.TABLES

WHERE    TABLE_TYPE IN ('BASE TABLE','TEMPORARY')

;

CREATE   OR REPLACE VIEW COLUMNS

        (TABLE_CREATOR, TABLE_NAME, COLUMN_NAME,

         COLUMN_NO, DATA_TYPE, CHAR_LENGTH,

        `PRECISION`, SCALE, NULLABLE, COMMENT) AS

SELECT   UPPER(TABLE_SCHEMA), UPPER(TABLE_NAME),

         UPPER(COLUMN_NAME), ORDINAL_POSITION,

         UPPER(DATA_TYPE), CHARACTER_MAXIMUM_LENGTH,

         NUMERIC_PRECISION, NUMERIC_SCALE, IS_NULLABLE,

         COLUMN_COMMENT

FROM     INFORMATION_SCHEMA.COLUMNS

;

CREATE   OR REPLACE VIEW VIEWS

        (VIEW_CREATOR, VIEW_NAME, CREATE_TIMESTAMP,

         WITHCHECKOPT, IS_UPDATABLE, VIEWFORMULA, COMMENT) AS

SELECT   UPPER(V.TABLE_SCHEMA), UPPER(V.TABLE_NAME),

         T.CREATE_TIME,

         CASE

            WHEN V.CHECK_OPTION = 'None' THEN 'NO'

            WHEN V.CHECK_OPTION = 'Cascaded' THEN 'CASCADED'

            WHEN V.CHECK_OPTION = 'Local' THEN 'LOCAL'

            ELSE 'Yes'

         END, V.IS_UPDATABLE, V.VIEW_DEFINITION, T.TABLE_COMMENT

FROM     INFORMATION_SCHEMA.VIEWS AS V,

         INFORMATION_SCHEMA.TABLES AS T

WHERE    V.TABLE_NAME = T.TABLE_NAME

AND      V.TABLE_SCHEMA = T.TABLE_SCHEMA

;

CREATE   OR REPLACE VIEW INDEXES

        (INDEX_CREATOR, INDEX_NAME, CREATE_TIMESTAMP,

         TABLE_CREATOR, TABLE_NAME, UNIQUE_ID, INDEX_TYPE) AS

SELECT   DISTINCT UPPER(I.INDEX_SCHEMA), UPPER(I.INDEX_NAME),

         T.CREATE_TIME, UPPER(I.TABLE_SCHEMA),

         UPPER(I.TABLE_NAME),

         CASE

            WHEN I.NON_UNIQUE = 0 THEN 'YES'

            ELSE 'NO'

         END,

         I.INDEX_TYPE

FROM     INFORMATION_SCHEMA.STATISTICS AS I,

         INFORMATION_SCHEMA.TABLES AS T

WHERE    I.TABLE_NAME = T.TABLE_NAME

AND      I.TABLE_SCHEMA = T.TABLE_SCHEMA

;

CREATE   OR REPLACE VIEW COLUMNS_IN_INDEX

        (INDEX_CREATOR, INDEX_NAME,

         TABLE_CREATOR, TABLE_NAME, COLUMN_NAME,

         COLUMN_SEQ, ORDERING) AS

SELECT   UPPER(INDEX_SCHEMA), UPPER(INDEX_NAME),

         UPPER(TABLE_SCHEMA), UPPER(TABLE_NAME),

         UPPER(COLUMN_NAME), SEQ_IN_INDEX,

         CASE

            WHEN COLLATION = 'A' THEN 'ASCENDING'

            WHEN COLLATION = 'D' THEN 'DESCENDING'

            ELSE 'OTHER'

         END

FROM     INFORMATION_SCHEMA.STATISTICS

;

CREATE   OR REPLACE VIEW USER_AUTHS

        (GRANTOR, GRANTEE, PRIVILEGE, WITHGRANTOPT) AS

SELECT   'UNKNOWN', UPPER(GRANTEE), PRIVILEGE_TYPE, IS_GRANTABLE

FROM     INFORMATION_SCHEMA.USER_PRIVILEGES

;

CREATE   OR REPLACE VIEW DATABASE_AUTHS

        (GRANTOR, GRANTEE, DATABASE_NAME, PRIVILEGE,

         WITHGRANTOPT) AS

SELECT   'UNKNOWN', UPPER(GRANTEE), UPPER(TABLE_SCHEMA),

         PRIVILEGE_TYPE, IS_GRANTABLE

FROM     INFORMATION_SCHEMA.SCHEMA_PRIVILEGES

;

CREATE   OR REPLACE VIEW TABLE_AUTHS

        (GRANTOR, GRANTEE, TABLE_CREATOR, TABLE_NAME,

         PRIVILEGE, WITHGRANTOPT) AS

SELECT   'UNKNOWN', UPPER(GRANTEE), UPPER(TABLE_SCHEMA),

         UPPER(TABLE_NAME), PRIVILEGE_TYPE, IS_GRANTABLE

FROM     INFORMATION_SCHEMA.TABLE_PRIVILEGES

;

CREATE   OR REPLACE VIEW COLUMN_AUTHS

        (GRANTOR, GRANTEE, TABLE_CREATOR, TABLE_NAME, 

         COLUMN_NAME, PRIVILEGE, WITHGRANTOPT) AS

SELECT   'UNKNOWN', UPPER(GRANTEE), UPPER(TABLE_SCHEMA),

         UPPER(TABLE_NAME), UPPER(COLUMN_NAME),

         PRIVILEGE_TYPE, IS_GRANTABLE

FROM     INFORMATION_SCHEMA.COLUMN_PRIVILEGES



Example 4.24:



SELECT   COLUMN_NAME, DATA_TYPE, COLUMN_NO

FROM     COLUMNS

WHERE    TABLE_NAME = 'PLAYERS'

AND      TABLE_CREATOR = 'TENNIS'

ORDER BY COLUMN_NO



Example 4.25:



SELECT   INDEX_NAME

FROM     INDEXES

WHERE    TABLE_NAME = 'PENALTIES'

AND      TABLE_CREATOR = 'TENNIS'



Example 4.26:



USE INFORMATION_SCHEMA

;

SELECT   DISTINCT INDEX_NAME

FROM     STATISTICS

WHERE    TABLE_NAME = 'PENALTIES'



Example 4.27:



SELECT   TABLE_NAME

FROM     TABLES

WHERE    TABLE_SCHEMA = 'INFORMATION_SCHEMA'

ORDER BY TABLE_NAME



Example 4.28:



SHOW COLUMNS FROM PLAYERS



Example 4.29:



SHOW INDEX FROM PENALTIES

;

SHOW DATABASES

;

SHOW TABLES

;

SHOW CREATE TABLE PLAYERS

;

SHOW INDEX FROM PLAYERS

;

SHOW GRANTS FOR BOOKSQL@localhost

;

SHOW PRIVILEGES



Example 4.30:



SELECT 10 / 0



Example 5.1:



CREATE TABLE INCORRECT_DATES (COLUMN1 DATE)

;

INSERT INTO INCORRECT_DATES VALUES ('2004-13-12')

;

SELECT   COLUMN1

FROM     INCORRECT_DATES

;

CREATE TABLE TIME_TABLE (COLUMN1 TIME)

;

INSERT INTO TIME_TABLE VALUES ('23:59:59.5912')

;

SELECT COLUMN1 FROM TIME_TABLE



Example 5.2:



CREATE TABLE TZ (COL1 TIMESTAMP)

;

INSERT INTO TZ VALUES ('2005-01-01 12:00:00')

;

SELECT * FROM TZ

;

SET @@TIME_ZONE = '+10:00'

;

SELECT * FROM TZ



Example 5.3:



SELECT @@TIME_ZONE



Example 5.4:



SELECT TRUE, FALSE



Example 5.5:



SELECT   MATCHNO, WON - LOST

FROM     MATCHES

WHERE    WON = LOST + 2



Example 5.6:



SELECT   TEAMNO, DIVISION

FROM     TEAMS



Example 5.7:



SELECT   TEAMNO AS TEAM_NUMBER, DIVISION AS DIVISION_OF_TEAM

FROM     TEAMS



Example 5.8:



SELECT   PAYMENTNO, AMOUNT * 100 AS CENTS

FROM     PENALTIES



Example 5.9:



SELECT   MATCHNO AS PRIMKEY,

         80 AS EIGHTY,

         WON - LOST AS DIFFERENCE,

         TIME('23:59:59') AS ALMOST_MIDNIGHT,

         'TEXT' AS TEXT

FROM     MATCHES

WHERE    MATCHNO <= 4



Example 5.10:



SELECT   PAYMENTNO, AMOUNT * 100 AS CENTS

FROM     PENALTIES

GROUP BY CENTS

ORDER BY CENTS



Example 5.11:



SET @PLAYERNO = 7



Example 5.12:



SELECT   NAME, TOWN, POSTCODE

FROM     PLAYERS

WHERE    PLAYERNO < @PLAYERNO



Example 5.13:



SELECT   @PLAYERNO



Example 5.14:



SET @@GLOBAL.SQL_WARNINGS = TRUE



Example 5.15:



SET @@SESSION.DATETIME_FORMAT = '%D-%m-%Y %H:%i:%s'

;

SELECT @@SESSION.DATETIME_FORMAT

;

SELECT @@GLOBAL.DATETIME_FORMAT



Example 5.16:



SET @@SESSION.DATETIME_FORMAT = DEFAULT



Example 5.17:



SELECT   *

FROM     USER_AUTHS

WHERE    GRANTEE = CURRENT_USER



Example 5.18:



SELECT   CURRENT_USER



Example 5.19:



SELECT   *

FROM     PENALTIES

WHERE    PAYMENT_DATE = CURRENT_DATE



Example 5.20:



SELECT   PLAYERNO,

         CASE SEX 

            WHEN 'F' THEN 'Female'

            ELSE 'Male' END AS SEX,

         NAME

FROM     PLAYERS

WHERE    JOINED > 1980

;

SELECT   PLAYERNO,

         CASE SEX 

            WHEN 'F' THEN 'Female' END AS FEMALES,

         NAME

FROM     PLAYERS

WHERE    JOINED > 1980



Example 5.21:



SELECT   PLAYERNO, TOWN, BIRTH_DATE, 

         CASE TOWN 

            WHEN 'Stratford' THEN 0

            WHEN 'Plymouth'  THEN 1

            WHEN 'Inglewood' THEN 2

            ELSE 3 

         END AS P,

         CASE TOWN 

            WHEN 'Stratford' THEN 

               CASE BIRTH_DATE 

                  WHEN '1948-09-01' THEN 'Old Stratforder'

                  ELSE 'Young Stratforder' END

            WHEN 'Inglewood' THEN

               CASE BIRTH_DATE

                  WHEN '1962-07-08' THEN 'Old Inglewooder'

                  ELSE 'Young Inglewooder' END

            ELSE 'Rest' 

         END AS TYPE

FROM     PLAYERS



Example 5.22:



SELECT   PLAYERNO, JOINED,

         CASE

            WHEN JOINED < 1980 THEN 'Seniors'

            WHEN JOINED < 1983 THEN 'Juniors'

            ELSE 'Children' END AS AGE_GROUP

FROM     PLAYERS

ORDER BY JOINED



Example 5.23:



SELECT   PLAYERNO, JOINED, TOWN,

         CASE

            WHEN JOINED >= 1980 AND JOINED <= 1982 

               THEN 'Seniors'

            WHEN TOWN = 'Eltham' 

               THEN 'Elthammers'

            WHEN PLAYERNO < 10 

               THEN 'First members'

            ELSE 'Rest' END

FROM     PLAYERS



Example 5.24:



SELECT   (PLAYERNO), (((NAME)))

FROM     PLAYERS



Example 5.25:



SELECT   PAYMENTNO, YEAR(PAYMENT_DATE)

FROM     PENALTIES

WHERE    YEAR(PAYMENT_DATE) > 1980



Example 5.26:



SELECT   PLAYERNO, CONCAT(LEFT(INITIALS, 1), '. ', NAME) 

         AS FULL_NAME

FROM     PLAYERS

WHERE    LEFT(NAME, 1) = 'B'



Example 5.27:



SELECT   INITIALS, NAME, COALESCE(LEAGUENO, 1)

FROM     PLAYERS

WHERE    Town = 'Stratford'



Example 5.28:



SELECT   PLAYERNO, DAYNAME(BIRTH_DATE),

         MONTHNAME(BIRTH_DATE), DAYOFYEAR(BIRTH_DATE)

FROM     PLAYERS

WHERE    PLAYERNO < 10



Example 5.29:



SELECT   PLAYERNO, BIRTH_DATE, 

         ADDDATE(BIRTH_DATE, INTERVAL 7 DAY)

FROM     PLAYERS

WHERE    DAYNAME(BIRTH_DATE) = 'Saturday'



Example 5.30:



SELECT   PLAYERNO, BEGIN_DATE, END_DATE, 

         DATEDIFF(END_DATE, BEGIN_DATE)

FROM     COMMITTEE_MEMBERS

WHERE    DATEDIFF(END_DATE, BEGIN_DATE) > 500

OR      (END_DATE IS NULL AND 

         DATEDIFF(CURRENT_DATE, BEGIN_DATE) > 500)

ORDER BY PLAYERNO

;

SELECT   PLAYERNO, BEGIN_DATE, END_DATE,

         DATEDIFF(COALESCE(END_DATE, CURRENT_DATE), 

         BEGIN_DATE)

FROM     COMMITTEE_MEMBERS

WHERE    DATEDIFF(COALESCE(END_DATE, CURRENT_DATE), 

         BEGIN_DATE)

         > 500

ORDER BY PLAYERNO



Example 5.31:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    AMOUNT > 50



Example 5.32:



SELECT   CONCAT(RTRIM(NAME), CAST(BIRTH_DATE AS CHAR(10)))

FROM     PLAYERS

WHERE    TOWN = 'Inglewood'



Example 5.33:



UPDATE   PLAYERS

SET      LEAGUENO = NULL

WHERE    PLAYERNO = 2



Example 5.34:



SELECT   TEAMNO, CAST(NULL AS CHAR)

FROM     TEAMS



Example 5.35:



SELECT   MATCHNO, WON, LOST

FROM     MATCHES

WHERE    WON >= LOST * 2



Example 5.36:



SELECT 50 << 2



Example 5.37:



SELECT B'11' << 3



Example 5.38:



SELECT CONV(6,10,2), CONV(10,10,2), BIN(8), BIN(10)



Example 5.39:



SELECT CONV(1001,2,10), CONV(111,2,10)



Example 5.40:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    PLAYERNO & 1



Example 5.41:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO = (PLAYERNO >> 1) << 1



Example 5.42:



SELECT   MATCHNO, TEAMNO, MATCHNO | TEAMNO,

         MATCHNO & TEAMNO, MATCHNO ^ TEAMNO

FROM     MATCHES



Example 5.43:



SELECT   PLAYERNO, TOWN || ' ' || STREET || ' ' || HOUSENO

FROM     PLAYERS

WHERE    TOWN = 'Stratford'



Example 5.44:



SELECT   PAYMENTNO, PAYMENT_DATE, PAYMENT_DATE + INTERVAL 7 DAY

FROM     PENALTIES

WHERE    PAYMENTNO > 5



Example 5.45:



SELECT   PAYMENTNO, PAYMENT_DATE

FROM     PENALTIES

WHERE    PAYMENT_DATE >= '1982-12-25'

AND      PAYMENT_DATE <= '1982-12-25' + INTERVAL 6 DAY



Example 5.46:



SELECT '2004-13-12' + INTERVAL 1 DAY

;

SHOW WARNINGS



Example 5.47:



CREATE   TABLE MATCHES_SPECIAL

        (MATCHNO         INTEGER NOT NULL,

         TEAMNO          INTEGER NOT NULL,

         PLAYERNO        INTEGER NOT NULL,

         WON             SMALLINT NOT NULL,

         LOST            SMALLINT NOT NULL,

         START_DATE      DATE NOT NULL,

         START_TIME      TIME NOT NULL,

         END_TIME        TIME NOT NULL,

         PRIMARY KEY     (MATCHNO))

;

INSERT INTO MATCHES_SPECIAL VALUES 

   (1, 1, 6, 3, 1, '2004-10-25', '14:10:12', '16:50:09')

;

INSERT INTO MATCHES_SPECIAL VALUES 

   (2, 1, 44, 3, 2, '2004-10-25', '17:00:00', '17:55:48')



Example 5.48:



SELECT   MATCHNO, START_TIME,

         ADDTIME(START_TIME, '08:00:00')

FROM     MATCHES_SPECIAL



Example 5.49:



SELECT   MATCHNO, END_TIME

FROM     MATCHES_SPECIAL

WHERE    ADDTIME(END_TIME, '06:30:00') <= '24:00:00'



Example 5.50:



CREATE TABLE TSTAMP (COL1 TIMESTAMP)

;

SET @TIME = TIMESTAMP('1980-12-08 23:59:59.59')

;

INSERT INTO TSTAMP VALUES (@TIME + INTERVAL 3 MICROSECOND)

;

SELECT COL1, COL1 + INTERVAL 3 MICROSECOND FROM TSTAMP



Example 5.51:



SELECT   TEAMNO

FROM     TEAMS

WHERE    TRUE OR FALSE



Example 5.52:



SELECT   PAYMENTNO, PAYMENTNO > 4

FROM     PENALTIES

;

SELECT   PAYMENTNO, CASE PAYMENTNO > 4

                         WHEN 1 THEN 'Greater than 4'

                         ELSE 'Less than 5'

                      END AS GREATER_LESS

FROM     PENALTIES



Example 5.53:



SELECT   PLAYERNO, JOINED, PLAYERNO < 15, JOINED > 1979

FROM     PLAYERS

WHERE    (PLAYERNO < 15) = (JOINED > 1979)



Example 5.54:



INSERT   INTO COMMITTEE_MEMBERS

VALUES   (7 + 15, CURRENT_DATE,

          CURRENT_DATE + INTERVAL 17 DAY, 'Member')



Example 5.55:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    (TOWN, STREET) = ('Stratford', 'Haseltine Lane')



Example 5.56:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    (TOWN, STREET) = (SELECT 'Stratford', 'Haseltine Lane')



Example 5.57:



INSERT INTO PENALTIES VALUES 

   (1,   6, '1980-12-08', 100),

   (2,  44, '1981-05-05',  75),

   (3,  27, '1983-09-10', 100),

   (4, 104, '1984-12-08',  50),

   (5,  44, '1980-12-08',  25),

   (6,   8, '1980-12-08',  25),

   (7,  44, '1982-12-30',  30),

   (8,  27, '1984-11-12',  75)



Answer 5.6:



SELECT   PLAYERS.PLAYERNO, PLAYERS.NAME,

         PLAYERS.INITIALS

FROM     PLAYERS

WHERE    PLAYERS.PLAYERNO > 6

ORDER BY PLAYERS.NAME



Answer 5.12:



SELECT   PLAYERNO

FROM     COMMITTEE_MEMBERS

WHERE    BEGIN_DATE = CURRENT_DATE



Answer 5.13:



SELECT   TEAMNO,

         CASE DIVISION

            WHEN 'first' then 'first division'

            WHEN 'second' THEN 'second division'

            ELSE 'unknown' END AS DIVISION

FROM     TEAMS



Answer 5.14:



SELECT   PAYMENTNO, AMOUNT,

         CASE

            WHEN AMOUNT >= 0 AND AMOUNT <= 40 

               THEN 'low'

            WHEN AMOUNT >= 41 AND AMOUNT <= 80 

               THEN 'moderate'

            WHEN AMOUNT >= 81 

               THEN 'high'

            ELSE 'incorrect' END AS CATEGORY

FROM     PENALTIES



Answer 5.15:



SELECT   PAYMENTNO, AMOUNT

FROM     PENALTIES

WHERE    CASE

            WHEN AMOUNT >= 0 AND AMOUNT <= 40 

               THEN 'low'

            WHEN AMOUNT > 40 AND AMOUNT <= 80 

               THEN 'moderate'

            WHEN AMOUNT > 80

               THEN 'high'

            ELSE 'incorrect' END = 'low'



Answer 5.17:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    DAYNAME(PAYMENT_DATE) = 'Monday'



Answer 5.18:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    YEAR(PAYMENT_DATE) = 1984



Answer 5.25:



SELECT  PLAYERNO, SUBSTR(INITIALS,1,1) || '. ' || NAME

FROM    PLAYERS



Answer 5.26:



SELECT  TEAMNO, RTRIM(DIVISION) || ' division'

FROM    TEAMS



Answer 5.28:



SELECT   PLAYERNO, BEGIN_DATE,

         BEGIN_DATE + INTERVAL 2 MONTH + INTERVAL 3 DAY

FROM     COMMITTEE_MEMBERS



Answer 5.32:



SELECT   PAYMENTNO, PAYMENT_DATE, 

         PAYMENT_DATE + INTERVAL 3 HOUR + 

         INTERVAL 50 SECOND + INTERVAL 99 MICROSECOND

FROM     PENALTIES



Answer 5.33:



SELECT   PLAYERNO,

         CASE TOWN='Inglewood' 

            WHEN 1 THEN 'Yes' ELSE 'No' END

FROM     PLAYERS



Answer 5.34:



SELECT   *

FROM     PENALTIES

WHERE    (AMOUNT = 25) = (PLAYERNO = 44)



Answer 5.35:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    (AMOUNT, PLAYERNO, PAYMENT_DATE) = 

         (25, 44, '1980-12-08')



Answer 5.36:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    (NAME, INITIALS) = (TOWN, STREET)



Answer 5.37:



SELECT   *

FROM     PENALTIES

WHERE    (AMOUNT = 25, PLAYERNO = 44) = (FALSE, TRUE)



Example 6.1:



SELECT   PLAYERNO

FROM     PENALTIES

WHERE    AMOUNT > 25

GROUP BY PLAYERNO

HAVING   COUNT(*) > 1

ORDER BY PLAYERNO



Example 6.2:



SELECT   PLAYERNO, LEAGUENO

FROM     PLAYERS

WHERE    TOWN = 'Stratford'

ORDER BY LEAGUENO



Example 6.3:



SELECT   89 * 73



Example 6.4:



(SELECT   *

 FROM     TEAMS)

;

(((((SELECT   *

     FROM     TEAMS)))))



Example 6.5:



SELECT   PLAYERNO

FROM     TEAMS

UNION

SELECT   PLAYERNO

FROM     PENALTIES

;

SELECT   PLAYERNO

FROM     TEAMS

ORDER BY PLAYERNO

UNION

SELECT   PLAYERNO

FROM     PENALTIES

;

SELECT   PLAYERNO

FROM     TEAMS

UNION

SELECT   PLAYERNO

FROM     PENALTIES 

ORDER BY PLAYERNO

;

(SELECT   PLAYERNO

 FROM     TEAMS

 ORDER BY PLAYERNO)

UNION

(SELECT   PLAYERNO

 FROM     PENALTIES)

ORDER BY PLAYERNO



Example 6.6:



SELECT   PLAYERNO

FROM    (SELECT   PLAYERNO, SEX

         FROM     PLAYERS

         WHERE    PLAYERNO < 10) AS PLAYERS10

WHERE    SEX = 'M'

;

SELECT  *

FROM   (SELECT  *

        FROM   (SELECT  *

                FROM   (SELECT  *

                        FROM    PLAYERS) AS S1) AS S2) AS S3



Example 6.7:



SELECT   PLAYERNO

FROM    (SELECT   PLAYERNO, SEX

         FROM    (SELECT   PLAYERNO, SEX, JOINED

                  FROM    (SELECT   PLAYERNO, SEX, JOINED

                           FROM     PLAYERS

                           WHERE    PLAYERNO > 10) AS GREATER10

                  WHERE    PLAYERNO < 100) AS LESS100

         WHERE    JOINED > 1980) AS JOINED1980

WHERE    SEX = 'M'



Example 6.8:



SELECT   PLAYERNO, JOINED -

                  (SELECT   JOINED

                   FROM     PLAYERS

                   WHERE    PLAYERNO = 100)

FROM     PLAYERS

WHERE    PLAYERNO < 60

;

SELECT   PLAYERNO, JOINED - 1979

FROM     PLAYERS

WHERE    PLAYERNO < 60

;

SELECT   TEAMNO

FROM     TEAMS

WHERE    PLAYERNO =

        (SELECT   PLAYERNO

         FROM     PLAYERS)



Example 6.9:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    YEAR(BIRTH_DATE) = (SELECT   YEAR(BIRTH_DATE)

                             FROM     PLAYERS

                             WHERE    PLAYERNO = 27)

;

SELECT   PLAYERNO

FROM     PLAYERS

WHERE    YEAR(BIRTH_DATE) = 1964



Example 6.10:



SELECT   (SELECT   BIRTH_DATE

          FROM     PLAYERS

          WHERE    PLAYERNO = 27),

         (SELECT   BIRTH_DATE

          FROM     PLAYERS

          WHERE    PLAYERNO = 44),

         (SELECT   BIRTH_DATE

          FROM     PLAYERS

          WHERE    PLAYERNO = 100)



Example 6.11:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE   (SEX, TOWN) = (SELECT   SEX, TOWN

                       FROM     PLAYERS

                       WHERE    PLAYERNO = 100)



Answer 6.8:



SELECT   PLAYERNO, BEGIN_DATE

FROM     COMMITTEE_MEMBERS

UNION

SELECT   PLAYERNO, END_DATE

FROM     COMMITTEE_MEMBERS

ORDER BY PLAYERNO



Answer 6.9:



SELECT   PLAYERNO, BEGIN_DATE, 'Begin date'

FROM     COMMITTEE_MEMBERS

UNION

SELECT   PLAYERNO, END_DATE, 'End date'

FROM     COMMITTEE_MEMBERS

ORDER BY PLAYERNO



Answer 6.10:



SELECT  PLAYERNO

FROM   (SELECT  PLAYERNO

        FROM   (SELECT  PLAYERNO, END_DATE

                FROM   (SELECT  PLAYERNO, BEGIN_DATE, 

                                END_DATE

                        FROM    COMMITTEE_MEMBERS

                        WHERE   POSITION = 'Secretary')

                        AS SECRETARIES

                WHERE   BEGIN_DATE >= '1990-01-01')

                AS AFTER1989

        WHERE   END_DATE <= '1994-12-31') AS BEFORE1995



Answer 6.11:



SELECT   TEAMNO

FROM     TEAMS

WHERE    PLAYERNO =

        (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    NAME = 'Parmenter'

         AND      INITIALS = 'R')



Answer 6.12:



SELECT   TEAMNO

FROM     TEAMS

WHERE    PLAYERNO =

        (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    NAME =

                 (SELECT   NAME

                  FROM     PLAYERS

                  WHERE    PLAYERNO = 6)

         AND      PLAYERNO <> 6)

;

SELECT   NAME

FROM     PLAYERS

WHERE    PLAYERNO =

        (SELECT   PLAYERNO

         FROM     TEAMS

         WHERE    TEAMNO =

                 (SELECT   TEAMNO

                  FROM     MATCHES

                  WHERE    MATCHNO = 6))



Answer 6.13:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    AMOUNT >

        (SELECT   AMOUNT

         FROM     PENALTIES

         WHERE    PAYMENTNO = 4)



Answer 6.14:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    DAYNAME(BIRTH_DATE) =

        (SELECT   DAYNAME(BIRTH_DATE)

         FROM     PLAYERS

         WHERE    PLAYERNO = 2)



Answer 6.15:



SELECT   PLAYERNO

FROM     COMMITTEE_MEMBERS

WHERE   (BEGIN_DATE, END_DATE) =

        (SELECT   BEGIN_DATE, END_DATE

         FROM     COMMITTEE_MEMBERS

         WHERE    PLAYERNO = 8

         AND      POSITION = 'Treasurer')

AND      PLAYERNO <> 8



Answer 6.16:



SELECT  (SELECT   DIVISION

         FROM     TEAMS

         WHERE    TEAMNO = 1),

        (SELECT   DIVISION

         FROM     TEAMS

         WHERE    TEAMNO = 2)



Answer 6.17:



SELECT  (SELECT   AMOUNT

         FROM     PENALTIES

         WHERE    PAYMENTNO = 1) +

        (SELECT   AMOUNT

         FROM     PENALTIES

         WHERE    PAYMENTNO = 2) +

        (SELECT   AMOUNT

         FROM     PENALTIES

         WHERE    PAYMENTNO = 3)



Example 7.1:



CREATE DATABASE EXTRA

;

USE EXTRA

;

CREATE TABLE CITIES

      (CITYNO      INTEGER NOT NULL PRIMARY KEY,

       CITYNAME    CHAR(20) NOT NULL)

;

INSERT INTO CITIES VALUES

   (1, 'Stratford')

;

INSERT INTO CITIES VALUES

   (2, 'Inglewood')



Example 7.2:



SELECT   *

FROM     EXTRA.CITIES



Example 7.3:



SELECT   *

FROM     TENNIS.TEAMS



Example 7.4:



SELECT   TEAMNO

FROM     TEAMS

;

SELECT   TEAMS.TEAMNO

FROM     TEAMS

;

SELECT   TENNIS.TEAMS.TEAMNO

FROM     TENNIS.TEAMS



Example 7.5:



SELECT   TEAMNO, NAME

FROM     TEAMS, PLAYERS

WHERE    TEAMS.PLAYERNO = PLAYERS.PLAYERNO



Example 7.6:



SELECT   PAYMENTNO, PENALTIES.PLAYERNO, AMOUNT,

         NAME, INITIALS

FROM     PENALTIES, PLAYERS

WHERE    PENALTIES.PLAYERNO = PLAYERS.PLAYERNO

;

SELECT   PLAYERS.PLAYERNO

FROM     PLAYERS, TEAMS

WHERE    PLAYERS.PLAYERNO = TEAMS.PLAYERNO

;

SELECT   PLAYERS.PLAYERNO

FROM     TEAMS, PLAYERS

WHERE    PLAYERS.PLAYERNO = TEAMS.PLAYERNO



Example 7.7:



SELECT   PAYMENTNO, PEN.PLAYERNO, AMOUNT,

         NAME, INITIALS

FROM     PENALTIES AS PEN, PLAYERS AS P

WHERE    PEN.PLAYERNO = P.PLAYERNO

;

SELECT   PAYMENTNO, PEN.PLAYERNO, AMOUNT,

         NAME, INITIALS

FROM     PENALTIES PEN, PLAYERS P

WHERE    PEN.PLAYERNO = P.PLAYERNO



Example 7.8:



SELECT   T.PLAYERNO

FROM     TEAMS AS T, PENALTIES AS PEN

WHERE    T.PLAYERNO = PEN.PLAYERNO



Example 7.9:



SELECT   DISTINCT T.PLAYERNO

FROM     TEAMS AS T, PENALTIES AS PEN

WHERE    T.PLAYERNO = PEN.PLAYERNO



Example 7.10:



SELECT   DISTINCT P.NAME, P.INITIALS

FROM     PLAYERS AS P, MATCHES AS M

WHERE    P.PLAYERNO = M.PLAYERNO



Example 7.11:



SELECT   M.MATCHNO, M.PLAYERNO, M.TEAMNO, P.NAME, T.DIVISION

FROM     MATCHES AS M, PLAYERS AS P, TEAMS AS T

WHERE    M.PLAYERNO = P.PLAYERNO

AND      M.TEAMNO = T.TEAMNO



Example 7.12:



SELECT   PEN.PAYMENTNO, PEN.PLAYERNO, PEN.PAYMENT_DATE

FROM     PENALTIES AS PEN, PLAYERS AS P

WHERE    PEN.PLAYERNO = P.PLAYERNO

AND      YEAR(PEN.PAYMENT_DATE) = P.JOINED



Example 7.13:



SELECT   P.PLAYERNO

FROM     PLAYERS AS P, PLAYERS AS PAR

WHERE    PAR.NAME = 'Parmenter'

AND      PAR.INITIALS = 'R'

AND      P.BIRTH_DATE < PAR.BIRTH_DATE

;

SELECT   P.PLAYERNO

FROM     PLAYERS AS P, PLAYERS

WHERE    PLAYERS.NAME = 'Parmenter'

AND      PLAYERS.INITIALS = 'R'

AND      P.BIRTH_DATE < PLAYERS.BIRTH_DATE



Example 7.14:



SELECT   P.PLAYERNO

FROM     PLAYERS AS P, EXTRA.CITIES AS TOWN

WHERE    P.TOWN = TOWN.CITYNAME



Example 7.15:



SELECT   PLAYERS.PLAYERNO, NAME, AMOUNT

FROM     PLAYERS, PENALTIES

WHERE    PLAYERS.PLAYERNO = PENALTIES.PLAYERNO

AND      BIRTH_DATE > '1920-06-30'

;

SELECT   PLAYERS.PLAYERNO, NAME, AMOUNT

FROM     PLAYERS INNER JOIN PENALTIES

         ON (PLAYERS.PLAYERNO = PENALTIES.PLAYERNO)

WHERE    BIRTH_DATE > '1920-06-30'



Example 7.16:



SELECT   TEAMNO, NAME

FROM     TEAMS, PLAYERS

WHERE    TEAMS.PLAYERNO = PLAYERS.PLAYERNO

;

SELECT   TEAMNO, NAME

FROM     TEAMS INNER JOIN PLAYERS

         ON TEAMS.PLAYERNO = PLAYERS.PLAYERNO

;

SELECT   TEAMNO, NAME

FROM     TEAMS JOIN PLAYERS

         ON TEAMS.PLAYERNO = PLAYERS.PLAYERNO



Example 7.17:



SELECT   PLAYERS.PLAYERNO, NAME, AMOUNT

FROM     PLAYERS, PENALTIES

WHERE    PLAYERS.PLAYERNO = PENALTIES.PLAYERNO

ORDER BY PLAYERS.PLAYERNO

;

SELECT   PLAYERS.PLAYERNO, NAME, AMOUNT

FROM     PLAYERS LEFT OUTER JOIN PENALTIES

         ON PLAYERS.PLAYERNO = PENALTIES.PLAYERNO

ORDER BY PLAYERS.PLAYERNO



Example 7.18:



SELECT   PAYMENTNO, NAME

FROM     PENALTIES LEFT OUTER JOIN PLAYERS

         ON PENALTIES.PLAYERNO = PLAYERS.PLAYERNO

ORDER BY PAYMENTNO



Example 7.19:



SELECT   P.PLAYERNO, NAME, TEAMNO, DIVISION

FROM     PLAYERS AS P LEFT OUTER JOIN TEAMS AS T

         ON P.PLAYERNO = T.PLAYERNO

ORDER BY P.PLAYERNO



Example 7.20:



SELECT   PLAYERS.PLAYERNO, NAME, AMOUNT, TEAMNO

FROM     PLAYERS LEFT OUTER JOIN PENALTIES

         ON PLAYERS.PLAYERNO = PENALTIES.PLAYERNO

            LEFT OUTER JOIN MATCHES

            ON PLAYERS.PLAYERNO = MATCHES.PLAYERNO

WHERE    TOWN = 'Inglewood'



Example 7.21:



SELECT   PLAYERS.PLAYERNO, NAME, TEAMNO

FROM     TEAMS RIGHT OUTER JOIN PLAYERS

         ON TEAMS.PLAYERNO = PLAYERS.PLAYERNO



Example 7.22:



SELECT   PLAYERS.PLAYERNO, NAME, AMOUNT

FROM     PLAYERS INNER JOIN PENALTIES

         ON PLAYERS.PLAYERNO = PENALTIES.PLAYERNO

WHERE    BIRTH_DATE > '1920-06-30'

;

SELECT   PLAYERS.PLAYERNO, NAME, AMOUNT

FROM     PLAYERS NATURAL JOIN PENALTIES

WHERE    BIRTH_DATE > '1920-06-30'



Example 7.23:



SELECT   TEAMS.PLAYERNO, TEAMS.TEAMNO, PENALTIES.PAYMENTNO

FROM     TEAMS LEFT OUTER JOIN PENALTIES

         ON TEAMS.PLAYERNO = PENALTIES.PLAYERNO

WHERE    DIVISION = 'second'

;

SELECT   TEAMS.PLAYERNO, TEAMS.TEAMNO, PENALTIES.PAYMENTNO

FROM     TEAMS LEFT OUTER JOIN PENALTIES

         ON TEAMS.PLAYERNO = PENALTIES.PLAYERNO

         AND DIVISION = 'second'



Example 7.24:



SELECT   TEAMS.PLAYERNO, TEAMS.TEAMNO, PENALTIES.PAYMENTNO

FROM     TEAMS FULL OUTER JOIN PENALTIES

         ON TEAMS.PLAYERNO = PENALTIES.PLAYERNO

         AND TEAMS.PLAYERNO > 1000



Example 7.25:



SELECT   *

FROM     PENALTIES LEFT OUTER JOIN TEAMS

         USING (PLAYERNO)



Example 7.26:



SELECT   PLAYERNO

FROM    (SELECT   *

         FROM     PLAYERS

         WHERE    TOWN = 'Stratford') AS STRATFORDERS



Example 7.27:



SELECT   SMALL_TEAMS.PLAYERNO

FROM    (SELECT   PLAYERNO, DIVISION

         FROM     TEAMS) AS SMALL_TEAMS

WHERE    SMALL_TEAMS.DIVISION = 'first'



Example 7.28:



SELECT   MATCHNO, DIFFERENCE

FROM    (SELECT   MATCHNO, 

                  ABS(WON ?LOST) AS DIFFERENCE

         FROM     MATCHES) AS M

WHERE    DIFFERENCE > 2



Example 7.29:



SELECT   *

FROM    (SELECT 'Stratford' AS TOWN, 4 AS NUMBER

         UNION

         SELECT 'Plymouth', 6

         UNION

         SELECT 'Inglewood', 1

         UNION

         SELECT 'Douglas', 2) AS TOWNS

ORDER BY TOWN



Example 7.30:



SELECT   PLAYERNO, NAME, PLAYERS.TOWN, NUMBER * 1000

FROM     PLAYERS,

        (SELECT 'Stratford' AS TOWN, 4 AS NUMBER

         UNION

         SELECT 'Plymouth', 6

         UNION

         SELECT 'Inglewood', 1

         UNION

         SELECT 'Douglas', 2) AS TOWNS

WHERE    PLAYERS.TOWN = TOWNS.TOWN

ORDER BY PLAYERNO

;

SELECT   PLAYERNO, NAME, PLAYERS.TOWN, NUMBER

FROM     PLAYERS LEFT OUTER JOIN

        (SELECT 'Stratford' AS TOWN, 4 AS NUMBER

         UNION

         SELECT 'Plymouth', 6

         UNION

         SELECT 'Inglewood', 1

         UNION

         SELECT 'Douglas', 2) AS TOWNS

         ON PLAYERS.TOWN = TOWNS.TOWN

ORDER BY PLAYERNO



Example 7.31:



SELECT   PLAYERNO

FROM     PLAYERS LEFT OUTER JOIN

        (SELECT 'Stratford' AS TOWN, 4 AS NUMBER

         UNION

         SELECT 'Plymouth', 6

         UNION

         SELECT 'Inglewood', 1

         UNION

         SELECT 'Douglas', 2) AS TOWNS

         ON PLAYERS.TOWN = TOWNS.TOWN

WHERE    TOWNS.NUMBER > 2



Example 7.32:



SELECT   *

FROM    (SELECT 'John' AS FIRST_NAME

         UNION

         SELECT 'Mark'

         UNION

         SELECT 'Arnold') AS FIRST_NAMES,

        (SELECT 'Berg' AS LAST_NAME

         UNION

         SELECT 'Johnson'

         UNION

         SELECT 'Williams') AS LAST_NAMES



Example 7.33:



SELECT   NUMBER, POWER(NUMBER,3)

FROM    (SELECT 10 AS NUMBER UNION SELECT 11 UNION SELECT 12

         UNION

         SELECT 13 UNION SELECT 14 UNION SELECT 15

         UNION

         SELECT 16 UNION SELECT 17 UNION SELECT 18

         UNION

         SELECT 19) AS NUMBERS

WHERE    POWER(NUMBER,3) <= 4000



Example 7.34:



SELECT   NUMBER

FROM    (SELECT    CAST(CONCAT(DIGIT1.DIGIT, 

                   CONCAT(DIGIT2.DIGIT,

                   DIGIT3.DIGIT)) AS UNSIGNED INTEGER) 

                   AS NUMBER

         FROM     (SELECT '0' AS DIGIT UNION SELECT '1' UNION 

                   SELECT '2' UNION SELECT '3' UNION 

                   SELECT '4' UNION SELECT '5' UNION

                   SELECT '6' UNION SELECT '7' UNION 

                   SELECT '8' UNION SELECT '9') AS DIGIT1,

                  (SELECT '0' AS DIGIT UNION SELECT '1' UNION 

                   SELECT '2' UNION SELECT '3' UNION 

                   SELECT '4' UNION SELECT '5' UNION

                   SELECT '6' UNION SELECT '7' UNION 

                   SELECT '8' UNION SELECT '9') AS DIGIT2,

                  (SELECT '0' AS DIGIT UNION SELECT '1' UNION 

                   SELECT '2' UNION SELECT '3' UNION 

                   SELECT '4' UNION SELECT '5' UNION

                   SELECT '6' UNION SELECT '7' UNION 

                   SELECT '8' UNION SELECT '9') AS DIGIT3)

                   AS NUMBERS

ORDER BY NUMBER



Example 7.35:



SELECT   NUMBER AS SQUARE, ROUND(SQRT(NUMBER)) AS BASIS

FROM    (SELECT    CAST(CONCAT(DIGIT1.DIGIT, 

                   CONCAT(DIGIT2.DIGIT,

                   DIGIT3.DIGIT)) AS UNSIGNED INTEGER) 

                   AS NUMBER

         FROM     (SELECT '0' AS DIGIT UNION SELECT '1' UNION

                   SELECT '2' UNION SELECT '3' UNION

                   SELECT '4' UNION SELECT '5' UNION

                   SELECT '6' UNION SELECT '7' UNION

                   SELECT '8' UNION SELECT '9') AS DIGIT1,

                  (SELECT '0' AS DIGIT UNION SELECT '1' UNION

                   SELECT '2' UNION SELECT '3' UNION

                   SELECT '4' UNION SELECT '5' UNION

                   SELECT '6' UNION SELECT '7' UNION

                   SELECT '8' UNION SELECT '9') AS DIGIT2,

                  (SELECT '0' AS DIGIT UNION SELECT '1' UNION

                   SELECT '2' UNION SELECT '3' UNION

                   SELECT '4' UNION SELECT '5' UNION

                   SELECT '6' UNION SELECT '7' UNION

                   SELECT '8' UNION SELECT '9') AS DIGIT3)

                   AS NUMBERS

WHERE    SQRT(NUMBER) = ROUND(SQRT(NUMBER))

ORDER BY NUMBER



Answer 7.3:



SELECT   PAYMENTNO, AMOUNT, PLAYERS.PLAYERNO, NAME

FROM     PENALTIES, PLAYERS

WHERE    PENALTIES.PLAYERNO = PLAYERS.PLAYERNO



Answer 7.4:



SELECT   PAYMENTNO, NAME

FROM     PENALTIES, PLAYERS, TEAMS

WHERE    PENALTIES.PLAYERNO = TEAMS.PLAYERNO

AND      TEAMS.PLAYERNO = PLAYERS.PLAYERNO



Answer 7.5:



SELECT   T.TEAMNO, P.NAME

FROM     TEAMS AS T, PLAYERS AS P

WHERE    T.PLAYERNO = P.PLAYERNO



Answer 7.6:



SELECT   M.MATCHNO, P.NAME, T.DIVISION

FROM     MATCHES AS M, PLAYERS AS P, TEAMS AS T

WHERE    M.PLAYERNO = P.PLAYERNO

AND      M.TEAMNO = T.TEAMNO



Answer 7.7:



SELECT   P.PLAYERNO, P.NAME

FROM     PLAYERS AS P, COMMITTEE_MEMBERS AS C

WHERE    P.PLAYERNO = C.PLAYERNO

AND      B.POSITION = 'Chairman'



Answer 7.8:



SELECT   DISTINCT CM.PLAYERNO

FROM     COMMITTEE_MEMBERS AS CM, PENALTIES AS PEN

WHERE    CM.PLAYERNO = PEN.PLAYERNO

AND      CM.BEGIN_DATE = PEN.PAYMENT_DATE



Answer 7.9:



SELECT   P.PLAYERNO, P.NAME

FROM     PLAYERS AS P, PLAYERS AS P27

WHERE    P.TOWN = P27.TOWN

AND      P27.PLAYERNO = 27

AND      P.PLAYERNO <> 27



Answer 7.10:



SELECT   DISTINCT P.PLAYERNO AS PLAYER_PLAYERNO,

         P.NAME AS PLAYER_NAME,

         CAP.PLAYERNO AS CAPTAIN_PLAYERNO,

         CAP.NAME AS CAPTAIN_NAME

FROM     PLAYERS AS P, PLAYERS AS CAP, 

         MATCHES AS M, TEAMS AS T

WHERE    M.PLAYERNO = P.PLAYERNO

AND      T.TEAMNO = M.TEAMNO

AND      M.PLAYERNO <> T.PLAYERNO

AND      CAP.PLAYERNO = T.PLAYERNO



Answer 7.11:



SELECT   PEN1.PAYMENTNO, PEN1.PLAYERNO

FROM     PENALTIES AS PEN1, PENALTIES AS PEN2

WHERE    PEN1.AMOUNT = PEN2.AMOUNT

AND      PEN2.PLAYERNO = 44

AND      PEN1.PLAYERNO <> 44



Answer 7.12:



SELECT   T.TEAMNO, P.NAME

FROM     TEAMS AS T INNER JOIN PLAYERS AS P

         ON T.PLAYERNO = P.PLAYERNO



Answer 7.13:



SELECT   P.PLAYERNO, P.NAME

FROM     PLAYERS AS P INNER JOIN PLAYERS AS P27

         ON P.TOWN = P27.TOWN

AND      P27.PLAYERNO = 27

AND      P.PLAYERNO <> 27



Answer 7.14:



SELECT   M.MATCHNO, P.NAME, T.DIVISION

FROM    (MATCHES AS M INNER JOIN PLAYERS AS P

         ON M.PLAYERNO = P.PLAYERNO) 

         INNER JOIN TEAMS AS T

         ON M.TEAMNO = T.TEAMNO



Answer 7.15:



SELECT   PLAYERS.PLAYERNO, PENALTIES.AMOUNT

FROM     PLAYERS LEFT OUTER JOIN PENALTIES

         ON PLAYERS.PLAYERNO = PENALTIES.PLAYERNO



Answer 7.16:



SELECT   P.PLAYERNO, M.TEAMNO

FROM     PLAYERS AS P LEFT OUTER JOIN MATCHES AS M

         ON P.PLAYERNO = M.PLAYERNO



Answer 7.17:



SELECT   P.PLAYERNO, PEN.AMOUNT, M.TEAMNO

FROM    (PLAYERS AS P LEFT OUTER JOIN MATCHES AS M

         ON P.PLAYERNO = M.PLAYERNO)

         LEFT OUTER JOIN PENALTIES AS PEN

         ON P.PLAYERNO = PEN.PLAYERNO



Answer 7.21:



SELECT   PLAYERNO, DIFFERENCE

FROM    (SELECT   PLAYERNO, 

                  JOINED - YEAR(BIRTH_DATE) AS DIFFERENCE

         FROM     PLAYERS) AS DIFFERENCES

WHERE    DIFFERENCE > 20



Answer 7.22:



SELECT   LETTER1 || LETTER2 || LETTER3

FROM    (SELECT 'a' AS LETTER1 UNION SELECT 'b' 

         UNION SELECT 'c' UNION SELECT 'd') AS LETTERS1,

        (SELECT 'a' AS LETTER2 UNION SELECT 'b' 

         UNION SELECT 'c' UNION SELECT 'd') AS LETTERS2,

        (SELECT 'a' AS LETTER3 UNION SELECT 'b' 

         UNION SELECT 'c' UNION SELECT 'd') AS LETTERS3



Answer 7.23:



SELECT   ROUND(RAND() * 1000)

FROM    (SELECT 0 AS NUMBER UNION SELECT 1 UNION SELECT 2

         UNION

         SELECT 3 UNION SELECT 4 UNION SELECT 5

         UNION

         SELECT 6 UNION SELECT 7 UNION SELECT 8

         UNION

         SELECT 9) AS NUMBERS



Example 8.1:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    TOWN = 'Stratford'



Example 8.2:



SELECT   PLAYERNO, BIRTH_DATE, JOINED

FROM     PLAYERS

WHERE    YEAR(BIRTH_DATE) + 17 = JOINED



Example 8.3:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    LEAGUENO = '7060'



Example 8.4:



SELECT   PLAYERNO, LEAGUENO

FROM     PLAYERS

WHERE    LEAGUENO = LEAGUENO



Example 8.5:



SELECT   PLAYERNO, LEAGUENO

FROM     PLAYERS

WHERE    LEAGUENO <=> NULL



Example 8.6:



SELECT   MATCHNO

FROM     MATCHES

WHERE   (WON, LOST) = (2, 3)



Example 8.7:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO =

        (SELECT   PLAYERNO

         FROM     TEAMS

         WHERE    TEAMNO = 1)

;

SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO = 6

;

SELECT   *

FROM     PLAYERS

WHERE    BIRTH_DATE <

        (SELECT   BIRTH_DATE

         FROM     PLAYERS)



Example 8.8:



SELECT   PLAYERNO, NAME, INITIALS

FROM     PLAYERS

WHERE    BIRTH_DATE <

        (SELECT   BIRTH_DATE

         FROM     PLAYERS

         WHERE    LEAGUENO = '8467')

;

SELECT   PLAYERNO, NAME, INITIALS

FROM     PLAYERS

WHERE    BIRTH_DATE <

        (SELECT   BIRTH_DATE

         FROM     PLAYERS

         WHERE    LEAGUENO = '9999')



Example 8.9:



SELECT   MATCHNO

FROM     MATCHES

WHERE    TEAMNO = 

        (SELECT   TEAMNO

         FROM     TEAMS

         WHERE    PLAYERNO = 27)



Example 8.10:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    LEAGUENO <=> 

        (SELECT   LEAGUENO

         FROM     PLAYERS

         WHERE    PLAYERNO = 7)



Example 8.11:



SELECT   PLAYERNO, TOWN, SEX

FROM     PLAYERS

WHERE   (TOWN, SEX) =

       ((SELECT   TOWN

         FROM     PLAYERS

         WHERE    PLAYERNO = 7),

        (SELECT   SEX

         FROM     PLAYERS

         WHERE    PLAYERNO = 2))



Example 8.12:



SELECT   DISTINCT PLAYERNO

FROM     COMMITTEE_MEMBERS

WHERE   (BEGIN_DATE, END_DATE) =

        (SELECT   BEGIN_DATE, END_DATE

         FROM     COMMITTEE_MEMBERS

         WHERE    PLAYERNO = 6

         AND      POSITION = 'Secretary'

         AND      BEGIN_DATE = '1990-01-01')



Example 8.13:



SELECT   PLAYERNO, NAME, INITIALS

FROM     PLAYERS

WHERE   (NAME, INITIALS) <

        (SELECT   NAME, INITIALS

         FROM     PLAYERS

         WHERE    PLAYERNO = 6)

ORDER BY NAME, INITIALS



Example 8.14:



SELECT   MATCHNO

FROM     MATCHES_SPECIAL

WHERE   (START_DATE, START_TIME) >

        (SELECT   START_DATE, START_TIME

         FROM     MATCHES_SPECIAL

         WHERE    MATCHNO = 1)



Example 8.15:



SELECT   MATCHNO

FROM     MATCHES

WHERE    'Inglewood' =

        (SELECT   TOWN

         FROM     PLAYERS

         WHERE    PLAYERS.PLAYERNO = MATCHES.PLAYERNO)

;

SELECT   TOWN

FROM     PLAYERS

WHERE    PLAYERS.PLAYERNO = 6

;

SELECT   TOWN

FROM     PLAYERS

WHERE    PLAYERS.PLAYERNO = 44



Example 8.16:



SELECT   MATCHNO, PLAYERNO, TEAMNO

FROM     MATCHES

WHERE    PLAYERNO = 

        (SELECT   PLAYERNO

         FROM     TEAMS

         WHERE    TEAMS.PLAYERNO = MATCHES.PLAYERNO)



Example 8.17:



SELECT   MATCHNO

FROM     MATCHES

WHERE    SUBSTR((SELECT   DIVISION 

                 FROM     TEAMS

                 WHERE    TEAMS.TEAMNO = 

                          MATCHES.TEAMNO),3,1)

         =

         SUBSTR((SELECT   NAME

                 FROM     PLAYERS

                 WHERE    PLAYERS.PLAYERNO =

                          MATCHES.PLAYERNO),3,1)



Example 8.18:



SELECT   PLAYERNO, LEAGUENO

FROM     PLAYERS

WHERE    LEAGUENO



Example 8.19:



SELECT   TEAMNO

FROM     TEAMS

WHERE    TEAMNO - 1

;

SELECT * FROM PLAYERS WHERE 18

;

SELECT * FROM PLAYERS WHERE NULL

;

SELECT * FROM PLAYERS WHERE PLAYERNO & 3

;

SELECT * FROM PLAYERS WHERE YEAR(BIRTH_DATE)



Example 8.20:



SELECT   PLAYERNO, NAME, SEX, BIRTH_DATE

FROM     PLAYERS

WHERE    SEX = 'M'

AND      BIRTH_DATE > '1970-12-31'



Example 8.21:



SELECT   PLAYERNO, NAME, TOWN

FROM     PLAYERS

WHERE    TOWN = 'Plymouth'

OR       TOWN = 'Eltham'



Example 8.22:



SELECT   PLAYERNO, NAME, TOWN

FROM     PLAYERS

WHERE    TOWN <> 'Stratford'

;

SELECT   PLAYERNO, NAME, TOWN

FROM     PLAYERS

WHERE    NOT (TOWN = 'Stratford')



Example 8.23:



SELECT   PLAYERNO, LEAGUENO, PHONENO

FROM     PLAYERS

WHERE    LEAGUENO AND PHONENO



Example 8.24:



SELECT   PLAYERNO, TOWN, BIRTH_DATE

FROM     PLAYERS

WHERE   (TOWN = 'Stratford' OR  YEAR(BIRTH_DATE) = 1963)

AND NOT (TOWN = 'Stratford' AND YEAR(BIRTH_DATE) = 1963)

;

SELECT   PLAYERNO, TOWN, BIRTH_DATE

FROM     PLAYERS

WHERE   (TOWN = 'Stratford') XOR (YEAR(BIRTH_DATE) = 1963)



Example 8.25:



SELECT   PLAYERNO, NAME, TOWN

FROM     PLAYERS

WHERE    TOWN = 'Inglewood'

OR       TOWN = 'Plymouth'

OR       TOWN = 'Midhurst'

OR       TOWN = 'Douglas'

;

SELECT   PLAYERNO, NAME, TOWN

FROM     PLAYERS

WHERE    TOWN IN ('Inglewood', 'Plymouth', 'Midhurst',

                  'Douglas')



Example 8.26:



SELECT   PLAYERNO, YEAR(BIRTH_DATE)

FROM     PLAYERS

WHERE    YEAR(BIRTH_DATE) IN (1962, 1963, 1970)



Example 8.27:



SELECT   MATCHNO, WON, LOST

FROM     MATCHES

WHERE    2 IN (WON, LOST)



Example 8.28:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    PLAYERNO IN 

        (100, 

        (SELECT   PLAYERNO 

         FROM     PENALTIES 

         WHERE    PAYMENTNO = 1),

        (SELECT   PLAYERNO 

         FROM     TEAMS 

         WHERE    TEAMNO = 2))



Example 8.29:



SELECT   MATCHNO, WON, LOST

FROM     MATCHES

WHERE    WON IN

        (TRUNCATE(MATCHNO / 2,0), LOST,

        (SELECT   LOST

         FROM     MATCHES 

         WHERE    MATCHNO = 1))



Example 8.30:



SELECT   MATCHNO

FROM     MATCHES

WHERE   (SELECT   SUBSTR(NAME,1,1)

         FROM     PLAYERS

         WHERE    PLAYERS.PLAYERNO = MATCHES.PLAYERNO)

         IN ('B','C','E')



Example 8.31:



SELECT   MATCHNO, WON, LOST

FROM     MATCHES

WHERE   (WON, LOST) IN ((3,1),(3,2))



Example 8.32:



SELECT   PLAYERNO, NAME, INITIALS

FROM     PLAYERS

WHERE   (NAME, INITIALS) IN

       ((SELECT   NAME, INITIALS

         FROM     PLAYERS

         WHERE    PLAYERNO = 6),

        (SELECT   NAME, INITIALS

         FROM     PLAYERS

         WHERE    PLAYERNO = 27))



Example 8.33:



SELECT   PLAYERNO

FROM     MATCHES

;

SELECT   PLAYERNO, NAME, INITIALS

FROM     PLAYERS

WHERE    PLAYERNO IN (6, 6, 6, 44, 83, 2, 57, 8, 27,

                      104, 112, 112, 8)

;

SELECT   PLAYERNO, NAME, INITIALS

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES)

;

SELECT   PLAYERNO, NAME, INITIALS

FROM     PLAYERS

WHERE    PLAYERNO IN (6, 6, 6, 44, 83, 2, 57, 8, 27,

                      104, 112, 112, 8)



Example 8.34:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    TEAMNO = 1)



Example 8.35:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    TEAMNO NOT IN

                 (SELECT   TEAMNO

                  FROM     TEAMS

                  WHERE    PLAYERNO = 6))

;

SELECT   *

FROM     PLAYERS

WHERE    BIRTH_DATE NOT IN

        (SELECT   BIRTH_DATE

         FROM     PLAYERS

         WHERE    Town = 'London')



Example 8.36:



SELECT   *

FROM     COMMITTEE_MEMBERS

WHERE   (BEGIN_DATE, END_DATE) IN

        (SELECT   BEGIN_DATE, END_DATE

         FROM     COMMITTEE_MEMBERS

         WHERE    POSITION = 'Secretary')



Example 8.37:



CREATE TABLE PLAYERS_NI

      (NAME         CHAR(10) NOT NULL,

       INITIALS     CHAR(3) NOT NULL,

       TOWN         VARCHAR(30) NOT NULL,

       PRIMARY KEY (NAME, INITIALS))

;

INSERT INTO PLAYERS_NI VALUES ('Parmenter', 'R', 'Stratford')

;

INSERT INTO PLAYERS_NI VALUES ('Parmenter', 'P', 'Stratford')

;

INSERT INTO PLAYERS_NI VALUES ('Miller', 'P', 'Douglas')

;

CREATE TABLE PENALTIES_NI

      (PAYMENTNO    INTEGER NOT NULL,

       NAME         CHAR(10) NOT NULL,

       INITIALS     CHAR(3) NOT NULL,

       AMOUNT       DECIMAL(7,2) NOT NULL,

       PRIMARY KEY (PAYMENTNO),

       FOREIGN KEY (NAME, INITIALS) 

          REFERENCES PLAYERS_NI (NAME, INITIALS))

;

INSERT INTO PENALTIES_NI VALUES (1, 'Parmenter', 'R', 100.00)

;

INSERT INTO PENALTIES_NI VALUES (2, 'Miller', 'P', 200.00)



Example 8.38:



SELECT   NAME, INITIALS, TOWN

FROM     PLAYERS_NI

WHERE    NAME IN

        (SELECT   NAME

         FROM     PENALTIES_NI)

AND      INITIALS IN

        (SELECT   INITIALS

         FROM     PENALTIES_NI)

;

SELECT   NAME, INITIALS, TOWN

FROM     PLAYERS_NI

WHERE   (NAME, INITIALS) IN

        (SELECT   NAME, INITIALS

         FROM     PENALTIES_NI)

;

SELECT   NAME, INITIALS, TOWN

FROM     PLAYERS_NI

WHERE    NAME IN

        (SELECT   NAME

         FROM     PENALTIES_NI

         WHERE    PLAYERS_NI.INITIALS = 

                  PENALTIES_NI.INITIALS)



Example 8.39:



SELECT   NAME, INITIALS, TOWN

FROM     PLAYERS_NI

WHERE   (NAME, INITIALS) NOT IN

        (SELECT   NAME, INITIALS

         FROM     PENALTIES_NI)



Example 8.40:



SELECT   PLAYERNO, BIRTH_DATE

FROM     PLAYERS

WHERE    BIRTH_DATE >= '1962-01-01'

AND      BIRTH_DATE <= '1964-12-31'

;

SELECT   PLAYERNO, BIRTH_DATE

FROM     PLAYERS

WHERE    BIRTH_DATE BETWEEN '1962-01-01' AND '1964-12-31'



Example 8.41:



SELECT   MATCHNO, WON + LOST

FROM     MATCHES

WHERE    WON + LOST BETWEEN 2 AND 4



Example 8.42:



SELECT   PLAYERNO, BIRTH_DATE, NAME, INITIALS

FROM     PLAYERS

WHERE    BIRTH_DATE BETWEEN

        (SELECT   BIRTH_DATE

         FROM     PLAYERS

         WHERE    NAME = 'Newcastle'

         AND      INITIALS = 'B')

         AND

        (SELECT   BIRTH_DATE

         FROM     PLAYERS

         WHERE    NAME = 'Miller'

         AND      INITIALS = 'P')



Example 8.43:



SELECT   NAME, PLAYERNO

FROM     PLAYERS

WHERE    NAME LIKE 'B%'



Example 8.44:



SELECT   NAME, PLAYERNO

FROM     PLAYERS

WHERE    NAME LIKE '%r'



Example 8.45:



SELECT   NAME, PLAYERNO

FROM     PLAYERS

WHERE    NAME LIKE '%e_'



Example 8.46:



SELECT   NAME, TOWN, PLAYERNO

FROM     PLAYERS

WHERE    NAME LIKE CONCAT('%', SUBSTR(TOWN,3,1))



Example 8.47:



SELECT   NAME, PLAYERNO

FROM     PLAYERS

WHERE    NAME LIKE '%#_%' ESCAPE '#'



Example 8.48:



SELECT   NAME, PLAYERNO

FROM     PLAYERS

WHERE    NAME REGEXP 'e'



Example 8.49:



SELECT   NAME, PLAYERNO

FROM     PLAYERS

WHERE    NAME REGEXP '^ba'



Example 8.50:



SELECT   NAME, STREET, PLAYERNO

FROM     PLAYERS

WHERE    NAME REGEXP CONCAT(SUBSTR(STREET,1,1), '$')



Example 8.51:



SELECT   NAME, PLAYERNO

FROM     PLAYERS

WHERE    NAME REGEXP '[abc]'



Example 8.52:



SELECT   NAME, PLAYERNO

FROM     PLAYERS

WHERE    NAME REGEXP 'm.n'



Example 8.53:



SELECT   NAME, PLAYERNO

FROM     PLAYERS

WHERE    NAME REGEXP '[men][men]'



Example 8.54:



SELECT   PLAYERNO, POSTCODE

FROM     PLAYERS

WHERE    POSTCODE REGEXP '^[0-9][0-9]3'



Example 8.55:



SELECT   STREET, PLAYERNO

FROM     PLAYERS

WHERE    STREET REGEXP '^St.*Road$'



Example 8.56:



SELECT   PLAYERNO, POSTCODE

FROM     PLAYERS

WHERE    POSTCODE REGEXP '[0-9][0-9]*[a-z][a-z]*'



Example 8.57:



SELECT   NAME, PLAYERNO

FROM     PLAYERS

WHERE    NAME REGEXP '^[^A-M]'



Example 8.58:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME REGEXP '^[a-z]{7}'



Example 8.59:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME REGEXP '^[a-z]{6,7}$'



Example 8.60:



SELECT   PLAYERNO, POSTCODE

FROM     PLAYERS

WHERE    POSTCODE REGEXP '4{4}'



Example 8.61:



SELECT   PLAYERNO, STREET

FROM     PLAYERS

WHERE    STREET REGEXP 'Street|Square'



Example 8.62:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME REGEXP '[[.space.]]'



Example 8.63:



SELECT   PLAYERNO, STREET

FROM     PLAYERS

WHERE    STREET REGEXP '[[:<:]]Street[[:>:]]'



Example 8.64:



CREATE TABLE BOOKS

      (BOOKNO              INTEGER NOT NULL PRIMARY KEY,

       AUTHORS             TEXT NOT NULL,

       TITLE               TEXT NOT NULL,

       YEAR_PUBLICATION    YEAR NOT NULL,

       SUMMARY             TEXT NOT NULL)

   ENGINE = MyISAM



Example 8.65:



SET @@SQL_MODE = 'PIPES_AS_CONCAT'

;

INSERT INTO BOOKS VALUES (1,

   'Ramez Elmasri and Shamkant B. Navathe',

   'Fundamentals of Database Systems', 2007, 

   'This market-leading text serves as a valued resource for '||

   'those who will interact with databases in future courses '||

   'and careers. Renowned for its accessible, comprehensive '||

   'coverage of models and real systems, it provides an '||

   'up-to-date introduction to modern database technologies.')

;

INSERT INTO BOOKS VALUES (2,

   'George Coulouris, Jean Dollimore and Tim Kindberg',

   'Distributed Systems: Concepts and Design', 2005,

   'This book provides broad and up-to-date coverage of the '||

   'principles and practice in the fast moving area of '||

   'distributed systems. It includes the key issues in the '||

   'debate between components and web services as the way '||

   'forward for industry. The depth of coverage will enable '||

   'students to evaluate existing distributed systems and '||

   'design new ones.')

;

INSERT INTO BOOKS VALUES (3,

    'Rick van der Lans',

    'Introduction to SQL: Mastering the Relational Database '||

    'Language', 2007,

    'This book provides a technical introduction to the '||

    'features of SQL. Aimed at those new to SQL, but not new '||

    'to programming, it gives the reader the essential skills '||

    'required to start programming with this language.')

;

INSERT INTO BOOKS VALUES (4,

    'Chris Date',

    'An Introduction to Database Systems', 2004,

    'Continuing in the eighth edition, this book provides a '||

    'comprehensive introduction to the now very large field of '||

    'database systems by providing a solid grounding in the '||

    'foundations of database technology. This new edition has '||

    'been rewritten and expanded to stay current with database '||

    'system trends.')

;

INSERT INTO BOOKS VALUES (5,

    'Thomas M. Connolly and Carolyn E. Begg',

    'DataBase Systems: A Practical Approach to Design, '||

    'Implementation and Management',

    2005,

    'A clear introduction to design implementation and management '||

    'issues, as well as an extensive treatment of database '||

    'languages and standards, make this book an indispensable '||

    'complete reference for database students and professionals.')



Example 8.66:



CREATE FULLTEXT INDEX INDEX_TITLE

    ON BOOKS (TITLE)

;

CREATE FULLTEXT INDEX INDEX_SUMMARY

    ON BOOKS (SUMMARY)



Example 8.67:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('design')

;

SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE)

         AGAINST ('design' IN NATURAL LANGUAGE MODE)



Example 8.68:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('to')



Example 8.69:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('database')



Example 8.70:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('practical')



Example 8.71:



SELECT   BOOKNO, MATCH(SUMMARY) AGAINST ('distributed')

FROM     BOOKS



Example 8.72:



SELECT   BOOKNO, MATCH(TITLE) AGAINST ('introduction')

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('introduction')



Example 8.73:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('practical distributed')



Example 8.74:



CREATE FULLTEXT INDEX INDEX_TITLE_SUMMARY

    ON BOOKS (TITLE, SUMMARY)



Example 8.75:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE, SUMMARY) AGAINST ('careers')



Example 8.76:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('database' IN BOOLEAN MODE)



Example 8.77:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE, SUMMARY)

         AGAINST ('introduction' IN BOOLEAN MODE)



Example 8.78:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) 

         AGAINST ('database design' IN BOOLEAN MODE)



Example 8.79:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) 

         AGAINST ('+database +design' IN BOOLEAN MODE)



Example 8.80:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) 

         AGAINST ('+database -design' IN BOOLEAN MODE)



Example 8.81:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE)

         AGAINST ('"design implementation"' IN BOOLEAN MODE)



Example 8.82:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('data*' IN BOOLEAN MODE)



Example 8.83:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('practical' 

         IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION)

;

SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('practical')

;

SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST (' DataBase Systems: A Practical

         Approach to Design, Implementation and Management')



Example 8.84:



SELECT   BOOKNO, TITLE

FROM     BOOKS

WHERE    MATCH(TITLE) AGAINST ('sql')



Example 8.85:



SELECT   PLAYERNO, LEAGUENO

FROM     PLAYERS

WHERE    LEAGUENO IS NOT NULL



Example 8.86:



SELECT   NAME, PLAYERNO, LEAGUENO

FROM     PLAYERS

WHERE    LEAGUENO <> '8467'

OR       LEAGUENO IS NULL



Example 8.87:



SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES)

;

SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    EXISTS

        (SELECT   *

         FROM     PENALTIES

         WHERE    PLAYERNO = PLAYERS.PLAYERNO)

;

SELECT   *

FROM     PENALTIES

WHERE    PLAYERNO = 6



Example 8.88:



SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    NOT EXISTS

        (SELECT   *

         FROM     TEAMS

         WHERE    PLAYERNO = PLAYERS.PLAYERNO)

;

SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    NOT EXISTS

        (SELECT   'nothing'

         FROM     TEAMS

         WHERE    PLAYERNO = PLAYERS.PLAYERNO)



Example 8.89:



SELECT   PLAYERNO, NAME, BIRTH_DATE

FROM     PLAYERS

WHERE    BIRTH_DATE <= ALL

        (SELECT   BIRTH_DATE

         FROM     PLAYERS)



Example 8.90:



SELECT   PLAYERNO, BIRTH_DATE

FROM     PLAYERS

WHERE    BIRTH_DATE < ALL

        (SELECT   BIRTH_DATE

         FROM     PLAYERS AS P INNER JOIN MATCHES AS M

                  ON P.PLAYERNO = M.PLAYERNO

         WHERE    M.TEAMNO = 2)



Example 8.91:



SELECT   DISTINCT TEAMNO, PLAYERNO

FROM     MATCHES AS M1

WHERE    WON <= ALL

        (SELECT   WON

         FROM     MATCHES AS M2

         WHERE    M1.TEAMNO = M2.TEAMNO)



Example 8.92:



SELECT   LEAGUENO, PLAYERNO

FROM     PLAYERS

WHERE    LEAGUENO >= ALL

        (SELECT   LEAGUENO

         FROM     PLAYERS)

;

SELECT   LEAGUENO, PLAYERNO

FROM     PLAYERS

WHERE    LEAGUENO >= ALL

        (SELECT   LEAGUENO

         FROM     PLAYERS

         WHERE    LEAGUENO IS NOT NULL)



Example 8.93:



SELECT   PLAYERNO, TOWN, LEAGUENO

FROM     PLAYERS AS P1

WHERE    LEAGUENO <= ALL

        (SELECT   P2.LEAGUENO

         FROM     PLAYERS AS P2

         WHERE    P1.TOWN = P2.TOWN)

;

SELECT   PLAYERNO, TOWN, LEAGUENO

FROM     PLAYERS AS P1

WHERE    LEAGUENO <= ALL

        (SELECT   P2.LEAGUENO

         FROM     PLAYERS AS P2

         WHERE    P1.TOWN = P2.TOWN

         AND      LEAGUENO IS NOT NULL)



Example 8.94:



SELECT   PLAYERNO, NAME, BIRTH_DATE

FROM     PLAYERS

WHERE    BIRTH_DATE > ANY

        (SELECT   BIRTH_DATE

         FROM     PLAYERS)



Example 8.95:



SELECT   DISTINCT PLAYERNO

FROM     PENALTIES

WHERE    PLAYERNO <> 27

AND      AMOUNT > ANY

        (SELECT   AMOUNT

         FROM     PENALTIES

         WHERE    PLAYERNO = 27)



Example 8.96:



SELECT   PLAYERNO, BIRTH_DATE, TOWN

FROM     PLAYERS AS P1

WHERE    BIRTH_DATE > ANY

        (SELECT   BIRTH_DATE

         FROM     PLAYERS AS P2

         WHERE    P1.TOWN = P2.TOWN)



Example 8.98:



SELECT   TEAMNO, DIVISION

FROM     TEAMS

WHERE    EXISTS

        (SELECT   *

         FROM     MATCHES

         WHERE    PLAYERNO = 44

         AND      TEAMNO = TEAMS.TEAMNO)



Example 8.99:



SELECT   DISTINCT PLAYERNO

FROM     PENALTIES AS PEN

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES

         WHERE    PAYMENTNO <> PEN.PAYMENTNO)



Example 8.100:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    1 <> ALL

        (SELECT   TEAMNO

         FROM     MATCHES

         WHERE    PLAYERNO = PLAYERS.PLAYERNO)



Example 8.101:



SELECT   TEAMNO

FROM     TEAMS

WHERE    NOT EXISTS

        (SELECT   *

         FROM     MATCHES

         WHERE    PLAYERNO = 57

         AND      TEAMNO = TEAMS.TEAMNO)



Example 8.102:



SELECT   PLAYERNO

FROM     PLAYERS AS P

WHERE    NOT EXISTS

        (SELECT   *

         FROM     TEAMS AS T

         WHERE    NOT EXISTS

                 (SELECT   *

                  FROM     MATCHES AS M

                  WHERE    T.TEAMNO = M.TEAMNO

                  AND      P.PLAYERNO = M.PLAYERNO))

;

SELECT   *

FROM     TEAMS AS T

WHERE    NOT EXISTS

        (SELECT   *

         FROM     MATCHES AS M

         WHERE    T.TEAMNO = M.TEAMNO

         AND      M.PLAYERNO = 27)



Example 8.103:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    NOT EXISTS

        (SELECT   *

         FROM     MATCHES AS M1

         WHERE    PLAYERNO = 57

         AND      NOT EXISTS

                 (SELECT   *

                  FROM     MATCHES AS M2

                  WHERE    M1.TEAMNO = M2.TEAMNO

                  AND      PLAYERS.PLAYERNO = M2.PLAYERNO))



Example 8.104:



SELECT   PLAYERNO

FROM     MATCHES

WHERE    TEAMNO IN

        (SELECT   TEAMNO

         FROM     TEAMS

         WHERE    TEAMNO NOT IN

                 (SELECT   TEAMNO

                  FROM     MATCHES

                  WHERE    PLAYERNO = 57))

;

SELECT   PLAYERNO

FROM     PLAYERS AS P

WHERE    NOT EXISTS

        (SELECT   *

         FROM     MATCHES AS M1

         WHERE    PLAYERNO = 57

         AND      NOT EXISTS

                 (SELECT   *

                  FROM     MATCHES AS M2

                  WHERE    M1.TEAMNO = M2.TEAMNO

                  AND      P.PLAYERNO = M2.PLAYERNO))

AND      PLAYERNO NOT IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    TEAMNO IN

                 (SELECT   TEAMNO

                  FROM     TEAMS

                  WHERE    TEAMNO NOT IN

                          (SELECT   TEAMNO

                           FROM     MATCHES

                           WHERE    PLAYERNO = 57)))



Example 8.105:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    TOWN = 'Stratford'

;

SELECT   PLAYERNO

FROM     PLAYERS

WHERE    NOT (TOWN = 'Stratford')

;

SELECT   PLAYERNO

FROM     PLAYERS

WHERE    TOWN <> 'Stratford'



Example 8.106:



SELECT   PLAYERNO

FROM     PENALTIES

WHERE    AMOUNT = 25

;

SELECT   PLAYERNO

FROM     PENALTIES

WHERE    AMOUNT <> 25

;

SELECT   PLAYERNO

FROM     PLAYERS

WHERE    PLAYERNO NOT IN

        (SELECT   PLAYERNO

         FROM     PENALTIES

         WHERE    AMOUNT = 25)



Example 8.107:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES

         WHERE    AMOUNT = 25)



Answer 8.1:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    AMOUNT > 60

;

SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    60 < AMOUNT

;

SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    AMOUNT - 60 > 0



Answer 8.5:



SELECT   DISTINCT PLAYERNO

FROM     MATCHES

WHERE    WON + LOST = 5



Answer 8.6:



SELECT   PLAYERNO, NAME, INITIALS

FROM     PLAYERS

WHERE    PLAYERNO =

        (SELECT   PLAYERNO

         FROM     PENALTIES

         WHERE    PAYMENTNO = 4)



Answer 8.7:



SELECT   PLAYERNO, NAME, INITIALS

FROM     PLAYERS

WHERE    PLAYERNO =

        (SELECT   PLAYERNO

         FROM     TEAMS

         WHERE    TEAMNO =

                 (SELECT   TEAMNO

                  FROM     MATCHES

                  WHERE    MATCHNO = 2))



Answer 8.8:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    BIRTH_DATE =

        (SELECT   BIRTH_DATE

         FROM     PLAYERS

         WHERE    NAME = 'Parmenter'

         AND      INITIALS = 'R')

AND      NOT (NAME = 'Parmenter'

              AND INITIALS = 'R')



Answer 8.9:



SELECT   MATCHNO

FROM     MATCHES

WHERE    WON =

        (SELECT   WON

         FROM     MATCHES

         WHERE    MATCHNO = 6)

AND      MATCHNO <> 6

AND      TEAMNO = 2



Answer 8.10:



SELECT   MATCHNO

FROM     MATCHES

WHERE   (WON, LOST) =

       ((SELECT   WON

         FROM     MATCHES

         WHERE    MATCHNO = 2),

        (SELECT   LOST

         FROM     MATCHES

         WHERE    MATCHNO = 8))



Answer 8.11:



SELECT   PLAYERNO, TOWN, STREET, HOUSENO

FROM     PLAYERS

WHERE   (TOWN, STREET, HOUSENO) <

        (SELECT   TOWN, STREET, HOUSENO

         FROM     PLAYERS

         WHERE    PLAYERNO = 100)

ORDER BY TOWN, STREET, HOUSENO



Answer 8.12:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    1965 <

        (SELECT   YEAR(BIRTH_DATE)

         FROM     PLAYERS

         WHERE    PLAYERS.PLAYERNO = PENALTIES.PLAYERNO)



Answer 8.13:



SELECT   PAYMENTNO, PLAYERNO

FROM     PENALTIES

WHERE    PLAYERNO =

        (SELECT   PLAYERNO

         FROM     TEAMS

         WHERE    TEAMS.PLAYERNO = PENALTIES.PLAYERNO)



Answer 8.14:



SELECT   PLAYERNO, NAME, TOWN

FROM     PLAYERS

WHERE    SEX = 'F'

AND      TOWN <> 'Stratford'

;

SELECT   PLAYERNO, NAME, TOWN

FROM     PLAYERS

WHERE    SEX = 'F'

AND      NOT (TOWN = 'Stratford')



Answer 8.15:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    JOINED >= 1970

AND      JOINED <= 1980

;

SELECT   PLAYERNO

FROM     PLAYERS

WHERE    NOT (JOINED < 1970 OR JOINED > 1980)



Answer 8.16:



SELECT   PLAYERNO, NAME, BIRTH_DATE

FROM     PLAYERS

WHERE    MOD(YEAR(BIRTH_DATE), 400) = 0

OR      (MOD(YEAR(BIRTH_DATE), 4) = 0

         AND NOT(MOD(YEAR(BIRTH_DATE), 100) = 0))



Answer 8.17:



SELECT   MATCHNO, NAME, INITIALS, DIVISION

FROM     MATCHES AS M, PLAYERS AS P, TEAMS AS T

WHERE    M.PLAYERNO = P.PLAYERNO

AND      M.TEAMNO = T.TEAMNO

AND      YEAR(BIRTH_DATE) > 1965

AND      WON > LOST



Answer 8.18:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    AMOUNT IN (50, 75, 100)



Answer 8.19:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    TOWN NOT IN ('Stratford', 'Douglas')

;

SELECT   PLAYERNO

FROM     PLAYERS

WHERE    NOT (TOWN IN ('Stratford', 'Douglas'))

;

SELECT   PLAYERNO

FROM     PLAYERS

WHERE    TOWN <> 'Stratford'

AND      TOWN <> 'Douglas'



Answer 8.20:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    AMOUNT IN

        (100, PAYMENTNO * 5,

        (SELECT   AMOUNT

         FROM     PENALTIES

         WHERE    PAYMENTNO = 2))



Answer 8.21:



SELECT   PLAYERNO, TOWN, STREET

FROM     PLAYERS

WHERE   (TOWN, STREET) IN 

       (('Stratford','Haseltine Lane'),

        ('Stratford','Edgecombe Way'))



Answer 8.22:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES)



Answer 8.23:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES

         WHERE    AMOUNT > 50)



Answer 8.24:



SELECT   TEAMNO, PLAYERNO

FROM     TEAMS

WHERE    DIVISION = 'first'

AND      PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    TOWN = 'Stratford')



Answer 8.25:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES)

AND      PLAYERNO NOT IN

        (SELECT   PLAYERNO

         FROM     TEAMS

         WHERE    DIVISION = 'first')

;

SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES

         WHERE    PLAYERNO NOT IN

                 (SELECT   PLAYERNO

                  FROM     TEAMS

                  WHERE    DIVISION = 'first'))



Answer 8.27:



SELECT   MATCHNO, PLAYERNO

FROM     MATCHES

WHERE   (WON, LOST) IN

        (SELECT   WON, LOST

         FROM     MATCHES

         WHERE    TEAMNO IN

                 (SELECT   TEAMNO

                  FROM     TEAMS

                  WHERE    DIVISION = 'second'))



Answer 8.28:



SELECT   PLAYERNO, NAME

FROM     PLAYERS AS P1

WHERE   (TOWN, STREET, HOUSENO, POSTCODE) IN

        (SELECT   TOWN, STREET, HOUSENO, POSTCODE

         FROM     PLAYERS AS P2

         WHERE    P1.PLAYERNO <> P2.PLAYERNO)



Answer 8.29:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    AMOUNT BETWEEN 50 AND 100



Answer 8.30:



SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    NOT (AMOUNT BETWEEN 50 AND 100)

;

SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    AMOUNT NOT BETWEEN 50 AND 100

;

SELECT   PAYMENTNO

FROM     PENALTIES

WHERE    AMOUNT < 50

OR       AMOUNT > 100



Answer 8.31:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    JOINED BETWEEN 

         YEAR(BIRTH_DATE + INTERVAL 16 YEAR + INTERVAL 1 DAY)

         AND YEAR(BIRTH_DATE + INTERVAL 40 YEAR ?INTERVAL 1 DAY)



Answer 8.32:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME LIKE '%is%'



Answer 8.33:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME LIKE '______'



Answer 8.34:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME LIKE '______%'

;

SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME LIKE '%______'

;

SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME LIKE '%______%'

;

SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    LENGTH(RTRIM(NAME)) > 6



Answer 8.35:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME LIKE '_r%r_'



Answer 8.36:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    TOWN LIKE '_@%%@%_' ESCAPE '@'



Answer 8.37:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME REGEXP 'en'



Answer 8.38:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME REGEXP '^n.*e$'



Answer 8.39:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    NAME REGEXP '[a-z]{9}'



Answer 8.40:



SELECT   BOOKNO, SUMMARY

FROM     BOOKS

WHERE    MATCH(SUMMARY)

         AGAINST ('students' IN NATURAL LANGUAGE MODE)



Answer 8.41:



SELECT   BOOKNO, SUMMARY

FROM     BOOKS

WHERE    MATCH(SUMMARY)

         AGAINST ('database' IN BOOLEAN MODE)



Answer 8.42:



SELECT   BOOKNO, SUMMARY

FROM     BOOKS

WHERE    MATCH(SUMMARY)

         AGAINST ('database languages' 

         IN NATURAL LANGUAGE MODE)



Answer 8.43:



SELECT   BOOKNO, SUMMARY

FROM     BOOKS

WHERE    MATCH(SUMMARY)

         AGAINST ('+database -languages' IN BOOLEAN MODE)



Answer 8.44:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    LEAGUENO IS NULL



Answer 8.46:



SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    EXISTS

        (SELECT   *

         FROM     TEAMS

         WHERE    PLAYERNO = PLAYERS.PLAYERNO)



Answer 8.47:



SELECT   NAME, INITIALS

FROM     PLAYERS AS P

WHERE    NOT EXISTS

        (SELECT   *

         FROM     TEAMS AS T

         WHERE    T.PLAYERNO = P.PLAYERNO

         AND      EXISTS

                 (SELECT   *

                  FROM     MATCHES AS M

                  WHERE    M.TEAMNO = T.TEAMNO

                  AND      M.PLAYERNO = 112))



Answer 8.48:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    BIRTH_DATE <= ALL

        (SELECT   BIRTH_DATE

         FROM     PLAYERS

         WHERE    TOWN = 'Stratford')

AND      TOWN = 'Stratford'



Answer 8.49:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO = ANY

        (SELECT   PLAYERNO

         FROM     PENALTIES)



Answer 8.50:



SELECT   PAYMENTNO, AMOUNT, PAYMENT_DATE

FROM     PENALTIES AS PEN1

WHERE    AMOUNT >= ALL

        (SELECT   AMOUNT

         FROM     PENALTIES AS PEN2

         WHERE    YEAR(PEN1.PAYMENT_DATE) =

                  YEAR(PEN2.PAYMENT_DATE))



Answer 8.51:



SELECT  (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    PLAYERNO <= ALL

                 (SELECT   PLAYERNO

                  FROM     PLAYERS)),

        (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    PLAYERNO >= ALL

                 (SELECT   PLAYERNO

                  FROM     PLAYERS))



Answer 8.53:



SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    TEAMNO IN

                 (SELECT   TEAMNO

                  FROM     TEAMS

                  WHERE    DIVISION = 'first'))

AND      PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    WON > LOST)

AND      PLAYERNO NOT IN

        (SELECT   PLAYERNO

         FROM     PENALTIES)



Answer 8.54:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    TEAMNO = 1)

AND      PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    TEAMNO = 2)



Answer 8.55:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    EXISTS

        (SELECT   *

         FROM     PENALTIES

         WHERE    PLAYERNO = PLAYERS.PLAYERNO)



Answer 8.56:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT  PLAYERNO

         FROM    MATCHES AS M1

         WHERE   WON > LOST

         AND     EXISTS

                (SELECT  *

                 FROM    MATCHES AS M2

                 WHERE   M1.PLAYERNO = M2.PLAYERNO

                 AND     WON > LOST

                 AND     M1.MATCHNO <> M2.MATCHNO))

;

SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    1 < (SELECT   COUNT(*)

              FROM     MATCHES

              WHERE    WON > LOST

              AND      PLAYERS.PLAYERNO = PLAYERNO)



Answer 8.57:



SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    NOT EXISTS

        (SELECT   *

         FROM     PENALTIES

         WHERE    PLAYERS.PLAYERNO = PLAYERNO

         AND      PAYMENT_DATE BETWEEN '1980-01-01'

                  AND '1980-12-31')



Answer 8.58:



SELECT   DISTINCT PLAYERNO

FROM     PENALTIES AS PEN1

WHERE    EXISTS

        (SELECT   *

         FROM     PENALTIES AS PEN2

         WHERE    PEN1.AMOUNT = PEN2.AMOUNT

         AND      PEN1.PAYMENTNO <> PEN2.PAYMENTNO)



Answer 8.59:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    PLAYERNO NOT IN

        (SELECT   PLAYERNO

         FROM     MATCHES WHERE WON = 3)



Answer 8.60:



SELECT   TEAMNO, DIVISION

FROM     TEAMS

WHERE    TEAMNO NOT IN

        (SELECT   TEAMNO

         FROM     MATCHES

         WHERE    PLAYERNO = 6)



Answer 8.61:



SELECT   DISTINCT PLAYERNO

FROM     MATCHES

WHERE    PLAYERNO NOT IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    TEAMNO IN

                 (SELECT   TEAMNO

                  FROM     MATCHES

                  WHERE    PLAYERNO = 57))



Example 9.1:



SELECT   *

FROM     PENALTIES

;

SELECT   PAYMENTNO, PLAYERNO, PAYMENT_DATE, AMOUNT

FROM     PENALTIES



Example 9.2:



SELECT   PENALTIES.*

FROM     PENALTIES INNER JOIN TEAMS

         ON PENALTIES.PLAYERNO = TEAMS.PLAYERNO

;

SELECT   PENALTIES.PAYMENTNO, PENALTIES.PLAYERNO,

         PENALTIES.PAYMENT_DATE, PENALTIES.AMOUNT

FROM     PENALTIES INNER JOIN TEAMS

         ON PENALTIES.PLAYERNO = TEAMS.PLAYERNO

;

SELECT   PEN.*

FROM     PENALTIES AS PEN INNER JOIN TEAMS

         ON PEN.PLAYERNO = TEAMS.PLAYERNO



Example 9.3:



SELECT   MATCHNO, 'Tally', WON - LOST,

         WON * 10

FROM     MATCHES



Example 9.4:



SELECT   TOWN

FROM     PLAYERS

;

SELECT   DISTINCT TOWN

FROM     PLAYERS



Example 9.5:



SELECT   STREET, TOWN

FROM     PLAYERS

;

SELECT   DISTINCT STREET, TOWN

FROM     PLAYERS

;

SELECT   TOWN

FROM     PLAYERS

;

SELECT   ALL TOWN

FROM     PLAYERS



Example 9.6:



SELECT   DISTINCT LEAGUENO

FROM     PLAYERS



Example 9.7:



SELECT   DISTINCT *

FROM    (SELECT   1 AS A, 'Hello' AS B, 4 AS C UNION

         SELECT   1, 'Hello', NULL UNION

         SELECT   1, 'Hello', NULL UNION

         SELECT   1, NULL, NULL) AS X



Example 9.8:



SELECT   COUNT(*)

FROM     PLAYERS



Example 9.9:



SELECT   COUNT(*)

FROM     PLAYERS

WHERE    TOWN = 'Stratford'

;

SELECT   COUNT(*), PLAYERNO

FROM     PLAYERS

;

SELECT   'The number of players', COUNT(*)

FROM     PLAYERS



Example 9.10:



SELECT   COUNT(LEAGUENO)

FROM     PLAYERS

;

SELECT   COUNT(ALL LEAGUENO)

FROM     PLAYERS



Example 9.11:



SELECT   COUNT(DISTINCT TOWN)

FROM     PLAYERS



Example 9.12:



SELECT   COUNT(DISTINCT SUBSTR(NAME, 1, 1))

FROM     PLAYERS



Example 9.13:



SELECT   COUNT(DISTINCT YEAR(PAYMENT_DATE))

FROM     PENALTIES



Example 9.14:



SELECT   COUNT(DISTINCT TOWN), COUNT(DISTINCT SEX)

FROM     PLAYERS



Example 9.15:



SELECT   PLAYERNO, NAME

FROM     PLAYERS AS P

WHERE   (SELECT   COUNT(*)

         FROM     PENALTIES AS PEN

         WHERE    P.PLAYERNO = PEN.PLAYERNO)

         >

        (SELECT   COUNT(*)

         FROM     MATCHES AS M

         WHERE    P.PLAYERNO = M.PLAYERNO)



Example 9.16:



SELECT   PLAYERNO, NAME,

        (SELECT   COUNT(*)

         FROM     PENALTIES

         WHERE    PENALTIES.PLAYERNO = PLAYERS.PLAYERNO)

         AS NUMBER

FROM     PLAYERS

WHERE   (SELECT   COUNT(*)

         FROM     PENALTIES

         WHERE    PENALTIES.PLAYERNO = PLAYERS.PLAYERNO) >= 2

;

SELECT   PLAYERNO, NAME, NUMBER

FROM    (SELECT   PLAYERNO, NAME,

                 (SELECT   COUNT(*)

                  FROM     PENALTIES

                  WHERE    PENALTIES.PLAYERNO = 

                           PLAYERS.PLAYERNO)

                  AS NUMBER

         FROM     PLAYERS) AS PN

WHERE    NUMBER >= 2



Example 9.17:



SELECT (SELECT   COUNT(*)

        FROM     PENALTIES),

       (SELECT   COUNT(*)

        FROM     MATCHES)



Example 9.18:



SELECT   MAX(AMOUNT)

FROM     PENALTIES



Example 9.19:



SELECT   MIN(AMOUNT)

FROM     PENALTIES

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    TOWN = 'Stratford')



Example 9.20:



SELECT   COUNT(*)

FROM     PENALTIES

WHERE    AMOUNT =

        (SELECT   MIN(AMOUNT)

         FROM     PENALTIES)



Example 9.21:



SELECT   DISTINCT TEAMNO, PLAYERNO

FROM     MATCHES AS M1

WHERE    WON =

        (SELECT   MAX(WON)

         FROM     MATCHES AS M2

         WHERE    M1.TEAMNO = M2.TEAMNO)



Example 9.22:



SELECT   (MAX(AMOUNT) - MIN(AMOUNT)) * 100

FROM     PENALTIES



Example 9.23:



SELECT   SUBSTR(MAX(NAME), 1, 1)

FROM     PLAYERS



Example 9.24:



SELECT   MAX(LEAGUENO)

FROM     PLAYERS

WHERE    TOWN = 'Midhurst'



Example 9.25:



SELECT   CASE WHEN MIN(LEAGUENO) IS NULL 

            THEN 'Unknown' 

            ELSE MIN(LEAGUENO)

         END

FROM     PLAYERS

WHERE    TOWN = 'Amsterdam'



Example 9.26:



SELECT   PLAYERNO, AMOUNT, PAYMENT_DATE

FROM     PENALTIES AS PEN1

WHERE    AMOUNT =

        (SELECT   MAX(AMOUNT)

         FROM     PENALTIES AS PEN2

         WHERE    PEN2.PLAYERNO = PEN1.PLAYERNO)



Example 9.27:



SELECT   PLAYERNO,

        (SELECT   MAX(AMOUNT)

         FROM     PENALTIES

         WHERE    PENALTIES.PLAYERNO = PLAYERS.PLAYERNO)

         AS HIGHESTPENALTY,

        (SELECT   MAX(WON)

         FROM     MATCHES

         WHERE    MATCHES.PLAYERNO = PLAYERS.PLAYERNO)

         AS NUMBEROFSETS

FROM     PLAYERS



Example 9.28:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE   (SELECT   MIN(AMOUNT)

         FROM     PENALTIES

         WHERE    PENALTIES.PLAYERNO = PLAYERS.PLAYERNO) =

        (SELECT   MAX(AMOUNT)

         FROM     PENALTIES

         WHERE    PENALTIES.PLAYERNO = PLAYERS.PLAYERNO)



Example 9.29:



SELECT   SUM(AMOUNT)

FROM     PENALTIES

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    TOWN = 'Inglewood')

;

SELECT   SUM(DISTINCT AMOUNT)

FROM     PENALTIES

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    TOWN = 'Inglewood')



Example 9.30:



SELECT   AVG(AMOUNT)

FROM     PENALTIES

WHERE    PLAYERNO = 44



Example 9.31:



SELECT   DISTINCT PLAYERNO

FROM     PENALTIES

WHERE    AMOUNT >

        (SELECT   AVG(AMOUNT)

         FROM     PENALTIES)



Example 9.32:



SELECT   AVG(DISTINCT AMOUNT)

FROM     PENALTIES



Example 9.33:



SELECT   AVG(LENGTH(RTRIM(NAME))), MAX(LENGTH(RTRIM(NAME)))

FROM     PLAYERS



Example 9.34:



SELECT   PAYMENTNO, AMOUNT, 

         ABS(AMOUNT - (SELECT AVG(AMOUNT)

                       FROM   PENALTIES)) AS DIFFERENCE

FROM     PENALTIES AS P



Example 9.35:



SELECT   VARIANCE(AMOUNT)

FROM     PENALTIES

WHERE    PLAYERNO = 44

;

SELECT   AMOUNT ?

        (SELECT   AVG(AMOUNT)

         FROM     PENALTIES

         WHERE    PLAYERNO = 44)

FROM     PENALTIES

WHERE    PLAYERNO = 44

SELECT   SUM(P)

FROM    (SELECT   POWER(AMOUNT -

                 (SELECT   AVG(AMOUNT)

                  FROM     PENALTIES

                  WHERE    PLAYERNO = 44),2) AS P

         FROM     PENALTIES

         WHERE    PLAYERNO = 44) AS POWERS

;

SELECT   SUM(P) / 

        (SELECT COUNT(*) FROM PENALTIES WHERE PLAYERNO = 44)

FROM    (SELECT   POWER(AMOUNT -

                  (SELECT   AVG(AMOUNT)

                  FROM     PENALTIES

                  WHERE    PLAYERNO = 44),2) AS P

         FROM     PENALTIES

         WHERE    PLAYERNO = 44) AS POWERS



Example 9.36:



SELECT   STDDEV(AMOUNT)

FROM     PENALTIES

WHERE    PLAYERNO = 44



Example 9.37:



SELECT   VAR_SAMP(AMOUNT), VARIANCE(AMOUNT)

FROM     PENALTIES



Example 9.38:



SELECT   STDDEV_SAMP(AMOUNT), STDDEV(AMOUNT)

FROM     PENALTIES



Example 9.39:



CREATE TABLE BITS 

      (BIN_VALUE INTEGER NOT NULL PRIMARY KEY)

;

INSERT INTO BITS 

VALUES (CONV(001,2,16)),

       (CONV(011,2,16)),

       (CONV(111,2,16))



Example 9.40:



SELECT   BIN(BIT_OR(BIN_VALUE))

FROM     BITS



Answer 9.4:



SELECT   COUNT(*), MAX(AMOUNT)

FROM     PENALTIES



Answer 9.5:



SELECT   COUNT(DISTINCT POSITION)

FROM     COMMITTEE_MEMBERS



Answer 9.6:



SELECT   COUNT(LEAGUENO)

FROM     PLAYERS

WHERE    TOWN = 'Inglewood'



Answer 9.7:



SELECT   TEAMNO, DIVISION,

        (SELECT   COUNT(*)

         FROM     MATCHES

         WHERE    TEAMS.TEAMNO = MATCHES.TEAMNO)

FROM     TEAMS



Answer 9.8:



SELECT   PLAYERNO, NAME,

        (SELECT   COUNT(*)

         FROM     MATCHES

         WHERE    MATCHES.PLAYERNO = PLAYERS.PLAYERNO

         AND      WON > LOST)

FROM     PLAYERS



Answer 9.9:



SELECT 'Number of players' AS TABLES,

        (SELECT COUNT(*) FROM PLAYERS) AS NUMBERS UNION

SELECT 'Number of teams',

        (SELECT COUNT(*) FROM TEAMS) UNION

SELECT 'Number of matches',

        (SELECT COUNT(*) FROM MATCHES)



Answer 9.10:



SELECT   MIN(WON)

FROM     MATCHES

WHERE    WON > LOST



Answer 9.11:



SELECT   PLAYERNO,

        (SELECT   MAX(AMOUNT)

         FROM     PENALTIES

         WHERE    PENALTIES.PLAYERNO =

                  PLAYERS.PLAYERNO) -

        (SELECT   MIN(AMOUNT)

         FROM     PENALTIES

         WHERE    PENALTIES.PLAYERNO =

                  PLAYERS.PLAYERNO)

FROM     PLAYERS



Answer 9.12:



SELECT   PLAYERNO, BIRTH_DATE

FROM     PLAYERS

WHERE    YEAR(BIRTH_DATE) =

        (SELECT   MAX(YEAR(BIRTH_DATE))

         FROM     PLAYERS

         WHERE    PLAYERNO IN

                 (SELECT   PLAYERNO

                  FROM     MATCHES

                  WHERE    TEAMNO = 1))



Answer 9.14:



SELECT   AVG(AMOUNT)

FROM     PENALTIES

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    TEAMNO = 1)



Answer 9.15:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE   (SELECT   SUM(AMOUNT)

         FROM     PENALTIES

         WHERE    PENALTIES.PLAYERNO = PLAYERS.PLAYERNO) 

         > 100



Answer 9.16:



SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    WON >

                 (SELECT   SUM(WON)

                  FROM     MATCHES

                  WHERE    PLAYERNO = 27))



Answer 9.17:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE   (SELECT   SUM(WON)

         FROM     MATCHES

         WHERE    MATCHES.PLAYERNO = 

                  PLAYERS.PLAYERNO) = 8



Answer 9.18:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    LENGTH(RTRIM(NAME)) >

        (SELECT   AVG(LENGTH(RTRIM(NAME)))

         FROM     PLAYERS)



Answer 9.19:



SELECT   PLAYERNO,

        (SELECT   MAX(AMOUNT)

         FROM     PENALTIES

         WHERE    PENALTIES.PLAYERNO =

                  PLAYERS.PLAYERNO) -

        (SELECT   AVG(AMOUNT)

         FROM     PENALTIES

         WHERE    PENALTIES.PLAYERNO =

                  PLAYERS.PLAYERNO)

FROM     PLAYERS



Answer 9.20:



SELECT   PLAYERNO,

         REPEAT('*',

            CAST((SELECT   AVG(AMOUNT)

                  FROM     PENALTIES

                  WHERE    PENALTIES.PLAYERNO =

                           PLAYERS.PLAYERNO)/10

                  AS SIGNED INTEGER))

FROM     PLAYERS



Answer 9.21:



SELECT   SQRT(SUM(P) /

        (SELECT COUNT(*) FROM PENALTIES WHERE 

                         PLAYERNO = 44))

FROM    (SELECT   POWER(AMOUNT -

                  (SELECT   AVG(AMOUNT)

                  FROM     PENALTIES

                  WHERE    PLAYERNO = 44),2) AS P

         FROM     PENALTIES

         WHERE    PLAYERNO = 44) AS POWERS



Example 10.1:



SELECT   TOWN

FROM     PLAYERS

GROUP BY TOWN



Example 10.2:



SELECT   TOWN, COUNT(*)

FROM     PLAYERS

GROUP BY TOWN



Example 10.3:



SELECT   TEAMNO, COUNT(*), SUM(WON)

FROM     MATCHES

GROUP BY TEAMNO



Example 10.4:



SELECT   TEAMNO, COUNT(*)

FROM     MATCHES

WHERE    TEAMNO IN

        (SELECT   TEAMNO

         FROM     TEAMS INNER JOIN PLAYERS

                  ON TEAMS.PLAYERNO = PLAYERS.PLAYERNO

         WHERE    TOWN = 'Eltham')

GROUP BY TEAMNO



Example 10.5:



SELECT   AMOUNT, COUNT(*), SUM(AMOUNT)

FROM     PENALTIES

GROUP BY AMOUNT



Example 10.6:



SELECT   TEAMNO, PLAYERNO

FROM     MATCHES

GROUP BY TEAMNO, PLAYERNO

;

SELECT   TEAMNO, PLAYERNO

FROM     MATCHES

GROUP BY PLAYERNO, TEAMNO

;

SELECT   TEAMNO, PLAYERNO, SUM(WON),

         COUNT(*), MIN(LOST)

FROM     MATCHES

GROUP BY TEAMNO, PLAYERNO



Example 10.7:



SELECT   P.PLAYERNO, NAME, SUM(AMOUNT)

FROM     PLAYERS AS P INNER JOIN PENALTIES AS PEN

         ON P.PLAYERNO = PEN.PLAYERNO

GROUP BY P.PLAYERNO, NAME



Example 10.8:



SELECT   YEAR(PAYMENT_DATE), COUNT(*)

FROM     PENALTIES

GROUP BY YEAR(PAYMENT_DATE)



Example 10.9:



SELECT   TRUNCATE(PLAYERNO/25,0), COUNT(*), MAX(PLAYERNO)

FROM     PLAYERS

GROUP BY TRUNCATE(PLAYERNO/25,0)



Example 10.10:



SELECT   LEAGUENO

FROM     PLAYERS

GROUP BY LEAGUENO



Example 10.11:



SELECT   TEAMNO, COUNT(*)

FROM     MATCHES

GROUP BY TEAMNO

ORDER BY TEAMNO DESC

;

SELECT   TEAMNO, COUNT(*)

FROM     MATCHES

GROUP BY TEAMNO DESC



Example 10.12:



SELECT   CAST(AMOUNT * 100 AS SIGNED INTEGER) 

         AS AMOUNT_IN_CENTS

FROM     PENALTIES

GROUP BY AMOUNT



Example 10.13:



SELECT   TEAMNO, GROUP_CONCAT(PLAYERNO)

FROM     MATCHES

GROUP BY TEAMNO



Example 10.14:



SELECT   TEAMNO, GROUP_CONCAT(TEAMNO)

FROM     MATCHES

GROUP BY TEAMNO



Example 10.15:



SELECT   GROUP_CONCAT(PAYMENTNO)

FROM     PENALTIES



Example 10.16:



SET @@GROUP_CONCAT_MAX_LEN=7

;

SELECT   TEAMNO, GROUP_CONCAT(TEAMNO)

FROM     MATCHES

GROUP BY TEAMNO



Example 10.17:



SELECT   AVG(TOTAL)

FROM    (SELECT   PLAYERNO, SUM(AMOUNT) AS TOTAL

         FROM     PENALTIES

         GROUP BY PLAYERNO) AS TOTALS

WHERE    PLAYERNO IN 

        (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    TOWN = 'Stratford' OR TOWN = 'Inglewood')



Example 10.18:



SELECT   PLAYERS.PLAYERNO, NAME, NUMBER_OF_PENALTIES,

         NUMBER_OF_TEAMS

FROM     PLAYERS,

        (SELECT   PLAYERNO, COUNT(*) AS NUMBER_OF_PENALTIES

         FROM     PENALTIES

         GROUP BY PLAYERNO) AS NUMBER_PENALTIES,

        (SELECT   PLAYERNO, COUNT(*) AS NUMBER_OF_TEAMS

         FROM     TEAMS

         GROUP BY PLAYERNO) AS NUMBER_TEAMS

WHERE    PLAYERS.PLAYERNO = NUMBER_PENALTIES.PLAYERNO

AND      PLAYERS.PLAYERNO = NUMBER_TEAMS.PLAYERNO

;

SELECT   PLAYERS.PLAYERNO, NAME,

        (SELECT   COUNT(*) 

         FROM     PENALTIES

         WHERE    PLAYERS.PLAYERNO =

                  PENALTIES.PLAYERNO) AS NUMBER_OF_PENALTIES,

        (SELECT   COUNT(*)

         FROM     TEAMS

         WHERE    PLAYERS.PLAYERNO =

                  TEAMS.PLAYERNO) AS NUMBER_OF_TEAMS

FROM     PLAYERS



Example 10.19:



SELECT   DISTINCT M.PLAYERNO, NUMBERP

FROM     MATCHES AS M LEFT OUTER JOIN

           (SELECT   PLAYERNO, COUNT(*) AS NUMBERP

            FROM     PENALTIES

            GROUP BY PLAYERNO) AS NP

         ON M.PLAYERNO = NP.PLAYERNO



Example 10.20:



SELECT   GROUPS.PGROUP, SUM(P.AMOUNT)

FROM     PENALTIES AS P,

        (SELECT 1 AS PGROUP, '1980-01-01' AS START, 

                '1981-06-30' AS END

         UNION

         SELECT 2, '1981-07-01', '1982-12-31'

         UNION

         SELECT 3, '1983-01-01', '1984-12-31') AS GROUPS

WHERE    P.PAYMENT_DATE BETWEEN START AND END

GROUP BY GROUPS.PGROUP

ORDER BY GROUPS.PGROUP



Example 10.21:



SELECT   P1.PAYMENTNO, P1.AMOUNT, SUM(P2.AMOUNT)

FROM     PENALTIES AS P1, PENALTIES AS P2

WHERE    P1.PAYMENTNO >= P2. PAYMENTNO

GROUP BY P1. PAYMENTNO, P1.AMOUNT

ORDER BY P1. PAYMENTNO



Example 10.22:



SELECT   P1.PAYMENTNO, P1.AMOUNT,

         (P1.AMOUNT * 100) / SUM(P2.AMOUNT)

FROM     PENALTIES AS P1, PENALTIES AS P2

GROUP BY P1.PAYMENTNO, P1.AMOUNT

ORDER BY P1.PAYMENTNO



Example 10.23:



SELECT   PLAYERNO, SUM(AMOUNT)

FROM     PENALTIES

GROUP BY PLAYERNO

UNION

SELECT   NULL, SUM(AMOUNT)

FROM     PENALTIES

;

SELECT   PLAYERNO, SUM(AMOUNT)

FROM     PENALTIES

GROUP BY PLAYERNO WITH ROLLUP



Example 10.24:



SELECT   SEX, TOWN, COUNT(*)

FROM     PLAYERS

GROUP BY SEX, TOWN WITH ROLLUP



Answer 10.1:



SELECT   JOINED

FROM     PLAYERS

GROUP BY JOINED



Answer 10.2:



SELECT   JOINED, COUNT(*)

FROM     PLAYERS

GROUP BY JOINED



Answer 10.3:



SELECT   PLAYERNO, AVG(AMOUNT), COUNT(*)

FROM     PENALTIES

GROUP BY PLAYERNO



Answer 10.4:



SELECT   TEAMNO, COUNT(*), SUM(WON)

FROM     MATCHES

WHERE    TEAMNO IN

        (SELECT   TEAMNO

         FROM     TEAMS

         WHERE    DIVISION = 'first')

GROUP BY TEAMNO



Answer 10.5:



SELECT   WON, LOST, COUNT(*)

FROM     MATCHES

WHERE    WON > LOST

GROUP BY WON, LOST

ORDER BY WON, LOST



Answer 10.6:



SELECT   P.TOWN, T.DIVISION, SUM(WON)

FROM    (MATCHES AS M INNER JOIN PLAYERS AS P

         ON M.PLAYERNO = P.PLAYERNO) 

         INNER JOIN TEAMS AS T

         ON M.TEAMNO = T.TEAMNO

GROUP BY P.TOWN, T.DIVISION

ORDER BY P.TOWN



Answer 10.7:



SELECT   NAME, INITIALS, COUNT(*)

FROM     PLAYERS AS P INNER JOIN PENALTIES AS PEN

         ON P.PLAYERNO = PEN.PLAYERNO

WHERE    P.TOWN = 'Inglewood'

GROUP BY P.PLAYERNO, NAME, INITIALS



Answer 10.8:



SELECT   T.TEAMNO, DIVISION, SUM(WON)

FROM     TEAMS AS T, MATCHES AS M

WHERE    T.TEAMNO = M.TEAMNO

GROUP BY T.TEAMNO, DIVISION



Answer 10.9:



SELECT   LENGTH(RTRIM(NAME)), COUNT(*)

FROM     PLAYERS

GROUP BY LENGTH(RTRIM(NAME))



Answer 10.10:



SELECT   ABS(WON - LOST), COUNT(*)

FROM     MATCHES

GROUP BY ABS(WON ?LOST)



Answer 10.11:



SELECT   YEAR(BEGIN_DATE), MONTH(BEGIN_DATE), COUNT(*)

FROM     COMMITTEE_MEMBERS

GROUP BY YEAR(BEGIN_DATE), MONTH(BEGIN_DATE)

ORDER BY YEAR(BEGIN_DATE), MONTH(BEGIN_DATE)



Answer 10.14:



SELECT   AVG(NUMBERS)

FROM    (SELECT   COUNT(*) AS NUMBERS

         FROM     PLAYERS

         GROUP BY TOWN) AS TOWNS



Answer 10.15:



SELECT   TEAMS.TEAMNO, DIVISION, NUMBER_PLAYERS

FROM     TEAMS LEFT OUTER JOIN

        (SELECT   TEAMNO, COUNT(*) AS NUMBER_PLAYERS

         FROM     MATCHES

         GROUP BY TEAMNO) AS M

         ON (TEAMS.TEAMNO = M.TEAMNO)



Answer 10.16:



SELECT   PLAYERS.PLAYERNO, NAME, SUM_AMOUNT, 

         NUMBER_TEAMS

FROM    (PLAYERS LEFT OUTER JOIN

        (SELECT   PLAYERNO, SUM(AMOUNT) AS SUM_AMOUNT

         FROM     PENALTIES

         GROUP BY PLAYERNO) AS TOTALS

         ON (PLAYERS.PLAYERNO = TOTALS.PLAYERNO))

            LEFT OUTER JOIN

           (SELECT   PLAYERNO, COUNT(*) AS NUMBER_TEAMS

            FROM     TEAMS

            WHERE    DIVISION = 'first'

            GROUP BY PLAYERNO) AS NUMBERS

            ON (PLAYERS.PLAYERNO = NUMBERS.PLAYERNO)



Answer 10.17:



SELECT   TEAMNO, COUNT(DISTINCT PLAYERNO)

FROM     MATCHES

WHERE    TEAMNO IN

        (SELECT   TEAMNO

         FROM     PLAYERS AS P INNER JOIN TEAMS AS T

                  ON P.PLAYERNO = T.PLAYERNO

         AND      TOWN = 'Stratford')

AND      WON > LOST

GROUP BY TEAMNO



Answer 10.18:



SELECT   PLAYERNO, NAME, JOINED - AVERAGE

FROM     PLAYERS,

        (SELECT   AVG(JOINED) AS AVERAGE

         FROM     PLAYERS) AS T



Answer 10.19:



SELECT   PLAYERNO, NAME, JOINED ?AVERAGE

FROM     PLAYERS,

        (SELECT   TOWN, AVG(JOINED) AS AVERAGE

         FROM     PLAYERS

         GROUP BY TOWN) AS TOWNS

WHERE    PLAYERS.TOWN = TOWNS.TOWN



Answer 10.20:



SELECT   TEAMNO, COUNT(*)

FROM     MATCHES

GROUP BY TEAMNO WITH ROLLUP



Answer 10.21:



SELECT   P.NAME, T.DIVISION, SUM(WON)

FROM    (MATCHES AS M INNER JOIN PLAYERS AS P

         ON M.PLAYERNO = P.PLAYERNO)

         INNER JOIN TEAMS AS T

         ON M.TEAMNO = T.TEAMNO

GROUP BY P.NAME, T.DIVISION WITH ROLLUP



Example 11.1:



SELECT   PLAYERNO

FROM     PENALTIES

GROUP BY PLAYERNO

HAVING   COUNT(*) > 1



Example 11.2:



SELECT   PLAYERNO

FROM     PENALTIES

GROUP BY PLAYERNO

HAVING   MAX(YEAR(PAYMENT_DATE)) = 1984



Example 11.3:



SELECT   PLAYERNO, SUM(AMOUNT)

FROM     PENALTIES

GROUP BY PLAYERNO

HAVING   SUM(AMOUNT) > 150



Example 11.4:



SELECT   PLAYERNO, SUM(AMOUNT)

FROM     PENALTIES

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     TEAMS)

GROUP BY PLAYERNO

HAVING   SUM(AMOUNT) > 80



Example 11.5:



SELECT   PLAYERNO, SUM(AMOUNT)

FROM     PENALTIES

GROUP BY PLAYERNO

HAVING   SUM(AMOUNT) >= ALL

        (SELECT   SUM(AMOUNT)

         FROM     PENALTIES

         GROUP BY PLAYERNO)



Example 11.6:



SELECT   SUM(AMOUNT)

FROM     PENALTIES

HAVING   SUM(AMOUNT) >= 250



Example 11.7:



SELECT   GROUP_CONCAT(PLAYERNO) AS LIST

FROM     MATCHES

HAVING   TRUE



Answer 11.1:



SELECT   TOWN

FROM     PLAYERS

GROUP BY TOWN

HAVING   COUNT(*) > 4



Answer 11.2:



SELECT   PLAYERNO

FROM     PENALTIES

GROUP BY PLAYERNO

HAVING   SUM(AMOUNT) > 150



Answer 11.3:



SELECT   NAME, INITIALS, COUNT(*)

FROM     PLAYERS INNER JOIN PENALTIES

         ON PLAYERS.PLAYERNO = PENALTIES.PLAYERNO

GROUP BY PLAYERS.PLAYERNO, NAME, INITIALS

HAVING   COUNT(*) > 1



Answer 11.4:



SELECT   TEAMNO, COUNT(*)

FROM     MATCHES

GROUP BY TEAMNO

HAVING   COUNT(*) >= ALL

        (SELECT   COUNT(*)

         FROM     MATCHES

         GROUP BY TEAMNO)



Answer 11.5:



SELECT   TEAMNO, DIVISION

FROM     TEAMS

WHERE    TEAMNO IN

        (SELECT   TEAMNO

         FROM     MATCHES

         GROUP BY TEAMNO

         HAVING   COUNT(DISTINCT PLAYERNO) > 4)



Answer 11.6:



SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES

         WHERE    AMOUNT > 40

         GROUP BY PLAYERNO

         HAVING   COUNT(*) >= 2)



Answer 11.7:



SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES

         GROUP BY PLAYERNO

         HAVING   SUM(AMOUNT) >= ALL

                 (SELECT   SUM(AMOUNT)

                  FROM     PENALTIES

                  GROUP BY PLAYERNO))



Answer 11.8:



SELECT   PLAYERNO

FROM     PENALTIES

WHERE    PLAYERNO <> 104

GROUP BY PLAYERNO

HAVING   SUM(AMOUNT)  =

        (SELECT   SUM(AMOUNT) * 2

         FROM     PENALTIES

         WHERE    PLAYERNO = 104)



Answer 11.9:



SELECT   PLAYERNO

FROM     PENALTIES

WHERE    PLAYERNO <> 6

GROUP BY PLAYERNO

HAVING   COUNT(*) =

        (SELECT   COUNT(*)

         FROM     PENALTIES

         WHERE    PLAYERNO = 6)



Answer 11.10:



SELECT   P.PLAYERNO, P.NAME

FROM     PLAYERS AS P, MATCHES AS M1

WHERE    P.PLAYERNO = M1.PLAYERNO

GROUP BY P.PLAYERNO, P.NAME

HAVING   SUM(WON) >

        (SELECT   SUM(LOST)

         FROM     MATCHES AS M2

         WHERE    M2.PLAYERNO = P.PLAYERNO

         GROUP BY M2.PLAYERNO)

Example 12.1:



SELECT   PAYMENTNO, PLAYERNO

FROM     PENALTIES

ORDER BY PLAYERNO



Example 12.2:



SELECT   PLAYERNO, AMOUNT

FROM     PENALTIES

ORDER BY PLAYERNO, AMOUNT



Example 12.3:



SELECT   AMOUNT

FROM     PENALTIES

ORDER BY PLAYERNO, AMOUNT



Example 12.4:



SELECT   NAME, INITIALS, PLAYERNO

FROM     PLAYERS

ORDER BY SUBSTR(NAME, 1, 1)



Example 12.5:



SELECT   PLAYERNO, AMOUNT

FROM     PENALTIES

ORDER BY ABS(AMOUNT - (SELECT AVG(AMOUNT) FROM PENALTIES))



Example 12.6:



SELECT   PLAYERNO, AMOUNT

FROM     PENALTIES AS P1

ORDER BY (SELECT   AVG(AMOUNT) 

          FROM     PENALTIES AS P2

          WHERE    P1.PLAYERNO = P2.PLAYERNO)



Example 12.7:



SELECT   PLAYERNO, SUM(AMOUNT)

FROM     PENALTIES

GROUP BY PLAYERNO

ORDER BY 2



Example 12.8:



SELECT   PLAYERNO, NAME,

        (SELECT   SUM(AMOUNT) 

         FROM     PENALTIES AS PEN 

         WHERE    PEN.PLAYERNO=P.PLAYERNO)

FROM     PLAYERS AS P

ORDER BY 3

;

SELECT   PLAYERNO, NAME,

        (SELECT   SUM(AMOUNT) 

         FROM     PENALTIES AS PEN 

         WHERE    PEN.PLAYERNO=P.PLAYERNO) AS TOTAL

FROM     PLAYERS AS P

ORDER BY TOTAL



Example 12.9:



SELECT   PLAYERNO, AMOUNT

FROM     PENALTIES

ORDER BY PLAYERNO DESC, AMOUNT ASC



Example 12.10:



CREATE TABLE CODES

      (CODE   CHAR(4) NOT NULL)

;

INSERT INTO CODES VALUES ('abc')

;

INSERT INTO CODES VALUES ('ABC')

;

INSERT INTO CODES VALUES ('-abc')

;

INSERT INTO CODES VALUES ('a bc')

;

INSERT INTO CODES VALUES ('ab')

;

INSERT INTO CODES VALUES ('9abc')

;

SELECT   *

FROM     CODES

ORDER BY CODE



Example 12.11:



SELECT   DISTINCT LEAGUENO

FROM     PLAYERS

ORDER BY LEAGUENO DESC



Answer 12.3:



SELECT   PLAYERNO, TEAMNO, WON - LOST

FROM     MATCHES

ORDER BY 3 ASC



Example 13.1:



SELECT   MAX(PLAYERNO)

FROM     PLAYERS

;

SELECT   PLAYERNO, NAME

FROM     PLAYERS AS P1

WHERE    4 >

        (SELECT   COUNT(*)

         FROM     PLAYERS AS P2

         WHERE    P1.PLAYERNO < P2.PLAYERNO)

ORDER BY PLAYERNO DESC

;

SELECT   PLAYERNO, NAME

FROM     PLAYERS

ORDER BY PLAYERNO DESC

LIMIT    4



Example 13.2:



SELECT   LEAGUENO, PLAYERNO, NAME

FROM     PLAYERS

ORDER BY LEAGUENO ASC

LIMIT    5



Example 13.3:



SELECT   PLAYERNO, COUNT(*) AS NUMBER

FROM     MATCHES

WHERE    WON > LOST

GROUP BY PLAYERNO

ORDER BY NUMBER DESC

LIMIT    3



Example 13.4:



SELECT   PLAYERNO, COUNT(*) AS NUMBER

FROM     MATCHES

WHERE    WON > LOST

GROUP BY PLAYERNO

ORDER BY NUMBER DESC, PLAYERNO DESC

LIMIT    3



Example 13.5:



SELECT   *

FROM    (SELECT   PLAYERNO, COUNT(*) AS NUMBER

         FROM     MATCHES

         WHERE    WON > LOST

         GROUP BY PLAYERNO

         ORDER BY NUMBER DESC, PLAYERNO DESC

         LIMIT    3) AS T

ORDER BY 1



Example 13.6:



SELECT   AVG(AMOUNT)

FROM    (SELECT   AMOUNT

         FROM     PENALTIES

         ORDER BY AMOUNT

         LIMIT    4) AS T



Example 13.7:



SELECT   MIN(AMOUNT)

FROM    (SELECT   AMOUNT

         FROM     PENALTIES

         ORDER BY AMOUNT DESC

         LIMIT    3) AS T



Example 13.8:



SELECT   DISTINCT AMOUNT

FROM     PENALTIES

ORDER BY AMOUNT DESC

LIMIT    3



Example 13.9:



SELECT   PLAYERNO

FROM    (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    LEAGUENO IS NOT NULL

         ORDER BY LEAGUENO DESC

         LIMIT    6) AS T

ORDER BY PLAYERNO

LIMIT    3



Example 13.10:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM    (SELECT   PLAYERNO, SUM(AMOUNT) AS TOTAL

                  FROM     PENALTIES

                  GROUP BY PLAYERNO

                  ORDER BY TOTAL DESC

                  LIMIT    3) AS T)



Example 13.11:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES)

AND      PLAYERNO NOT IN

        (SELECT   PLAYERNO

         FROM     PENALTIES

         ORDER BY AMOUNT DESC

         LIMIT    2)

AND      PLAYERNO NOT IN

        (SELECT   PLAYERNO

         FROM     PENALTIES

         ORDER BY AMOUNT ASC

         LIMIT    2)

;

SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES

         WHERE    PLAYERNO NOT IN

                 (SELECT   PLAYERNO

                  FROM     PENALTIES

                  ORDER BY AMOUNT DESC

                  LIMIT    2)

         AND      PLAYERNO NOT IN

                 (SELECT   PLAYERNO

                  FROM     PENALTIES

                  ORDER BY AMOUNT ASC

                  LIMIT    2))



Example 13.12:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

ORDER BY PLAYERNO ASC

LIMIT    5 OFFSET 3



Example 13.13:



SELECT   SQL_CALC_FOUND_ROWS PAYMENTNO

FROM     PENALTIES

LIMIT    5

;

SELECT   FOUND_ROWS()



Answer 13.1:



SELECT   PAYMENTNO, AMOUNT, PAYMENT_DATE

FROM     PENALTIES

ORDER BY AMOUNT DESC, PAYMENT_DATE DESC

LIMIT    4



Answer 13.2:



 (SELECT   MATCHNO

 FROM     MATCHES

 ORDER BY MATCHNO ASC

 LIMIT    2)

UNION

(SELECT   MATCHNO

 FROM     MATCHES

 ORDER BY MATCHNO DESC

 LIMIT    2)



Answer 13.3:



SELECT   PLAYERNO, NAME

FROM    (SELECT   PLAYERNO, NAME

         FROM     PLAYERS

         ORDER BY PLAYERNO ASC

         LIMIT    10) AS S10

ORDER BY NAME DESC

LIMIT    5



Answer 13.4:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM    (SELECT   PLAYERNO, COUNT(*) AS NUMBER

                  FROM     MATCHES

                  WHERE    WON > LOST

                  GROUP BY PLAYERNO) AS WINNERS

         ORDER BY NUMBER DESC, PLAYERNO ASC

         LIMIT    2)



Answer 13.5:



SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PENALTIES.PLAYERNO

         FROM     PENALTIES INNER JOIN PLAYERS

                  ON PENALTIES.PLAYERNO = PLAYERS.PLAYERNO

         ORDER BY AMOUNT DESC, NAME ASC

         LIMIT    4)



Answer 13.6:



SELECT   PAYMENTNO, AMOUNT

FROM     PENALTIES

ORDER BY AMOUNT DESC

LIMIT    1 OFFSET 2



Example 14.1:



SELECT   PLAYERNO, TOWN

FROM     PLAYERS

WHERE    TOWN = 'Inglewood'

UNION

SELECT   PLAYERNO, TOWN

FROM     PLAYERS

WHERE    TOWN = 'Plymouth'

;

SELECT   PLAYERNO, TOWN

FROM     PLAYERS

WHERE    TOWN = 'Inglewood'

OR       TOWN = 'Plymouth'



Example 14.2:



SELECT   BIRTH_DATE AS DATES

FROM     PLAYERS

UNION

SELECT   PAYMENT_DATE

FROM     PENALTIES



Example 14.3:



SELECT   PLAYERNO

FROM     PENALTIES

UNION

SELECT   PLAYERNO

FROM     TEAMS



Example 14.4:



SELECT   PLAYERNO

FROM     PENALTIES

UNION

SELECT   PLAYERNO

FROM     TEAMS

UNION

SELECT   PLAYERNO

FROM     PLAYERS

WHERE    TOWN = 'Stratford'



Example 14.5:



SELECT   CAST(TEAMNO AS CHAR(4)) AS TEAMNO,

         CAST(PLAYERNO AS CHAR(4)) AS PLAYERNO,

         SUM(WON + LOST) AS TOTAL

FROM     MATCHES

GROUP BY TEAMNO, PLAYERNO

UNION

SELECT   CAST(TEAMNO AS CHAR(4)),

         'subtotal',

         SUM(WON + LOST)

FROM     MATCHES

GROUP BY TEAMNO

UNION

SELECT   'total', 'total', SUM(WON + LOST)

FROM     MATCHES

ORDER BY 1, 2



Example 14.6:



SELECT   PLAYERNO

FROM     PENALTIES

UNION ALL

SELECT   PLAYERNO

FROM     TEAMS



Answer 14.1:



SELECT   PLAYERNO

FROM     COMMITTEE_MEMBERS

UNION

SELECT   PLAYERNO

FROM     PENALTIES

GROUP BY PLAYERNO

HAVING   COUNT(*) >= 2



Answer 14.2:



SELECT   MAX(ADATE)

FROM    (SELECT   MAX(BIRTH_DATE) AS ADATE

         FROM     PLAYERS

         UNION

         SELECT   MAX(PAYMENT_DATE) AS ADATE

         FROM     PENALTIES) AS TWODATES



Answer 14.5:



SELECT   SUM(NUMBER)

FROM    (SELECT   COUNT(*) AS NUMBER

         FROM     PLAYERS

         UNION ALL

         SELECT   COUNT(*) AS NUMBER

         FROM     TEAMS) AS NUMBERS



Answer 14.6:



SELECT   POWER(DIGIT,2)

FROM    (SELECT 0 AS DIGIT UNION SELECT 1 UNION

         SELECT 2 UNION SELECT 3 UNION

         SELECT 4 UNION SELECT 5 UNION

         SELECT 6 UNION SELECT 7 UNION

         SELECT 8 UNION SELECT 9) AS DIGITS1

UNION ALL

SELECT   POWER(DIGIT,3)

FROM    (SELECT 0 AS DIGIT UNION SELECT 1 UNION

         SELECT 2 UNION SELECT 3 UNION

         SELECT 4 UNION SELECT 5 UNION

         SELECT 6 UNION SELECT 7 UNION

         SELECT 8 UNION SELECT 9) AS DIGITS2

ORDER BY 1



Example 15.1:



SET @PI = 3.141592654



Example 15.2:



SELECT   @PI



Example 15.3:



SELECT   NAME, TOWN, POSTCODE

FROM     PLAYERS

WHERE    PLAYERNO < @PI



Example 15.4:



SET @ABC = 5, @DEF = 'Inglewood', 

    @GHI = DATE('2004-01-01')



Example 15.5:



SET @PI = CAST(22 AS BINARY)/7



Example 15.6:



SET @ANR = (SELECT    PLAYERNO

            FROM      TEAMS

            WHERE     TEAMNO = 1)



Example 15.7:



SELECT   @PLAYERNO := 7



Example 15.8:



SELECT   @NAME := 'Johnson', @TOWN := 'Inglewood', 

         @POSTCODE := '1234AB'



Example 15.9:



SELECT   @NAME := NAME, @TOWN := TOWN,

         @POSTCODE := POSTCODE

FROM     PLAYERS

WHERE    PLAYERNO = 2



Example 15.10:



SELECT   @PENALTIESTOTAL := SUM(AMOUNT),

         @NUMBERPENALTIES := COUNT(*)

FROM     PENALTIES



Example 15.11:



SELECT   @PLAYERNO := PLAYERNO

FROM     PLAYERS

ORDER BY PLAYERNO DESC

;

SELECT   @PLAYERNO

;

SELECT   @PNR7 := 7

FROM     PLAYERS

WHERE    PLAYERNO < @PNR7



Example 15.12:



SET @CNO = (SELECT    PLAYERNO

            FROM      TEAMS

            WHERE     TEAMNO = 1)

;

SELECT   NAME

FROM     PLAYERS

WHERE    PLAYERNO = @CNO



Example 15.13:



SET @VAR = (((3/7) * 100)/124)+3

;

SELECT   *

FROM     PENALTIES

WHERE    PAYMENTNO < @VAR

AND      PLAYERNO > @VAR



Example 15.14:



CREATE TABLE VARIABLES 

      (VARNAME   CHAR(30) NOT NULL PRIMARY KEY,

       VARVALUE  CHAR(30) NOT NULL)

;

SET @VAR1 = 100, @VAR2 = 'John'

;

INSERT INTO VARIABLES VALUES ('VAR1', @VAR1)

;

INSERT INTO VARIABLES VALUES ('VAR2', @VAR2)

;

SELECT   @VAR1 := VARVALUE

FROM     VARIABLES

WHERE    VARNAME = 'VAR1'

;

SELECT   @VAR2 := VARVALUE

FROM     VARIABLES

WHERE    VARNAME = 'VAR2'

;

SELECT   @VAR1, @VAR2



Example 15.15:



DO CURRENT_DATE + INTERVAL 2 YEAR



Answer 15.1:



SET @TODAY = CURRENT_DATE

;

SELECT @TODAY := CURRENT_DATE



Answer 15.2:



SELECT   *

FROM     PENALTIES

WHERE    PENALTIES_DATE < @TODAY - INTERVAL 5 YEAR



Answer 15.3:



SELECT   @VAR := SUM(AMOUNT) 

FROM     PENALTIES



Example 16.1:



HANDLER PENALTIES OPEN

;

HANDLER PENALTIES READ FIRST

;

HANDLER PENALTIES READ NEXT

;

HANDLER PENALTIES CLOSE



Example 16.2:



CREATE INDEX PENALTIES_AMOUNT ON PENALTIES (AMOUNT)



Example 16.3:



HANDLER PENALTIES OPEN AS P

;

HANDLER P READ PENALTIES_AMOUNT FIRST

;

HANDLER P READ PENALTIES_AMOUNT NEXT



Example 16.4:



HANDLER PENALTIES OPEN AS P

;

HANDLER P READ PENALTIES_AMOUNT FIRST WHERE PLAYERNO > 100

;

HANDLER P READ PENALTIES_AMOUNT NEXT WHERE PLAYERNO > 100



Example 16.5:



HANDLER PENALTIES OPEN AS P

;

HANDLER P READ PENALTIES_AMOUNT FIRST LIMIT 3



Example 16.6:



HANDLER PENALTIES OPEN AS P

;

HANDLER P READ PENALTIES_AMOUNT = (30.00)

;

HANDLER P READ PENALTIES_AMOUNT NEXT



Example 16.7:



CREATE INDEX AMOUNT_PLAYERNO ON PENALTIES (AMOUNT, PLAYERNO)



Example 16.8:



HANDLER PENALTIES OPEN AS P

;

HANDLER P READ AMOUNT_PLAYERNO > (30.00, 44) LIMIT 100



Answer 16.1:



HANDLER MATCHES OPEN AS M1

;

HANDLER M1 READ FIRST

;

HANDLER M1 READ NEXT

;

HANDLER M1 CLOSE



Answer 16.2:



HANDLER MATCHES OPEN AS M2

;

HANDLER M2 READ `PRIMARY` FIRST

;

HANDLER M2 READ `PRIMARY` NEXT

;

HANDLER M2 CLOSE



Answer 16.3:



HANDLER MATCHES OPEN AS M3

;

HANDLER M3 READ `PRIMARY` LAST

   WHERE PLAYERNO IN (6, 104, 112)

;

HANDLER M3 READ `PRIMARY` PREV

   WHERE PLAYERNO IN (6, 104, 112)

;

HANDLER M3 CLOSE



Example 17.1:



INSERT INTO TEAMS (TEAMNO, PLAYERNO, DIVISION)

VALUES (3, 100, 'third')

;

INSERT INTO TEAMS

VALUES (3, 100, 'third')

;

INSERT INTO TEAMS (PLAYERNO, DIVISION, TEAMNO)

VALUES (100, 'third', 3)

;

INSERT INTO TEAMS

       (TEAMNO, DIVISION)

VALUES (3, 'third')



Example 17.2:



INSERT INTO PLAYERS

       (PLAYERNO, NAME, INITIALS, SEX, 

        JOINED, STREET, TOWN)

VALUES (611, 'Jones', 'GG', 'M', 1977, 'Green Way', 'Stratford')

;

INSERT INTO PLAYERS

       (PLAYERNO, NAME, INITIALS, BIRTH_DATE,

        SEX, JOINED, STREET, HOUSENO, POSTCODE,

        TOWN, PHONENO, LEAGUENO)

VALUES (611, 'Jones', 'GG', NULL, 'M', 1977,

        'Green Way', NULL, NULL, 'Stratford', NULL, NULL)



Example 17.3:



INSERT INTO TEAMS (TEAMNO, PLAYERNO, DIVISION)

VALUES (6, 100, 'third'),

       (7,  27, 'fourth'),

       (8,  39, 'fourth'),

       (9, 112, 'sixth')



Example 17.4:



CREATE TABLE TOTALS 

      (NUMBERPLAYERS   INTEGER NOT NULL,

       SUMPENALTIES    DECIMAL(9,2) NOT NULL)

;

INSERT INTO TOTALS (NUMBERPLAYERS, SUMPENALTIES)

VALUES ((SELECT COUNT(*) FROM PLAYERS),

        (SELECT SUM(AMOUNT) FROM PENALTIES))

;

INSERT INTO TEAMS (TEAMNO, PLAYERNO, DIVISION)

VALUES (3, 100, 'third')

;

INSERT INTO TEAMS SET 

   TEAMNO = 3, PLAYERNO = 100, DIVISION = 'third'



Example 17.5:



INSERT IGNORE INTO TEAMS VALUES (1, 39, 'second')



Example 17.6:



INSERT INTO TEAMS VALUES (1, 39, 'second')

ON DUPLICATE KEY UPDATE PLAYERNO = 39, DIVISION='second'



Example 17.7:



CREATE TABLE RECR_PLAYERS

      (PLAYERNO   SMALLINT NOT NULL,

       NAME       CHAR(15) NOT NULL,

       TOWN       CHAR(10) NOT NULL,

       PHONENO    CHAR(13),

       PRIMARY KEY (PLAYERNO))

;

INSERT   INTO RECR_PLAYERS

        (PLAYERNO, NAME, TOWN, PHONENO)

SELECT   PLAYERNO, NAME, TOWN, PHONENO

FROM     PLAYERS

WHERE    LEAGUENO IS NULL

;

INSERT   INTO RECR_PLAYERS

SELECT   PLAYERNO, NAME, TOWN, PHONENO

FROM     PLAYERS

WHERE    LEAGUENO IS NULL

;

INSERT   INTO RECR_PLAYERS

        (TOWN, PHONENO, NAME, PLAYERNO)

SELECT   TOWN, PHONENO, NAME, PLAYERNO

FROM     PLAYERS

WHERE    LEAGUENO IS NULL



Example 17.8:



INSERT   INTO RECR_PLAYERS

        (PLAYERNO, NAME, TOWN, PHONENO)

SELECT   PLAYERNO + 1000, NAME, TOWN, PHONENO

FROM     RECR_PLAYERS



Example 17.9:



INSERT   INTO PENALTIES

SELECT   PAYMENTNO + 100, PLAYERNO, PAYMENT_DATE, AMOUNT

FROM     PENALTIES

WHERE    AMOUNT >

        (SELECT   AVG(AMOUNT)

         FROM     PENALTIES)



Example 17.10:



UPDATE   PLAYERS

SET      LEAGUENO = '2000'

WHERE    PLAYERNO = 95

;

UPDATE   PLAYERS AS P

SET      P.LEAGUENO = '2000'

WHERE    P.PLAYERNO = 95



Example 17.11:



UPDATE   PENALTIES

SET      AMOUNT = AMOUNT * 1.05



Example 17.12:



UPDATE   MATCHES

SET      WON = 0

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PLAYERS

         WHERE    TOWN = 'Stratford')



Example 17.13:



UPDATE   PLAYERS

SET      STREET   = 'Palmer Street',

         HOUSENO  = '83',

         TOWN     = 'Inglewood',

         POSTCODE = '1234UU',

         PHONENO  = NULL

WHERE    NAME     = 'Parmenter'

;

UPDATE   PLAYERS

SET      STREET   = TOWN,

         TOWN     = STREET

WHERE    PLAYERNO = 44

;

UPDATE   PLAYERS

SET      STREET   = TOWN

WHERE    PLAYERNO = 44

;

UPDATE   PLAYERS

SET      TOWN     = STREET

WHERE    PLAYERNO = 44



Example 17.14:



CREATE TABLE PLAYERS_DATA

      (PLAYERNO        INTEGER NOT NULL PRIMARY KEY,

       NUMBER_MAT      INTEGER,

       SUM_PENALTIES   DECIMAL(7,2))

;

INSERT INTO PLAYERS_DATA (PLAYERNO)

SELECT PLAYERNO FROM PLAYERS

;

UPDATE   PLAYERS_DATA AS PD

SET      NUMBER_MAT =    (SELECT   COUNT(*)

                          FROM     MATCHES AS M

                          WHERE    M.PLAYERNO = PD.PLAYERNO),

         SUM_PENALTIES = (SELECT   SUM(AMOUNT)

                          FROM     PENALTIES AS PEN

                          WHERE    PEN.PLAYERNO = PD.PLAYERNO)



Example 17.15:



UPDATE   PENALTIES

SET      AMOUNT = AMOUNT ?(SELECT   AVG(AMOUNT)

                            FROM     PENALTIES)

;

SET @AVERAGE_AMOUNT = (SELECT AVG(AMOUNT) FROM PENALTIES)

;

UPDATE   PENALTIES

SET      AMOUNT = AMOUNT ?@AVERAGE_AMOUNT



Example 17.16:



UPDATE   PENALTIES

SET      AMOUNT = AMOUNT * 1.05

ORDER BY AMOUNT DESC



Example 17.17:



UPDATE   PENALTIES

SET      PAYMENTNO = PAYMENTNO + 1

ORDER BY PAYMENTNO DESC



Example 17.18:



UPDATE   PENALTIES

SET      AMOUNT = AMOUNT * 1.05

ORDER BY AMOUNT DESC, PLAYERNO ASC

LIMIT    4



Example 17.19:



UPDATE   IGNORE MATCHES

SET      MATCHNO = MATCHNO + 1,

         WON = 2,

         LOST = 3

WHERE    MATCHNO = 4



Example 17.20:



UPDATE   MATCHES AS M, TEAMS AS T

SET      WON = 0

WHERE    T.TEAMNO = M.TEAMNO

AND      T.DIVISION = 'first'

;

SELECT   ...

FROM     MATCHES AS M, TEAMS AS T

WHERE    T.TEAMNO = M.TEAMNO

AND      T.DIVISION = 'first'

;

UPDATE   MATCHES

SET      WON = 0

WHERE    TEAMNO IN 

        (SELECT   TEAMNO

         FROM     TEAMS

         WHERE    DIVISION = 'first')



Example 17.21:



UPDATE   MATCHES AS M, TEAMS AS T

SET      M.WON = 0,

         T.PLAYERNO = 112

WHERE    T.TEAMNO = M.TEAMNO

AND      T.DIVISION = 'first'



Example 17.22:



UPDATE   PLAYERS AS P,

         TEAMS AS T,

         MATCHES AS M,

         PENALTIES AS PEN,

         COMMITTEE_MEMBERS AS C

SET      P.PLAYERNO   = 1,

         T.PLAYERNO   = 1,

         M.PLAYERNO   = 1,

         PEN.PLAYERNO = 1,

         C.PLAYERNO   = 1

WHERE    P.PLAYERNO   = T.PLAYERNO

AND      T.PLAYERNO   = M.PLAYERNO

AND      M.PLAYERNO   = PEN.PLAYERNO

AND      PEN.PLAYERNO = C.PLAYERNO

AND      C.PLAYERNO   = 2



Example 17.23:



REPLACE INTO PLAYERS

       (PLAYERNO, NAME, INITIALS, SEX, 

        JOINED, STREET, TOWN)

VALUES (611, 'Jones', 'GG', 'M', 1977, 'Green Way', 'Stratford')



Example 17.24:



REPLACE INTO TEAMS (TEAMNO, PLAYERNO, DIVISION)

VALUES (6, 100, 'third'),

       (7,  27, 'fourth'),

       (8,  39, 'fourth'),

       (9, 112, 'sixth')



Example 17.25:



REPLACE INTO RECR_PLAYERS

       (PLAYERNO, NAME, TOWN, PHONENO)

SELECT  PLAYERNO + 1000, NAME, TOWN, PHONENO

FROM    RECR_PLAYERS



Example 17.26:



DELETE

FROM     PENALTIES

WHERE    PLAYERNO = 44

;

DELETE

FROM     PENALTIES AS PEN

WHERE    PEN.PLAYERNO = 44



Example 17.27:



DELETE

FROM     PLAYERS

WHERE    JOINED >

        (SELECT   AVG(JOINED)

         FROM     PLAYERS

         WHERE    TOWN = 'Stratford')



Example 17.28:



DELETE

FROM     PENALTIES

ORDER BY AMOUNT DESC, PLAYERNO ASC

LIMIT    4



Example 17.29:



DELETE   IGNORE

FROM     PLAYERS



Example 17.30:



DELETE   MATCHES

FROM     MATCHES, PLAYERS

WHERE    MATCHES.PLAYERNO = PLAYERS.PLAYERNO

AND      PLAYERS.TOWN = 'Inglewood'

;

SELECT   ...

FROM     MATCHES, PLAYERS

WHERE    MATCHES.PLAYERNO = PLAYERS.PLAYERNO

AND      PLAYERS.TOWN = 'Inglewood'

;

DELETE   MATCHES

FROM     MATCHES AS M, PLAYERS

WHERE    M.PLAYERNO = PLAYERS.PLAYERNO

AND      PLAYERS.TOWN = 'Inglewood'



Example 17.31:



DELETE   TEAMS, MATCHES

FROM     TEAMS, MATCHES

WHERE    TEAMS.TEAMNO = MATCHES.TEAMNO

AND      TEAMS.TEAMNO = 1

;

DELETE

FROM     TEAMS, MATCHES

USING    TEAMS, MATCHES

WHERE    TEAMS.TEAMNO = MATCHES.TEAMNO

AND      TEAMS.TEAMNO = 1



Example 17.32:



TRUNCATE TABLE COMMITTEE_MEMBERS



Answer 17.1:



INSERT INTO PENALTIES

VALUES (15, 27, '1985-11-08', 75)



Answer 17.2:



INSERT   INTO PENALTIES

SELECT   PAYMENTNO + 1000, PLAYERNO, PAYMENT_DATE, AMOUNT

FROM     PENALTIES

WHERE    AMOUNT >

        (SELECT   AVG(AMOUNT)

         FROM     PENALTIES)

UNION

SELECT   PAYMENTNO + 2000, PLAYERNO, PAYMENT_DATE, AMOUNT

FROM     PENALTIES

WHERE    PLAYERNO = 27



Answer 17.3:



UPDATE   PLAYERS

SET      SEX = 'W'

WHERE    SEX = 'F'



Answer 17.4:



UPDATE   PLAYERS

SET      SEX = 'X'

WHERE    SEX = 'F'

;

UPDATE   PLAYERS

SET      SEX = 'F'

WHERE    SEX = 'M'

;

UPDATE   PLAYERS

SET      SEX = 'M'

WHERE    SEX = 'X'

;

UPDATE   PLAYERS

SET      SEX = CASE SEX 

                       WHEN 'F' THEN 'M'

                       ELSE 'F' END



Answer 17.5:



UPDATE   PENALTIES

SET      AMOUNT = AMOUNT * 1.2

WHERE    AMOUNT >

        (SELECT   AVG(AMOUNT)

         FROM     PENALTIES)



Answer 17.6:



UPDATE   TEAMS AS T, PLAYERS AS P

SET      DIVISION = 'third'

WHERE    T.PLAYERNO = P.PLAYERNO

AND      P.TOWN = 'Stratford'



Answer 17.7:



UPDATE   PENALTIES, TEAMS

SET      AMOUNT = 50,

         DIVISION = 'fourth'



Answer 17.8:



DELETE

FROM     PENALTIES

WHERE    PLAYERNO = 44

AND      YEAR(PAYMENT_DATE) = 1980



Answer 17.9:



DELETE

FROM     PENALTIES

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    TEAMNO IN

                 (SELECT   TEAMNO

                  FROM     TEAMS

                  WHERE    DIVISION = 'second'))



Answer 17.10:



DELETE

FROM     PLAYERS

WHERE    TOWN =

        (SELECT   TOWN

         FROM     PLAYERS

         WHERE PLAYERNO = 44)

AND      PLAYERNO <> 44



Answer 17.11:



DELETE   PEN, M

FROM     PENALTIES AS PEN, MATCHES AS M

WHERE    PEN.PLAYERNO = M.PLAYERNO

AND      PEN.PLAYERNO = 27



Answer 17.12:



DELETE   PEN, M

FROM     PENALTIES AS PEN, MATCHES AS M

WHERE    PEN.PLAYERNO = 27

AND      M.PLAYERNO = 27



Example 18.1:



SELECT   *

FROM     TEAMS

INTO     OUTFILE 'C:/TEAMS.TXT'



Example 18.2:



SELECT   *

FROM     TEAMS

INTO     OUTFILE 'C:/TEAMS.TXT'

         FIELDS TERMINATED BY ','

         LINES TERMINATED BY '?'



Example 18.3:



SELECT   *

FROM     TEAMS

INTO     OUTFILE 'C:/TEAMS.TXT'

         FIELDS TERMINATED BY ','

            OPTIONALLY ENCLOSED BY '"'

         LINES TERMINATED BY '?'



Example 18.4:



SELECT   *

FROM     TEAMS

INTO     OUTFILE 'C:/TEAMS.TXT'

         FIELDS TERMINATED BY ','

            ENCLOSED BY '"'

         LINES TERMINATED BY '?'



Example 18.5:



SELECT   *, NULL

FROM     TEAMS

INTO     OUTFILE 'C:/TEAMS.TXT'

         FIELDS TERMINATED BY ','

            ENCLOSED BY '"'

         LINES TERMINATED BY '?'



Example 18.6:



SELECT   *, NULL

FROM     TEAMS

INTO     OUTFILE 'C:/TEAMS.TXT'

         FIELDS TERMINATED BY ','

            ENCLOSED BY '"'

            ESCAPED BY '*'

         LINES TERMINATED BY '?'



Example 18.7:



SELECT   *

FROM     TEAMS

INTO     OUTFILE 'C:/TEAMS.TXT'

         FIELDS TERMINATED BY ','

            OPTIONALLY ENCLOSED BY '"'

         LINES TERMINATED BY '\n'



Example 18.8:



SELECT   *

FROM     TEAMS

INTO     DUMPFILE 'C:/TEAMS.DUMP'



Example 18.9:



SELECT   *

FROM     TEAMS

WHERE    TEAMNO = 1

INTO     @v1, @v2, @V3

;

SELECT   @V1, @V2, @V3



Example 18.10:



LOAD DATA INFILE 'C:/TEAMS.TXT'

REPLACE

INTO TABLE TEAMS

FIELDS TERMINATED BY ','

LINES TERMINATED BY '?'



Example 18.11:



LOAD DATA INFILE 'C:/TEAMS.TXT'

REPLACE

INTO TABLE TEAMS

FIELDS TERMINATED BY ','

LINES TERMINATED BY '?'

IGNORE 1 LINES



Example 18.12:



LOAD DATA INFILE 'C:/TEAMS.TXT'

REPLACE

INTO TABLE TEAMS

FIELDS TERMINATED BY ','

LINES TERMINATED BY '?'

(PLAYERNO,TEAMNO,DIVISION)

;

SELECT * FROM TEAMS



Example 18.13:



LOAD DATA INFILE 'C:/TEAMS.TXT'

REPLACE

INTO TABLE TEAMS

FIELDS TERMINATED BY ','

LINES TERMINATED BY '?'

SET DIVISION='xxx'

;

SELECT * FROM TEAMS



Example 18.14:



LOAD DATA INFILE 'C:/TEAMS.TXT'

REPLACE

INTO TABLE TEAMS

FIELDS TERMINATED BY ','

LINES TERMINATED BY '?'

(TEAMNO,PLAYERNO,@DIV)

SET DIVISION=SUBSTRING(@DIV,1,1)

;

SELECT * FROM TEAMS



Example 18.15:



LOAD DATA INFILE 'C:/TEAMS2.TXT'

REPLACE

INTO TABLE TEAMS

FIELDS TERMINATED BY ','

LINES TERMINATED BY '\r'

      STARTING BY '/*/'

;

SELECT * FROM TEAMS



Example 19.1:



CREATE TABLE XML_MATCHES

      (MATCHNO      INTEGER NOT NULL PRIMARY KEY,

       MATCH_INFO   TEXT)



Example 19.2:



INSERT INTO XML_MATCHES VALUES (1,

'<match number=1>Match info of 1

    <team>Team info of 1

       <number>1</number>

       <division>first</division>

    </team>

    <player>Player info of 6

       <number>6</number>

       <name>The name of 6

          <lastname>Parmenter</lastname>

          <initials>R</initials>

       </name>

       <address>The address of 6

          <street>Haseltine Lane</street>

          <houseno>80</houseno>

          <postcode>1234KK</postcode>

          <town>Stratford</town>

       </address>

    </player>

    <sets>Info about sets of 1

       <won>3</won>

       <lost>1</lost>

    </sets>

 </match>')

;

INSERT INTO XML_MATCHES VALUES (9,

'<match number=9>Match info of 9

    <team>Team info of 2

       <number>2</number>

       <division>second</division>

    </team>

    <player>Player info of 27

       <number>27</number>

       <name>The name of 27

          <lastname>Collins</lastname>

          <initials>DD</initials>

       </name>

       <address>The address of 27

          <street>Long Drive</street>

          <houseno>804</houseno>

          <postcode>8457DK</postcode>

          <town>Eltham</town>

       </address>

       <phones>Phone numbers of 27

          <number>1234567</number>

          <number>3468346</number>

          <number>6236984</number>

          <number>6587437</number>

       </phones>

    </player>

    <sets>Info about sets of 9

       <won>3</won>

       <lost>2</lost>

    </sets>

 </match>')

;

INSERT INTO XML_MATCHES VALUES (12,

'<match number=12>Match info of 12

    <team>Team info of 2

       <number>2</number>

       <division>second</division>

    </team>

    <player>Player info of 8

       <number>8</number>

       <name>The name of 8

          <lastname>Newcastle</lastname>

          <initials>B</initials>

       </name>

       <address>The first address van 8

          <street>Station Road</street>

          <houseno>4</houseno>

          <postcode>6584RO</postcode>

          <town>Inglewood</town>

       </address>

       <address>The second address of 8

          <street>Trolley Lane</street>

          <houseno>14</houseno>

          <postcode>2728YG</postcode>

          <town>Douglas</town>

       </address>

    </player>

    <sets>Info about sets of 12

       <won>1</won>

       <lost>3</lost>

    </sets>

 </match>')



Example 19.3:





SELECT   MATCHNO,

         EXTRACTVALUE(MATCH_INFO, '/match/team/division')

                      AS DIVISION

FROM     XML_MATCHES



Example 19.4:



SELECT   MATCHNO,

         EXTRACTVALUE(MATCH_INFO,

         '/match/player/name/lastname')

         AS PLAYER

FROM     XML_MATCHES

WHERE    EXTRACTVALUE(MATCH_INFO,

         '/match/sets/won') = 3



Example 19.5:



SELECT   EXTRACTVALUE('

            <team>

               <number>2</number>

               <division>second</division>

            </team>'

         ,'/team') = '' AS TEAM



Example 19.6:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO, 

         '/match/player/phones/number')

         AS PHONES

FROM     XML_MATCHES

WHERE    MATCHNO = 9



Example 19.7:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO,

         '/match/player')

         AS PLAYERS

FROM     XML_MATCHES

;

SELECT   REPLACE(EXTRACTVALUE(MATCH_INFO,

         '/match/player'), ' ', '#')

         AS PLAYER_INFO

FROM     XML_MATCHES



Example 19.8:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO, 

         '/match/*/number')

         AS NUMBERS

FROM     XML_MATCHES



Example 19.9:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO, 

         '/match//number')

         AS NUMBERS

FROM     XML_MATCHES

;

SELECT   MATCHNO,

         EXTRACTVALUE(MATCH_INFO, '//number')

         AS NUMBERS

FROM     XML_MATCHES



Example 19.10:



SELECT   EXTRACTVALUE(MATCH_INFO, '/match//*')

         AS EVERYTHING

FROM     XML_MATCHES

WHERE    MATCHNO = 1



Example 19.11:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO,

         '//town|//won')

         AS TOWN_WON

FROM     XML_MATCHES

;

SELECT   MATCHNO, 

         CONCAT(EXTRACTVALUE(MATCH_INFO, '//town'),

                ' ',

                EXTRACTVALUE(MATCH_INFO, '//won'))

         AS TOWN_WON

FROM     XML_MATCHES



Example 19.12:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO,

         '/match/@number')

         AS XML_MATCHNO

FROM     XML_MATCHES



Example 19.13:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO,

         '/match/sets/won+10')

         AS WON_PLUS_10

FROM     XML_MATCHES



Example 19.14:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO, 

         '/match/player/address[1]/town')

         AS TOWN

FROM     XML_MATCHES



Example 19.15:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO,

         '/match/player/*[1]')

         AS A_VALUE

FROM     XML_MATCHES



Example 19.16:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO,

         '/match/player/phones/number[last()]')

         AS LAST

FROM     XML_MATCHES



Example 19.17:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO,

         '/child::match/child::team/child::number ')

         AS NUMBERS

FROM     XML_MATCHES



Example 19.18:



SELECT   EXTRACTVALUE(MATCH_INFO,

         '/match/player/address/descendant::* ')

         AS ADDRESS_INFO

FROM     XML_MATCHES



Example 19.19:



SELECT   EXTRACTVALUE(MATCH_INFO,

         '/match/player/descendant::* ')

         AS PLAYER_INFO 

FROM     XML_MATCHES



Example 19.20:



SELECT   EXTRACTVALUE(MATCH_INFO,

         '/match/player/descendant::* ')

         AS PLAYER_INFO

FROM     XML_MATCHES



Example 19.21:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO,

         '/match/player[number=8]')

         AS PLAYER8

FROM     XML_MATCHES



Example 19.22:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO,

         '/match/player')

         AS PLAYER8

FROM     XML_MATCHES

WHERE    EXTRACTVALUE(MATCH_INFO,

         '/match/player[number=8]') <> ''



Example 19.23:



SELECT   MATCHNO, EXTRACTVALUE(MATCH_INFO,

         '/match/sets')

         AS THREE_AND_ONE

FROM     XML_MATCHES

WHERE    EXTRACTVALUE(MATCH_INFO,

         '/match/sets[won=3 and lost=1]') <>''



Example 19.24:



UPDATE   XML_MATCHES

SET      MATCH_INFO = 

         UPDATEXML(MATCH_INFO,

         '/match/sets/lost',

         '<lost>2</lost>')

WHERE    MATCHNO = 1

;

SELECT   EXTRACTVALUE(MATCH_INFO,

         '/match/sets/lost') AS LOST

FROM     XML_MATCHES

WHERE    MATCHNO = 1



Example 19.25:



UPDATE   XML_MATCHES

SET      MATCH_INFO = 

         UPDATEXML(MATCH_INFO,

         '/match/player/address',

         '<address>The new address of 8

             <street>Jolly Lane</street>

             <houseno>30</houseno>

             <postcode>5383GH</postcode>

             <town>Douglas</town>

          </address>')

WHERE    MATCHNO = 1

;

SELECT   EXTRACTVALUE(MATCH_INFO,

         '/match/player/address/*') AS NEW_ADDRESS

FROM     XML_MATCHES

WHERE    MATCHNO = 1



Example 20.1:



CREATE   TABLE PLAYERS

        (PLAYERNO     INTEGER NOT NULL PRIMARY KEY,

         NAME         CHAR(15) NOT NULL,

         INITIALS     CHAR(3) NOT NULL,

         BIRTH_DATE   DATE NULL,

         SEX          CHAR(1) NOT NULL,

         JOINED       SMALLINT NOT NULL,

         STREET       VARCHAR(30) NOT NULL,

         HOUSENO      CHAR(4) NULL,

         POSTCODE     CHAR(6) NULL,

         TOWN         VARCHAR(30) NOT NULL,

         PHONENO      CHAR(13) NULL,

         LEAGUENO     CHAR(4) UNIQUE)



Example 20.2:



CREATE   TABLE TEST.PENALTIES

        (PAYMENTNO      INTEGER NOT NULL PRIMARY KEY,

         PLAYERNO       INTEGER NOT NULL,

         PAYMENT_DATE   DATE NOT NULL,

         AMOUNT         DECIMAL(7,2) NOT NULL)



Example 20.3:



CREATE TABLE WIDTH (C4 INTEGER(4))

;

INSERT INTO WIDTH VALUES (1)



Example 20.4:



CREATE TABLE MEASUREMENTS

      (NR INTEGER, MEASUREMENT_VALUE FLOAT(1))

;

INSERT INTO MEASUREMENTS VALUES

   (1, 99.99),

   (2, 99999.99),

   (3, 99999999.99),

   (4, 99999999999.99),

   (5, 99999999999999.99),

   (6, 0.999999),

   (7, 0.9999999),

   (8, 99999999.9999),

   (9, (1.0/3))

;

SELECT * FROM MEASUREMENTS



Example 20.5:



CREATE TABLE MEASUREMENTS

      (NR INTEGER, MEASUREMENT_VALUE FLOAT(10,3))

;

INSERT INTO MEASUREMENTS VALUES

   (1, 99.99),

   (2, 99999.99),

   (3, 99999999.99),

   (4, 99999999999.99),

   (5, 99999999999999.99),

   (6, 0.999999),

   (7, 0.9999999),

   (8, 99999999.9999),

   (9, (1.0/3))

;

SELECT * FROM MEASUREMENTS



Example 20.6:



CREATE TABLE PENALTIESDEF

      (PAYMENTNO     INTEGER UNSIGNED NOT NULL PRIMARY KEY,

       PLAYERNO      INTEGER UNSIGNED NOT NULL,

       PAYMENT_DATE  DATE NOT NULL,

       AMOUNT        DECIMAL(7,2) NOT NULL)



Example 20.7:



CREATE TABLE WIDTH (C4 INTEGER(4) ZEROFILL)

;

INSERT INTO WIDTH VALUES (1)

;

INSERT INTO WIDTH VALUES (200)



Example 20.8:



CREATE   TABLE PENALTIES

        (PAYMENTNO     INTEGER NOT NULL PRIMARY KEY,

         PLAYERNO      INTEGER NOT NULL,

         PAYMENT_DATE  DATE NOT NULL,

         AMOUNT        DECIMAL(7,2) ZEROFILL NOT NULL)

;

SELECT AMOUNT FROM PENALTIES



Example 20.9:



CREATE TABLE MEASUREMENTS (NO INTEGER, 

   MEASUREMENT_VALUE FLOAT(19,3) ZEROFILL)

;

INSERT INTO MEASUREMENTS VALUES

   (1, 99.99),

   (2, 99999.99),

   (3, 99999999.99),

   (4, 99999999999.99),

   (5, 99999999999999.99),

   (6, 0.999999),

   (7, 0.9999999),

   (8, 99999999.9999),

   (9, (1.0/3))

;

SELECT * FROM MEASUREMENTS



Example 20.10:



CREATE TABLE CITY_NAMES

      (SEQNO   INTEGER UNSIGNED AUTO_INCREMENT 

               NOT NULL PRIMARY KEY,

       NAME    VARCHAR(30) NOT NULL)



Example 20.11:



INSERT INTO CITY_NAMES VALUES (NULL, 'London')

;

INSERT INTO CITY_NAMES VALUES (NULL, 'New York')

;

INSERT INTO CITY_NAMES (NAME) VALUES ('Paris')

;

SELECT * FROM CITY_NAMES



Example 20.12:



INSERT INTO CITY_NAMES VALUES (8, 'Bonn')

;

INSERT INTO CITY_NAMES VALUES (NULL, 'Amsterdam')

;

SELECT * FROM CITY_NAMES



Example 20.13:



DELETE FROM CITY_NAMES

;

INSERT INTO CITY_NAMES VALUES (NULL, 'Phoenix')

;

INSERT INTO CITY_NAMES VALUES (NULL, 'Rome')



Example 20.14:



SET @@AUTO_INCREMENT_OFFSET = 10,

    @@AUTO_INCREMENT_INCREMENT = 10

;

CREATE TABLE T10

      (SEQNO  INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY)

;

INSERT INTO T10 VALUES (NULL),(NULL)

;

SELECT * FROM T10



Example 20.15:



CREATE TEMPORARY TABLE SUMPENALTIES 

      (TOTAL DECIMAL(10,2))

;

INSERT INTO SUMPENALTIES

SELECT SUM(AMOUNT)

FROM   PENALTIES



Example 20.16:



CREATE TABLE TESTTABLE (C1 INTEGER)

;

INSERT INTO TESTTABLE VALUES (1)

;

CREATE TEMPORARY TABLE TESTTABLE (C1 INTEGER, C2 INTEGER)

;

INSERT INTO TESTTABLE VALUES (2, 3)

;

SELECT * FROM TESTTABLE



Example 20.17:



CREATE   TABLE IF NOT EXISTS TEAMS

        (TEAMNO      INTEGER NOT NULL PRIMARY KEY,

         PLAYERNO    INTEGER NOT NULL,

         DIVISION    CHAR(6) NOT NULL)



Example 20.18:



CREATE TABLE TEAMS_COPY1 LIKE TEAMS



Example 20.19:



CREATE TABLE TEAMS_COPY2 AS

(SELECT   *

 FROM     TEAMS)



Example 20.20:



CREATE TABLE TEAMS_COPY3 AS

(SELECT   TEAMNO AS TNO, PLAYERNO AS PNO, DIVISION

 FROM     TEAMS)

;

SELECT   *

FROM     TEAMS_COPY3



Example 20.21:



CREATE TABLE TEAMS_COPY4 AS

(SELECT   TEAMNO, PLAYERNO

 FROM     TEAMS

 WHERE    PLAYERNO = 27)



Example 20.22:



CREATE TEMPORARY TABLE TEAMS AS

 (SELECT   *

  FROM     TEAMS



Example 20.23:



CREATE TABLE TEAMS_COPY5

      (TEAMNO     INTEGER NOT NULL PRIMARY KEY,

       PLAYERNO   INTEGER NULL,

       DIVISION   CHAR(10) NOT NULL) AS

(SELECT   *

 FROM     TEAMS)

;

CREATE TABLE TEAMS_COPY5

      (PLAYERNO   INTEGER NULL,

       DIVISION   CHAR(10) NOT NULL) AS

(SELECT   *

 FROM     TEAMS)



Example 20.24:



CREATE TABLE TEAMS_COPY6

      (PLAYERNO    INTEGER NULL,

       COMMENT     VARCHAR(100)) AS

(SELECT   *

 FROM     TEAMS)

;

SELECT * FROM TEAMS_COPY6



Example 20.25:



CREATE   TABLE TEAMS_COPY7

        (TEAMNO INTEGER NOT NULL PRIMARY KEY)

REPLACE AS

(SELECT   * FROM TEAMS

 UNION ALL

 SELECT   2, 27, 'third'

 ORDER BY 1, 3 DESC)

;

SELECT * FROM TEAMS_COPY7



Example 20.26:



CREATE TABLE PENALTIES

      (PAYMENTNO     INTEGER NOT NULL PRIMARY KEY,

       PLAYERNO      INTEGER NOT NULL,

       PAYMENT_DATE  DATE NOT NULL DEFAULT '1990-01-01',

       AMOUNT        DECIMAL(7,2) NOT NULL DEFAULT 50.00)

;

INSERT   INTO PENALTIES

        (PAYMENTNO, PLAYERNO)

VALUES  (15, 27)

;

INSERT   INTO PENALTIES

        (PAYMENTNO, PLAYERNO, PAYMENT_DATE, AMOUNT)

VALUES  (15, 27, DEFAULT, DEFAULT)



Example 20.27:



UPDATE   PENALTIES

SET      AMOUNT = DEFAULT



Example 20.28:



UPDATE   PENALTIES

SET      AMOUNT = YEAR(DEFAULT(PAYMENT_DATE))*10



Example 20.29:



CREATE TABLE PENALTIES

      (PAYMENTNO  INTEGER  NOT NULL PRIMARY KEY

          COMMENT    'Primary key of the table',

       PLAYERNO      INTEGER  NOT NULL

          COMMENT    'Player who has incurred the penalty',

       PAYMENT_DATE  DATE     NOT NULL

          COMMENT    'Date on which the penalty has been paid',

       AMOUNT        DECIMAL(7,2) NOT NULL

          COMMENT   'Amount of the penalty in dollars')

;

SELECT   COLUMN_NAME, COLUMN_COMMENT

FROM     INFORMATION_SCHEMA.COLUMNS

WHERE    TABLE_NAME = 'PENALTIES'



Example 20.30:



SHOW ENGINES



Example 20.31:



CREATE TABLE SEXES

   (SEX CHAR(1) NOT NULL PRIMARY KEY)

   ENGINE = MYISAM



Example 20.32:



SELECT   TABLE_NAME, ENGINE

FROM     INFORMATION_SCHEMA.TABLES

WHERE    TABLE_NAME IN ('PLAYERS', 'PENALTIES', 'SEXES')



Example 20.33:



CREATE TEMPORARY TABLE SUMPENALTIES

   (TOTAL DECIMAL(10,2))

   ENGINE = MEMORY



Example 20.34:



CREATE TABLE PENALTIES_1990

   (PAYMENTNO INTEGER NOT NULL PRIMARY KEY)

   ENGINE=MYISAM

;

INSERT INTO PENALTIES_1990 VALUES (1),(2),(3)

;

CREATE TABLE PENALTIES_1991

   (PAYMENTNO INTEGER NOT NULL PRIMARY KEY)

   ENGINE=MYISAM

;

INSERT INTO PENALTIES_1991 VALUES (4),(5),(6)

;

CREATE TABLE PENALTIES_1992

   (PAYMENTNO INTEGER NOT NULL PRIMARY KEY)

   ENGINE=MYISAM

;

INSERT INTO PENALTIES_1992 VALUES (7),(8),(9);

;

CREATE TABLE PENALTIES_ALL

   (PAYMENTNO INTEGER NOT NULL PRIMARY KEY)

   ENGINE = MERGE

   UNION  = (PENALTIES_1990,PENALTIES_1991,PENALTIES_1992)

   INSERT_METHOD = NO

;

SELECT * FROM PENALTIES_ALL



Example 20.35:



CREATE VIEW PENALTIES_ALL AS

SELECT * FROM PENALTIES_1990

UNION

SELECT * FROM PENALTIES_1991

UNION

SELECT * FROM PENALTIES_1992



Example 20.36:



CREATE TABLE CITY_NAMES

      (SEQNO   INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,

       NAME    VARCHAR(30) NOT NULL) 

   AUTO_INCREMENT = 10

;

INSERT INTO CITY_NAMES VALUES (NULL, 'London')

;

INSERT INTO CITY_NAMES VALUES (NULL, 'New York')

;

INSERT INTO CITY_NAMES VALUES (NULL, 'Paris')

;

SELECT * FROM CITY_NAMES



Example 20.37:



CREATE TABLE PENALTIES

      (PAYMENTNO     INTEGER  NOT NULL PRIMARY KEY

          COMMENT    'Primary key of the table',

       PLAYERNO      INTEGER  NOT NULL

          COMMENT    'Player who has incurred the penalty',

       PAYMENT_DATE  DATE     NOT NULL

          COMMENT   'Date on which the penalty has been paid',

       AMOUNT        DECIMAL(7,2) NOT NULL

          COMMENT   'Sum of the penalty in Euro''s')

   COMMENT = 'Penalties that have been paid by the tennis club'

;

SELECT   TABLE_NAME, TABLE_COMMENT

FROM     INFORMATION_SCHEMA.TABLES

WHERE    TABLE_NAME = 'PENALTIES'



Example 20.38:



CREATE TABLE MATCHES

   (MATCHNO    INTEGER NOT NULL PRIMARY KEY,

    TEAMNO     INTEGER NOT NULL,

    PLAYERNO   INTEGER NOT NULL,

    WON        SMALLINT NOT NULL,

    LOST       SMALLINT NOT NULL)

   AVG_ROW_LENGTH = 15

   MAX_ROWS = 2000000

   MIN_ROWS = 1000000



Example 20.39:



CREATE   TABLE TEAMS_CSV

        (TEAMNO      INTEGER NOT NULL,

         PLAYERNO    INTEGER NOT NULL,

         DIVISION    CHAR(6) NOT NULL)

   ENGINE = CSV

;

INSERT INTO TEAMS_CSV VALUES (1, 6, 'first')

;

INSERT INTO TEAMS_CSV VALUES (2, 27, 'second')



Example 20.40:



SELECT   *

FROM     MATCHES

INTO     OUTFILE 'C:/MATCHES_EXTERN.TXT'

         FIELDS TERMINATED BY ',' ENCLOSED BY '"'

;

CREATE   TABLE MATCHES_CSV

        (MATCHNO    INTEGER NOT NULL,

         TEAMNO     INTEGER NOT NULL,

         PLAYERNO   INTEGER NOT NULL,

         WON        SMALLINT NOT NULL,

         LOST       SMALLINT NOT NULL)

   ENGINE = CSV

;

FLUSH TABLE MATCHES_CSV

;

SELECT   *

FROM     MATCHES_CSV

WHERE    MATCHNO <= 4



Example 20.41:



SELECT   COLUMN_NAME, DATA_TYPE, CHAR_LENGTH, NULLABLE

FROM     COLUMNS

WHERE    TABLE_NAME = 'PLAYERS'

AND      TABLE_CREATOR = 'TENNIS'

ORDER BY COLUMN_NO



Example 20.42:



SELECT   'PLAYERS' AS TABLE_NAME, COUNT(*) AS NUMBER_ROWS,

        (SELECT   COUNT(*)

         FROM     COLUMNS

         WHERE    TABLE_NAME = 'PLAYERS'

         AND      TABLE_CREATOR = 'TENNIS') AS P

FROM     PLAYERS

UNION

SELECT   'TEAMS', COUNT(*),

        (SELECT   COUNT(*)

         FROM     COLUMNS

         WHERE    TABLE_NAME = 'TEAMS'

         AND      TABLE_CREATOR = 'TENNIS') AS T

FROM     TEAMS

UNION

SELECT   'PENALTIES', COUNT(*),

        (SELECT   COUNT(*)

         FROM     COLUMNS

         WHERE    TABLE_NAME = 'PENALTIES'

         AND      TABLE_CREATOR = 'TENNIS') AS PEN

FROM     PENALTIES

UNION

SELECT   'MATCHES', COUNT(*),

        (SELECT   COUNT(*)

         FROM     COLUMNS

         WHERE    TABLE_NAME = 'MATCHES'

         AND      TABLE_CREATOR = 'TENNIS') AS M

FROM     MATCHES

UNION

SELECT   'COMMITTEE_MEMBERS', COUNT(*),

        (SELECT   COUNT(*)

         FROM     COLUMNS

         WHERE    TABLE_NAME = 'COMMITTEE_MEMBERS'

         AND      TABLE_CREATOR = 'TENNIS') AS CM

FROM     COMMITTEE_MEMBERS

ORDER BY 1



Answer 20.6:



CREATE TABLE DEPARTMENT

     ( DEPNO     CHAR(5) NOT NULL PRIMARY KEY,

       BUDGET    DECIMAL(8,2),

       LOCATION  VARCHAR(30))



Answer 20.7:



CREATE TABLE P_COPY LIKE PLAYERS



Answer 20.8:



CREATE TABLE P2_COPY AS (SELECT * FROM PLAYERS)



Answer 20.9:



CREATE TABLE NUMBERS AS

(SELECT   PLAYERNO

 FROM     PLAYERS

 WHERE    TOWN = 'Stratford')



Example 21.2:



CREATE   TABLE DIPLOMAS

        (STUDENT     INTEGER NOT NULL,

         COURSE      INTEGER NOT NULL,

         DDATE       DATE NOT NULL,

         SUCCESSFUL  CHAR(1),

         LOCATION    VARCHAR(50),

         PRIMARY KEY (STUDENT, COURSE, DDATE))



Example 21.3:



CREATE   TABLE DIPLOMAS

        (STUDENT     INTEGER NOT NULL,

         COURSE      INTEGER NOT NULL,

         DDATE       DATE NOT NULL,

         SUCCESSFUL  CHAR(1),

         LOCATION    VARCHAR(50),

            PRIMARY KEY INDEX_PRIM (STUDENT, COURSE, DDATE))



Example 21.4:



CREATE   TABLE TEAMS

        (TEAMNO     INTEGER NOT NULL,

         PLAYERNO   INTEGER NOT NULL UNIQUE,

         DIVISION   CHAR(6) NOT NULL,

         PRIMARY KEY (TEAMNO))

;

CREATE   TABLE TEAMS

        (TEAMNO     INTEGER NOT NULL,

         PLAYERNO   INTEGER NOT NULL,

         DIVISION   CHAR(6) NOT NULL,

         PRIMARY KEY (TEAMNO),

         UNIQUE (PLAYERNO))



Example 21.5:



CREATE   TABLE PLAYERS

        (PLAYERNO     INTEGER NOT NULL,

         NAME         CHAR(15) NOT NULL,

         INITIALS     CHAR(3) NOT NULL,

         BIRTH_DATE   DATE,

         SEX          CHAR(1) NOT NULL,

         JOINED       SMALLINT NOT NULL,

         STREET       VARCHAR(30) NOT NULL,

         HOUSENO      CHAR(4),

         POSTCODE     CHAR(6),

         TOWN         VARCHAR(30) NOT NULL,

         PHONENO      CHAR(13),

         LEAGUENO     CHAR(4) UNIQUE,

         PRIMARY KEY  (PLAYERNO))



Example 21.6:



SET @@STORAGE_ENGINE = 'InnoDB'

;

CREATE   TABLE TEAMS

        (TEAMNO      INTEGER NOT NULL,

         PLAYERNO    INTEGER NOT NULL,

         DIVISION    CHAR(6) NOT NULL,

         PRIMARY KEY (TEAMNO),

         FOREIGN KEY (PLAYERNO)

            REFERENCES PLAYERS (PLAYERNO))

;

SELECT   *

FROM     TEAMS

WHERE    PLAYERNO NOT IN

        (SELECT   PLAYERNO

         FROM     PLAYERS)



Example 21.7:



CREATE   TABLE TEAMS

        (TEAMNO     INTEGER NOT NULL,

         PLAYERNO   INTEGER NOT NULL,

         DIVISION   CHAR(6) NOT NULL,

         PRIMARY KEY (TEAMNO),

         FOREIGN KEY (PLAYERNO) REFERENCES PLAYERS (PLAYERNO))



Example 21.8:



CREATE   TABLE MATCHES

        (MATCHNO     INTEGER NOT NULL,

         TEAMNO      INTEGER NOT NULL,

         PLAYERNO    INTEGER NOT NULL,

         WON         INTEGER NOT NULL,

         LOST        INTEGER NOT NULL,

         PRIMARY KEY (MATCHNO),

         FOREIGN KEY (TEAMNO) REFERENCES TEAMS (TEAMNO),

         FOREIGN KEY (PLAYERNO) REFERENCES PLAYERS (PLAYERNO))



Example 21.9:



CREATE   TABLE PENALTIES

        (PAYMENTNO     INTEGER NOT NULL,

         PLAYERNO      INTEGER NOT NULL,

         PAYMENT_DATE  DATE NOT NULL,

         AMOUNT        DECIMAL(7,2) NOT NULL,

         PRIMARY KEY (PAYMENTNO),

         FOREIGN KEY (PLAYERNO) REFERENCES PLAYERS (PLAYERNO))

;

CREATE   TABLE EMPLOYEES

        (EMPLOYEE_NO  CHAR(10) NOT NULL,

         MANAGER_NO   CHAR(10),

         PRIMARY KEY  (EMPLOYEE_NO),

         FOREIGN KEY  (MANAGER_NO) 

            REFERENCES EMPLOYEES (EMPLOYEE_NO))



Example 21.10:



CREATE   TABLE PENALTIES

        (PAYMENTNO     INTEGER NOT NULL,

         PLAYERNO      INTEGER NOT NULL,

         PAYMENT_DATE  DATE NOT NULL,

         AMOUNT        DECIMAL(7,2) NOT NULL,

         PRIMARY KEY  (PAYMENTNO),

         FOREIGN KEY  (PLAYERNO) REFERENCES PLAYERS (PLAYERNO)

            ON UPDATE  RESTRICT

            ON DELETE  RESTRICT)



Example 21.11:



CREATE   TABLE PENALTIES

        (PAYMENTNO     INTEGER NOT NULL,

         PLAYERNO      INTEGER NOT NULL,

         PAYMENT_DATE  DATE NOT NULL,

         AMOUNT        DECIMAL(7,2) NOT NULL,

         PRIMARY KEY (PAYMENTNO),

         FOREIGN KEY (PLAYERNO) REFERENCES PLAYERS (PLAYERNO)

            ON DELETE CASCADE)

;

DELETE

FROM      PLAYERS

WHERE     PLAYERNO = 127

;

DELETE

FROM      PENALTIES

WHERE     PLAYERNO = 127



Example 21.12:



CREATE   TABLE PENALTIES

        (PAYMENTNO     INTEGER NOT NULL,

         PLAYERNO      INTEGER NOT NULL,

         PAYMENT_DATE  DATE NOT NULL,

         AMOUNT        DECIMAL(7,2) NOT NULL,

         PRIMARY KEY  (PAYMENTNO),

         FOREIGN KEY  (PLAYERNO) REFERENCES PLAYERS (PLAYERNO)

            ON DELETE SET NULL)



Example 21.13:



CREATE   TABLE PLAYERS_X

        (PLAYERNO  INTEGER NOT NULL,

         SEX     CHAR(1) NOT NULL

                 CHECK(SEX IN ('M', 'F')))



Example 21.14:



CREATE   TABLE PLAYERS_Y

        (PLAYERNO    INTEGER NOT NULL,

         BIRTH_DATE  DATE NOT NULL

                     CHECK(BIRTH_DATE > '1920-01-01'))



Example 21.15:



CREATE   TABLE PLAYERS_Z

        (PLAYERNO    SMALLINT NOT NULL,

         BIRTH_DATE  DATE,

         JOINED      SMALLINT NOT NULL,

         CHECK(YEAR(BIRTH_DATE) < JOINED))

;

CREATE   TABLE PLAYERS_W

        (PLAYERNO    SMALLINT,

         BIRTH_DATE  DATE     NOT NULL,

         JOINED      SMALLINT NOT NULL,

         CHECK(YEAR(BIRTH_DATE) < JOINED),

         CHECK(BIRTH_DATE > '1920-01-01'),

         CHECK(JOINED  < 1880))



Example 21.16:



CREATE   TABLE PLAYERS_V

        (PLAYERNO   SMALLINT NOT NULL,

         SEX        CHAR(1) NOT NULL

                    CHECK(SEX IN 

                       (SELECT SEX FROM PLAYERS)))



Example 21.17:



CREATE   TABLE DIPLOMAS

        (STUDENT     INTEGER NOT NULL,

         COURSE      INTEGER NOT NULL,

         DDATE       DATE NOT NULL,

         SUCCESSFUL  CHAR(1),

         LOCATION    VARCHAR(50),

         CONSTRAINT  PRIMARY_KEY_DIPLOMAS

            PRIMARY KEY (STUDENT, COURSE, DDATE))



Example 21.18:



CREATE   TABLE PLAYERS

        (PLAYERNO     INTEGER NOT NULL,

         NAME         CHAR(15) NOT NULL,

         INITIALS     CHAR(3) NOT NULL,

         BIRTH_DATE   DATE,

         SEX          CHAR(1) NOT NULL,

         JOINED       SMALLINT NOT NULL,

         STREET       VARCHAR(30)  NOT NULL,

         HOUSENO      CHAR(4),

         POSTCODE     CHAR(6),

         TOWN         VARCHAR(30) NOT NULL,

         PHONE        CHAR(13),

         LEAGUENO     CHAR(4),

         CONSTRAINT PRIMARY_KEY_PLAYERS

            PRIMARY KEY(PLAYERNO),

         CONSTRAINT JOINED

            CHECK(JOINED > 1969),

         CONSTRAINT POSTCODE_SIX_CHARACTERS_LONG

            CHECK(POSTCODE LIKE '______'),

         CONSTRAINT ALLOWED_VALUES_SEX

            CHECK(SEX IN ('M', 'F')))



Answer 21.3:



CREATE   TABLE MATCHES

        (MATCHNO     INTEGER NOT NULL,

         TEAMNO      INTEGER NOT NULL,

         PLAYERNO    INTEGER NOT NULL,

         WON         INTEGER NOT NULL,

         LOST        INTEGER NOT NULL,

         PRIMARY KEY  (MATCHNO))

;

CREATE   TABLE MATCHES

        (MATCHNO     INTEGER NOT NULL PRIMARY KEY,

         TEAMNO      INTEGER NOT NULL,

         PLAYERNO    INTEGER NOT NULL,

         WON         INTEGER NOT NULL,

         LOST        INTEGER NOT NULL)



Example 22.1:



SHOW CHARACTER SET

;

SELECT   CHARACTER_SET_NAME, DESCRIPTION,

         DEFAULT_COLLATE_NAME, MAXLEN

FROM     INFORMATION_SCHEMA.CHARACTER_SETS



Example 22.2:



SHOW COLLATION LIKE 'utf8%'

;

SELECT   *

FROM     INFORMATION_SCHEMA.COLLATIONS

WHERE    COLLATION_NAME LIKE 'utf8%'



Example 22.3:



CREATE TABLE TABUCS2

      (C1  CHAR(10)     CHARACTER SET ucs2

                        NOT NULL PRIMARY KEY,

       C2  VARCHAR(10)  CHARACTER SET ucs2)



Example 22.4:



CREATE TABLE TABDEFKARSET

      (C1   CHAR(10) NOT NULL,

       C2   VARCHAR(10))

;

SELECT   COLUMN_NAME, CHARACTER_SET_NAME

FROM     INFORMATION_SCHEMA.COLUMNS

WHERE    TABLE_NAME = 'TABDEFKARSET'



Example 22.5:



CREATE TABLE TABUTF8

      (C1   CHAR(10) NOT NULL,

       C2   VARCHAR(10))

   DEFAULT CHARACTER SET utf8

;

SELECT   COLUMN_NAME, CHARACTER_SET_NAME

FROM     INFORMATION_SCHEMA.COLUMNS

WHERE    TABLE_NAME = 'TABUTF8'



Example 22.6:



SELECT   TABLE_NAME, COLUMN_NAME, COLLATION_NAME

FROM     INFORMATION_SCHEMA.COLUMNS

WHERE    TABLE_NAME IN ('TABUCS2', 'TABDEFKARSET')



Example 22.7:



CREATE TABLE TABCOLLATE

      (C1   CHAR(10)

            CHARACTER SET utf8

            COLLATE utf8_romanian_ci NOT NULL,

       C2   VARCHAR(10)

            CHARACTER SET utf8

            COLLATE utf8_spanish_ci)

;

SELECT   COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME

FROM     INFORMATION_SCHEMA.COLUMNS

WHERE    TABLE_NAME = 'TABCOLLATE'



Example 22.8:



CREATE TABLE TABDEFCOL

      (C1   CHAR(10) NOT NULL,

       C2   VARCHAR(10))

   CHARACTER SET utf8

   COLLATE utf8_romanian_ci

;

SELECT   COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME

FROM     INFORMATION_SCHEMA.COLUMNS

WHERE    TABLE_NAME = 'TABDEFCOL'



Example 22.9:



CREATE TABLE TWOCHARSETS

      (C1   CHAR(10) CHARACTER SET 'latin1' NOT NULL,

       C2   VARCHAR(10) CHARACTER SET 'hp8')

;

INSERT INTO TWOCHARSETS VALUES ('A', 'A')

;

SELECT   *

FROM     TWOCHARSETS

WHERE    C1 = C2



Example 22.10:



CREATE TABLE TWOCOLL

      (C1   CHAR(10) COLLATE  'latin1_general_ci' NOT NULL,

       C2   VARCHAR(10) COLLATE 'latin1_danish_ci')

;

INSERT INTO TWOCOLL VALUES ('A', 'A')

;

SELECT   *

FROM     TWOCOLL

WHERE    C1 = C2

;

SELECT   *

FROM     TWOCOLL

WHERE    C1 COLLATE latin1_danish_ci = C2

;

SELECT   *

FROM     TWOCOLL

WHERE    C1 COLLATE utf8_general_ci = C2



Example 22.11:



SELECT   _utf8'database'



Example 22.12:



SELECT   COLLATION(_utf8'database'),

         COLLATION(_utf8'database' COLLATE utf8_bin),

         COLLATION((SELECT MAX(NAME) FROM PLAYERS))



Example 22.13:



SELECT   CHARSET(_utf8'database'),

         CHARSET((SELECT MAX(NAME) FROM PLAYERS))



Example 22.14:



SELECT _latin1'Muller' AS NAME

UNION

SELECT CONCAT('M', _latin1 x'FC', 'ller')

ORDER BY NAME COLLATE latin1_swedish_ci



Example 22.15:



CREATE TABLE LETTERS

   (SEQNO    INTEGER NOT NULL PRIMARY KEY,

    LETTER   CHAR(1) CHARACTER SET UTF8 NOT NULL)

;

INSERT INTO LETTERS VALUES (1, 'e'), (2, '?),(3, '?)

;

SELECT   LETTER, COUNT(*)

FROM    (SELECT   LETTER COLLATE latin2_czech_cs AS LETTER

         FROM     LETTERS) AS LATIN2_CZECH_LETTERS

GROUP BY LETTER

;

SELECT   LETTER, COUNT(*)

FROM    (SELECT   LETTER COLLATE latin2_croatian_ci AS LETTER

         FROM     LETTERS) AS LATIN2_CROATIAN_LETTERS

GROUP BY LETTER



Example 22.16:



SELECT   LETTER

FROM     LETTERS

ORDER BY LETTER



Example 22.17:



SELECT   COERCIBILITY('Rick' COLLATE latin1_general_ci) AS C0,

         COERCIBILITY(TEAMNO) AS C2,

         COERCIBILITY(USER()) AS C3,

         COERCIBILITY('Rick') AS C4,

         COERCIBILITY(NULL) AS C5

FROM     TEAMS

WHERE    TEAMNO = 1



Example 22.18:



SELECT @@COLLATION_DATABASE



Example 22.19:



SHOW VARIABLES LIKE 'CHARACTER_SET%'



Answer 22.2:



SELECT   CHARACTER_SET_NAME, COUNT(*)

FROM     INFORMATION_SCHEMA.COLLATIONS

GROUP BY CHARACTER_SET_NAME



Answer 22.3:



SELECT CHARSET((SELECT MAX(TOWN) FROM PLAYERS)),

       COLLATION((SELECT MAX(TOWN) FROM PLAYERS))



Answer 22.4:



SELECT   TOWN

FROM     PLAYERS

ORDER BY TOWN COLLATE latin1_danish_ci



Example 23.1:



CREATE TABLE PLAYERS_SMALL

      (PLAYERNO     INTEGER NOT NULL PRIMARY KEY,

       NAME         CHAR(15) NOT NULL,

       INITIALS     CHAR(3) NOT NULL,

       BIRTH_DATE   DATE,

       SEX          ENUM ('M','F'))



Example 23.2:



INSERT INTO PLAYERS_SMALL

VALUES (24, 'Jones', 'P', '1985-04-22', 'M')

;

INSERT INTO PLAYERS_SMALL

VALUES (25, 'Marx', 'L', '1981-07-01', 'F')

;

INSERT INTO PLAYERS_SMALL

VALUES (111, 'Cruise', 'T', '1982-11-11', 'm')

;

INSERT INTO PLAYERS_SMALL

VALUES (199, 'Schroder', 'L', '1970-02-12', 'X')

;

INSERT INTO PLAYERS_SMALL

VALUES (201, 'Lie', 'T', '1972-02-12', NULL)

;

SELECT * FROM PLAYERS_SMALL



Example 23.3:



SELECT   PLAYERNO, SEX, SEX * 1

FROM     PLAYERS_SMALL



Example 23.4:



SELECT   PLAYERNO, SEX

FROM     PLAYERS_SMALL

ORDER BY SEX



Example 23.5:



CREATE TABLE SEXES

      (SEX        CHAR(1) NOT NULL PRIMARY KEY)

;

INSERT INTO SEXES VALUES ('M'),('F')

;

CREATE TABLE PLAYERS_SMALL2

      (PLAYERNO     INTEGER NOT NULL PRIMARY KEY,

       NAME         CHAR(15) NOT NULL,

       INITIALS     CHAR(3) NOT NULL,

       BIRTH_DATE   DATE,

       SEX          CHAR(1),

       FOREIGN KEY (SEX) REFERENCES SEXES (SEX))



Example 23.6:



CREATE TABLE TEAMS_NEW

      (TEAMNO     INTEGER NOT NULL PRIMARY KEY,

       PLAYERNO   INTEGER NOT NULL,

       DIVISION   SET ('first','second','third','fourth'))



Example 23.7:



INSERT INTO TEAMS_NEW VALUES (1, 27, 'first')

;

INSERT INTO TEAMS_NEW VALUES (2, 27, 'first,third')

;

INSERT INTO TEAMS_NEW VALUES (3, 27, 'first,third,sixth')

;

INSERT INTO TEAMS_NEW VALUES (4, 27, 'first,fifth')

;

INSERT INTO TEAMS_NEW VALUES (5, 27, NULL)

;

INSERT INTO TEAMS_NEW VALUES (6, 27, 7)

;

INSERT INTO TEAMS_NEW VALUES (7, 27, CONV(1001,2,10))

;

SELECT * FROM TEAMS_NEW



Example 23.8:



SELECT    TEAMNO, DIVISION * 1, BIN(DIVISION * 1)

FROM      TEAMS_NEW



Example 23.9:



CREATE TABLE SERIES_NUMBERS

      (NUMBERS SET 

          ('1','2','3','4','5','6','7','8','9','10',

           '11','12','13','14','15','16','17','18','19','20',

           '21','22','23','24','25','26','27','28','29','30',

           '31','32','33','34','35','36','37','38','39','40'))

;

INSERT INTO SERIES_NUMBERS VALUES ('1'),('20'),('40')

;

SELECT    NUMBERS, BIN(NUMBERS * 1)

FROM      SERIES_NUMBERS



Example 23.10:



INSERT INTO TEAMS_NEW VALUES (8, 27, 'eighth')

;

INSERT INTO TEAMS_NEW VALUES (9, 27, '')

;

SELECT    TEAMNO, DIVISION, DIVISION * 1, BIN(DIVISION * 1)

FROM      TEAMS_NEW

WHERE     TEAMNO IN (8, 9)



Example 23.11:



SELECT    TEAMNO

FROM      TEAMS_NEW

WHERE     DIVISION = 'first'



Example 23.12:



SELECT   TEAMNO, DIVISION

FROM     TEAMS_NEW

WHERE    DIVISION & POWER(2,3-1) = POWER(2,3-1)



Example 23.13:



SELECT   TEAMNO, DIVISION

FROM     TEAMS_NEW

WHERE    DIVISION & 9 = 9



Example 23.14:



SELECT   TEAMNO,

         LENGTH(REPLACE(CONV((DIVISION * 1),10,2),'0',''))

         AS NUMBER

FROM     TEAMS_NEW



Example 23.15:



SELECT   TEAMNO,

         CASE WHEN (DIVISION & POWER(2,1-1) = POWER(2,1-1)) = 1

            THEN 'YES' ELSE 'NO' END AS FIRST,

         CASE WHEN (DIVISION & POWER(2,2-1) = POWER(2,2-1)) = 1

            THEN 'YES' ELSE 'NO' END AS SECOND,

         CASE WHEN (DIVISION & POWER(2,3-1) = POWER(2,3-1)) = 1

            THEN 'YES' ELSE 'NO' END AS THIRD,

         CASE WHEN (DIVISION & POWER(2,4-1) = POWER(2,4-1)) = 1

            THEN 'YES' ELSE 'NO' END AS FOURTH

FROM     TEAMS_NEW



Example 23.16:



SELECT   DIVISION, COUNT(*)

FROM     TEAMS_NEW

WHERE    DIVISION > 0

OR       DIVISION IS NULL

GROUP BY DIVISION



Example 23.17:



UPDATE   TEAMS_NEW

SET      DIVISION = DIVISION | POWER(2,3-1)

WHERE    TEAMNO = 1



Example 23.18:



UPDATE   TEAMS_NEW

SET      DIVISION = DIVISION & CONV(1011,2,10)



Example 23.19:



UPDATE   TEAMS_NEW

SET      DIVISION = 0



Answer 23.1:



CREATE TABLE MATCHES

      (MATCHNO      INTEGER NOT NULL PRIMARY KEY,

       TEAMNO       INTEGER NOT NULL,

       PLAYERNO     INTEGER NOT NULL,

       WON          ENUM('0','1','2','3') NOT NULL,

       LOST         ENUM('0','1','2','3') NOT NULL)



Example 24.1:



DROP TABLE PLAYERS



Example 24.2:



DROP TABLE DB8.TAB1



Example 24.3:



DROP TABLES COMMITTEE_MEMBERS, MATCHES, TEAMS,

     PENALTIES, PLAYERS



Example 24.4:



RENAME TABLE PLAYERS TO TENNIS_PLAYERS



Example 24.5:



RENAME TABLES PLAYERS TO TENNIS_PLAYERS,

       COMMITTEE_MEMBERS TO MEMBERS



Example 24.6:



ALTER TABLE PLAYERS RENAME TO TENNIS_PLAYERS



Example 24.7:



ALTER TABLE CITY_NAMES

   AUTO_INCREMENT = 10000

   COMMENT = 'New comment'



Example 24.8:



ALTER TABLE PLAYERS

   CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci



Example 24.9:



ALTER TABLE PLAYERS ORDER BY LEAGUENO DESC



Example 24.10:



ALTER   TABLE TEAMS

ADD     TYPE CHAR(1)



Example 24.11:



ALTER   TABLE TEAMS

ADD     TYPE CHAR(1) AFTER TEAMNO



Example 24.12:



ALTER   TABLE TEAMS

ADD    (CATEGORY  VARCHAR(20) NOT NULL,

        IMAGE     INTEGER DEFAULT 10)



Example 24.13:



ALTER   TABLE TEAMS

DROP    TYPE



Example 24.14:



ALTER   TABLE PLAYERS

CHANGE  BIRTH_DATE DATE_OF_BIRTH DATE



Example 24.15:



ALTER   TABLE PLAYERS

CHANGE  TOWN TOWN VARCHAR(40) NOT NULL



Example 24.16:



ALTER   TABLE PLAYERS

CHANGE  TOWN TOWN VARCHAR(5) NOT NULL



Example 24.17:



ALTER   TABLE PLAYERS

CHANGE  PLAYERNO PLAYERNO SMALLINT



Example 24.18:



ALTER   TABLE PLAYERS

CHANGE  TOWN TOWN VARCHAR(5) NOT NULL AFTER PLAYERNO



Example 24.19:



ALTER   TABLE PLAYERS

MODIFY  TOWN VARCHAR(5) NOT NULL AFTER PLAYERNO



Example 24.20:



ALTER   TABLE COMMITTEE_MEMBERS

ALTER   POSITION SET DEFAULT 'Member'

;

ALTER   TABLE COMMITTEE_MEMBERS

MODIFY  POSITION CHAR(20) DEFAULT 'Member'



Example 24.21:



ALTER   TABLE COMMITTEE_MEMBERS

ALTER   POSITION DROP DEFAULT



Example 24.22:



CREATE TABLE T1 

      (A INTEGER NOT NULL PRIMARY KEY,

       B INTEGER NOT NULL)

;

CREATE TABLE T2

      (A INTEGER NOT NULL PRIMARY KEY,

       B INTEGER NOT NULL,

       CONSTRAINT C1 CHECK (B > 0),

       CONSTRAINT FK1 FOREIGN KEY (A) REFERENCES T1 (A))

;

ALTER TABLE T1

   ADD CONSTRAINT FK2 FOREIGN KEY (A) REFERENCES T2 (A)



Example 24.23:



ALTER TABLE PLAYERS DROP PRIMARY KEY



Example 24.24:



ALTER TABLE T1 DROP CONSTRAINT FK2



Example 24.25:



ALTER TABLE T2 DROP CONSTRAINT C1



Answer 24.1:



ALTER TABLE TEAMS

   ENGINE = MYISAM



Answer 24.2:



ALTER TABLE COMMITTEE_MEMBERS

   ORDER BY PLAYERNO ASC, POSITION DESC



Answer 24.3:



ALTER TABLE COMMITTEE_MEMBERS

   CHANGE POSITION COMMITTEE_POSITION CHAR(20)



Answer 24.4:



ALTER TABLE COMMITTEE_MEMBERS

   MODIFY COMMITTEE_POSITION CHAR(30)



Answer 24.5:



ALTER TABLE PLAYERS

   ALTER TOWN SET DEFAULT 'Stratford'



Example 25.4:



SELECT   *

FROM     PLAYERS

WHERE    PLAYERNO = 44



Example 25.5:



SELECT   PLAYERNO, TOWN

FROM     PLAYERS

WHERE    PLAYERNO < 10

AND      TOWN = 'Stratford'

ORDER BY PLAYERNO



Example 25.6:



SELECT   NAME, INITIALS

FROM     PLAYERS

WHERE    TOWN =

        (SELECT   TOWN

         FROM     PLAYERS

         WHERE    PLAYERNO = 44)



Example 25.7:



CREATE   INDEX PLAY_PC

ON       PLAYERS (POSTCODE ASC)

;

CREATE   INDEX PLAY_PC USING BTREE

ON       PLAYERS (POSTCODE ASC)



Example 25.8:



CREATE   INDEX PLAY_TOWN USING HASH

ON       PLAYERS (TOWN)



Example 25.9:



CREATE   INDEX MAT_WL

ON       MATCHES (WON, LOST)



Example 25.10:



CREATE   UNIQUE INDEX NAMEINIT

ON       PLAYERS (NAME, INITIALS)



Example 25.11:



ALTER TABLE TEAMS

ADD   INDEX TEAMS_DIVISION USING BTREE (DIVISION)



Example 25.12:



ALTER TABLE PLAYERS

ADD   UNIQUE INDEX TEAMS_DIVISION 

      USING HASH (TOWN, STREET, BIRTH_DATE)



Example 25.13:



CREATE TABLE MATCHES

      (MATCHNO     INTEGER NOT NULL PRIMARY KEY,

       TEAMNO      INTEGER NOT NULL,

       PLAYERNO    INTEGER NOT NULL,

       WON         SMALLINT NOT NULL,

       LOST        SMALLINT NOT NULL,

       INDEX MAT_WL (WON, LOST))



Example 25.14:



CREATE   TABLE PLAYERS

        (PLAYERNO     INTEGER NOT NULL PRIMARY KEY,

         NAME         CHAR(15) NOT NULL,

         INITIALS     CHAR(3) NOT NULL,

         BIRTH_DATE   DATE,

         SEX          CHAR(1) NOT NULL,

         JOINED       SMALLINT NOT NULL,

         STREET       VARCHAR(30) NOT NULL,

         HOUSENO      CHAR(4),

         POSTCODE     CHAR(6),

         TOWN         VARCHAR(30) NOT NULL,

         PHONENO      CHAR(13),

         LEAGUENO     CHAR(4),

         UNIQUE INDEX NAMEINIT USING HASH (NAME, INITIALS))



Example 25.15:



DROP INDEX PLAY_PC ON PLAYERS

;

DROP INDEX MATD_WL ON MATCHES

;

DROP INDEX NAMEINIT ON PLAYERS



Example 25.16:



CREATE TABLE T1

      (COL1   INTEGER NOT NULL,

       COL2   DATE NOT NULL UNIQUE,

       COL3   INTEGER NOT NULL,

       COL4   INTEGER NOT NULL,

       PRIMARY KEY (COL1, COL4),

       UNIQUE (COL3, COL4),

       UNIQUE (COL3, COL1))

;

CREATE UNIQUE INDEX "PRIMARY" USING BTREE

ON     T1 (COL1, COL4)

;

CREATE UNIQUE INDEX COL2 USING BTREE

ON     T1 (COL2)

;

CREATE UNIQUE INDEX COL3 USING BTREE

ON     T1 (COL3, COL4)

;

CREATE UNIQUE INDEX COL3_2 USING BTREE

ON     T1 (COL3, COL1)





Example 25.17:



CREATE TABLE PLAYERS_XXL

      (PLAYERNO     INTEGER NOT NULL PRIMARY KEY,

       NAME         CHAR(15) NOT NULL,

       INITIALS     CHAR(3) NOT NULL,

       BIRTH_DATE   DATE,

       SEX          CHAR(1) NOT NULL,

       JOINED       SMALLINT NOT NULL,

       STREET       VARCHAR(30) NOT NULL,

       HOUSENO      CHAR(4),

       POSTCODE     CHAR(6),

       TOWN         VARCHAR(30) NOT NULL,

       PHONENO      CHAR(13),

       LEAGUENO     CHAR(8))



Example 25.18:



CREATE PROCEDURE FILL_PLAYERS_XXL

   (IN NUMBER_PLAYERS INTEGER)

BEGIN

   DECLARE COUNTER INTEGER;

   TRUNCATE TABLE PLAYERS_XXL;

   COMMIT WORK;

   SET COUNTER = 1;

   WHILE COUNTER <= NUMBER_PLAYERS DO

    INSERT INTO PLAYERS_XXL VALUES(

     COUNTER,

     CONCAT('name',CAST(COUNTER AS CHAR(10))),

     CASE MOD(COUNTER,2) WHEN 0 THEN 'vl1' ELSE 'vl2' END,

     DATE('1960-01-01') + INTERVAL (MOD(COUNTER,300)) MONTH,

     CASE MOD(COUNTER,20) WHEN 0 THEN 'F' ELSE 'M' END,

     1980 + MOD(COUNTER,20),

     CONCAT('street',CAST(COUNTER /10 AS UNSIGNED INTEGER)),

     CAST(CAST(COUNTER /10 AS UNSIGNED INTEGER)+1 AS CHAR(4)),

     CONCAT('p',MOD(COUNTER,50)),

     CONCAT('town',MOD(COUNTER,10)),

     '070-6868689',

     CASE MOD(COUNTER,3) WHEN 0 

        THEN NULL ELSE cast(COUNTER AS CHAR(8)) END);

    IF MOD(COUNTER,1000) = 0 THEN

     COMMIT WORK;

    END IF;

    SET COUNTER = COUNTER + 1;

   END WHILE;

   COMMIT WORK;

END



Example 25.19:



CALL FILL_PLAYERS_XXL(100000)



Example 25.20:



CREATE INDEX PLAYERS_XXL_INITIALS

   ON PLAYERS_XXL(INITIALS)

;

CREATE INDEX PLAYERS_XXL_POSTCODE

   ON PLAYERS_XXL(POSTCODE)

;

CREATE INDEX PLAYERS_XXL_STREET

   ON PLAYERS_XXL(STREET)



Example 25.21:



SELECT   TABLE_CREATOR, TABLE_NAME, COUNT(*)

FROM     INDEXES

GROUP BY TABLE_CREATOR, TABLE_NAME

HAVING   COUNT(*) > 1



Example 25.22:



SELECT   TABLE_CREATOR, TABLE_NAME

FROM     TABLES AS TAB

WHERE    NOT EXISTS

        (SELECT   *

         FROM     INDEXES AS IDX

         WHERE    TAB.TABLE_CREATOR = IDX.TABLE_CREATOR

         AND      TAB.TABLE_NAME = TAB.TABLE_NAME

         AND      IDX.UNIQUE_ID = 'YES')



Example 25.23:



SHOW INDEX FROM PLAYERS



Example 26.1:



CREATE   VIEW TOWNS AS

SELECT   DISTINCT TOWN

FROM     PLAYERS

;

SELECT   *

FROM     TOWNS



Example 26.2:



CREATE   VIEW CPLAYERS AS

SELECT   PLAYERNO, LEAGUENO

FROM     PLAYERS

WHERE    LEAGUENO IS NOT NULL

;

SELECT   *

FROM     CPLAYERS



Example 26.3:



SELECT   *

FROM     CPLAYERS

WHERE    PLAYERNO BETWEEN 6 AND 44

;

SELECT   PLAYERNO, LEAGUENO

FROM     PLAYERS

WHERE    LEAGUENO IS NOT NULL

AND      PLAYERNO BETWEEN 6 AND 44



Example 26.4:



DELETE

FROM     CPLAYERS

WHERE    LEAGUENO = '7060'



Example 26.5:



CREATE   VIEW SEVERAL AS

SELECT   *

FROM     CPLAYERS

WHERE    PLAYERNO BETWEEN 6 AND 27

;

SELECT   *

FROM     SEVERAL



Example 26.6:



CREATE VIEW DIGITS AS

SELECT 0 DIGIT UNION SELECT 1 UNION

SELECT 2 UNION SELECT 3 UNION

SELECT 4 UNION SELECT 5 UNION

SELECT 6 UNION SELECT 7 UNION

SELECT 8 UNION SELECT 9

;

SELECT * FROM DIGITS



Example 26.7:



CREATE   VIEW STRATFORDERS (PLAYERNO, NAME, INIT, BORN) AS

SELECT   PLAYERNO, NAME, INITIALS, BIRTH_DATE

FROM     PLAYERS

WHERE    TOWN = 'Stratford'

;

SELECT   *

FROM     STRATFORDERS

WHERE    PLAYERNO > 90



Example 26.8:



CREATE   VIEW RESIDENTS AS

SELECT   TOWN, COUNT(*)

FROM     PLAYERS

GROUP BY TOWN

;

SELECT   TOWN, "COUNT(*)"

FROM     RESIDENTS



Example 26.9:



CREATE   VIEW VETERANS AS

SELECT   *

FROM     PLAYERS

WHERE    BIRTH_DATE < '1960-01-01'

;

UPDATE   VETERANS

SET      BIRTH_DATE = '1970-09-01'

WHERE    PLAYERNO = 2

;

CREATE   VIEW VETERANS AS

SELECT   *

FROM     PLAYERS

WHERE    BIRTH_DATE < '1960-01-01'

WITH     CHECK OPTION



Example 26.10:



CREATE   VIEW INGLEWOOD_VETERANS AS

SELECT   *

FROM     VETERANS

WHERE    TOWN = 'Inglewood'

WITH     CASCADED CHECK OPTION



Example 26.11:



CREATE   DEFINER = 'JACO'@'%' VIEW JACO_VIEW AS

SELECT   *

FROM     PLAYERS

WHERE    PLAYERNO > 100



Example 26.12:



CREATE   SQL SECURITY INVOKER

         ALGORITHM = MERGE

         VIEW SIMPLE_VIEW AS

SELECT   PLAYERNO

FROM     PLAYERS

WHERE    PLAYERNO > 100



Example 26.13:



DROP VIEW CPLAYERS



Example 26.14:



SELECT   TABLE_NAME

FROM     TABLES

WHERE    TABLE_NAME = 'STOCK'

AND      TABLE_CREATOR = 'TENNIS'

UNION

SELECT   VIEW_NAME

FROM     VIEWS

WHERE    VIEW_NAME = 'STOCK'

AND      VIEW_CREATOR = 'TENNIS'



Example 26.15:



CREATE   VIEW COST_RAISERS AS

SELECT   *

FROM     PLAYERS

WHERE    PLAYERNO IN 

        (SELECT   PLAYERNO

         FROM     PENALTIES)

;

SELECT   PLAYERNO

FROM     COST_RAISERS

WHERE    TOWN = 'Stratford'

;

SELECT   PLAYERNO

FROM    (SELECT   *

         FROM     PLAYERS

         WHERE    PLAYERNO IN 

                 (SELECT   PLAYERNO

                  FROM     PENALTIES)) AS VIEWFORMULA

WHERE    TOWN = 'Stratford'



Example 26.16:



DELETE

FROM     STRATFORDERS

WHERE    BORN > '1965-12-31'

;

DELETE

FROM     PLAYERS

WHERE    BIRTH_DATE > '1965-12-31'

AND      TOWN = 'Stratford'

;

SELECT   *

FROM     PLAYERS

WHERE    PLAYERNO IN 

        (SELECT   PLAYERNO

         FROM     PENALTIES)



Example 26.17:



CREATE   VIEW EXPENSIVE_PLAYERS AS

         ALORITHM = TEMPTABLE

SELECT   *

FROM     PLAYERS

WHERE    PLAYERNO IN 

        (SELECT   PLAYERNO

         FROM     PENALTIES)



Example 26.18:



SELECT   *

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES)

AND      TOWN = 'Stratford'

;

SELECT   TOWN, COUNT(*)

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES)

GROUP BY TOWN

;

CREATE   VIEW PPLAYERS AS

SELECT   *

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     PENALTIES)

;

SELECT   *

FROM     PPLAYERS

WHERE    TOWN = 'Stratford'

;

SELECT   TOWN, COUNT(*)

FROM     PPLAYERS

GROUP BY TOWN



Example 26.20:



SELECT   DISTINCT NAME, INITIALS, DIVISION

FROM     PLAYERS AS P, MATCHES AS M, TEAMS AS T

WHERE    P.PLAYERNO = M.PLAYERNO

AND      M.TEAMNO = T.TEAMNO

;

CREATE   VIEW TEAMS (TEAMNO, PLAYERNO, DIVISION) AS

SELECT   DISTINCT TEAMNO, CAPTAIN, DIVISION

FROM     RESULT

;

CREATE   VIEW MATCHES AS

SELECT   MATCHNO, TEAMNO, PLAYERNO, 

         WON, LOST

FROM     RESULT



Example 26.21:



CREATE   VIEW PLAYERSS AS

SELECT   *

FROM     PLAYERS

WHERE    SEX IN ('M', 'F')

WITH     CHECK OPTION



Answer 26.1:



CREATE   VIEW NUMBERPLS (TEAMNO, NUMBER) AS

SELECT   TEAMNO, COUNT(*)

FROM     MATCHES

GROUP BY TEAMNO 



Answer 26.2:



CREATE   VIEW WINNERS AS

SELECT   PLAYERNO, NAME

FROM     PLAYERS

WHERE    PLAYERNO IN

        (SELECT   PLAYERNO

         FROM     MATCHES

         WHERE    WON > LOST)



Answer 26.3:



CREATE   VIEW TOTALS (PLAYERNO, SUM_PENALTIES) AS

SELECT   PLAYERNO, SUM(AMOUNT)

FROM     PENALTIES

GROUP BY PLAYERNO



Answer 26.5.1:



SELECT   YEAR(BORN) ?1900 AS DIFFERENCE, COUNT(*)

FROM    (SELECT   PLAYERNO, NAME,

                  INITIALS, BIRTH_DATE AS BORN

         FROM     PLAYERS

         WHERE    TOWN = 'Stratford') AS STRATFORDERS

GROUP BY DIFFERENCE



Answer 26.5.2:



SELECT   EXPENSIVE.PLAYERNO

FROM    (SELECT   *

         FROM     PLAYERS

         WHERE    PLAYERNO IN 

                 (SELECT   PLAYERNO

                  FROM     PENALTIES)) AS EXPENSIVE,

        (SELECT   PLAYERNO, NAME,

                  INITIALS, BIRTH_DATE AS BORN

         FROM     PLAYERS

         WHERE    TOWN = 'Stratford') AS STRATFORDERS 

WHERE    EXPENSIVE.PLAYERNO = STRATFORDERS.PLAYERNO



Answer 26.5.3:



UPDATE   PLAYERS

SET      BIRTH_DATE = '1950-04-04'

WHERE    PLAYERNO = 7



Example 27.1:



SELECT   SCHEMA_NAME

FROM     INFORMATION_SCHEMA.SCHEMATA



Example 27.2:



SELECT   TABLE_NAME

FROM     INFORMATION_SCHEMA.TABLES

WHERE    TABLE_SCHEMA = 'TENNIS'

ORDER BY TABLE_NAME



Example 27.3:



CREATE DATABASE TENNIS2

   DEFAULT CHARACTER SET utf8

   DEFAULT COLLATE utf8_general_ci



Example 27.4:



SELECT   SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME,

         DEFAULT_COLLATION_NAME

FROM     INFORMATION_SCHEMA.SCHEMATA



Example 27.5:



ALTER DATABASE TENNIS2

   DEFAULT CHARACTER SET sjis

   DEFAULT COLLATE sjis_japanese_ci



Example 27.6:



ALTER DATABASE TENNIS CHARACTER SET hp8

;

CREATE TABLE CHARSETHP8

      (C1  CHAR(10) NOT NULL,

       C2  VARCHAR(10))

;

SELECT   COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME

FROM     INFORMATION_SCHEMA.COLUMNS

WHERE    TABLE_NAME = 'CHARSETHP8'



Example 27.7:



ALTER DATABASE TENNIS COLLATE hp8_bin



Example 27.8:



DROP DATABASE TENNIS2



Example 28.1:



CREATE USER

   'CHRIS'@'localhost' IDENTIFIED BY 'CHRISSEC',

   'PAUL'@'localhost' IDENTIFIED BY 'LUAP'



Example 28.2:



CREATE USER

   'CHRIS1'@'sql.r20.com' IDENTIFIED BY 'CHRISSEC1',

   'CHRIS2'@'%' IDENTIFIED BY 'CHRISSEC2',

   'CHRIS3'@'%.r20.com' IDENTIFIED BY 'CHRISSEC3'

;

SELECT   *

FROM     USERS

WHERE    USER_NAME LIKE '''CHRIS%'

ORDER    BY 1



Example 28.3:



DROP USER JIM



Example 28.4:



RENAME USER

   'CHRIS1'@'sql.r20.com' TO 'COMBO1'@'sql.r20.com',

   'CHRIS2'@'%' TO 'COMBO2'@'sql.r20.com'

;

SELECT   *

FROM     USERS

WHERE    USER_NAME LIKE '''COMBO%'

ORDER    BY 1



Example 28.5:



SET PASSWORD FOR 'JOHN'= PASSWORD('JOHN1')



Example 28.6:



SET PASSWORD FOR ROB = PASSWORD('ROBSEC')



Example 28.7:



GRANT   SELECT

ON      PLAYERS

TO      JAMIE



Example 28.8:



GRANT   SELECT

ON      PLAYERS

TO      'JAMIE'@'localhost' IDENTIFIED BY 'JAMIEPASS'



Example 28.9:



GRANT   INSERT, UPDATE

ON      TEAMS

TO      JAMIE, PIET



Example 28.10:



GRANT   UPDATE (PLAYERNO, DIVISION)

ON      TEAMS

TO      PETE



Example 28.11:



GRANT   SELECT

ON      TENNIS.*

TO      PETE



Example 28.12:



GRANT   CREATE, ALTER, DROP, CREATE VIEW

ON      TENNIS.*

TO      JIM



Example 28.13:



GRANT   SELECT

ON      INFORMATION_SCHEMA.*

TO      PETE



Example 28.14:



GRANT   SELECT, INSERT

ON      *

TO      ALYSSA



Example 28.15:



GRANT   CREATE, ALTER, DROP

ON      *.*

TO      MAX



Example 28.16:



GRANT   CREATE USER

ON      *.*

TO      ALYSSA

;

GRANT   ALL PRIVILEGES

ON      *.*

TO      ROOT



Example 28.17:



GRANT   REFERENCES

ON      TEAMS

TO      JOHN

WITH    GRANT OPTION

;

GRANT   REFERENCES

ON      TEAMS

TO      PETE



Example 28.18:



GRANT   INSERT

ON      COMMITTEE_MEMBERS

TO      MARC

;

GRANT   SELECT

ON      COMMITTEE_MEMBERS

TO      MARC

WITH    GRANT OPTION



Example 28.19:



GRANT   SELECT

ON      *.*

TO      SAM

WITH    GRANT OPTION



Example 28.20:



GRANT   SELECT

ON      *

TO      JIM

WITH    MAX_QUERIES_PER_HOUR 1



Example 28.21:



SELECT   GRANTEE

FROM     USER_AUTHS

WHERE    PRIVILEGE = 'SELECT'

UNION

SELECT   GRANTEE

FROM     DATABASE_AUTHS

WHERE    DATABASE_NAME = 'TENNIS'

AND      PRIVILEGE = 'SELECT'

UNION

SELECT   GRANTEE

FROM     TABLE_AUTHS

WHERE    TABLE_CREATOR = 'TENNIS'

AND      PRIVILEGE = 'SELECT'

AND      TABLE_NAME = 'PLAYERS'



Example 28.22:



REVOKE   SELECT

ON       PLAYERS

FROM     JIM



Example 28.23:



REVOKE   REFERENCES

ON       TEAMS

FROM     JIM



Example 28.24:



REVOKE  INSERT, SELECT

ON      COMMITTEE_MEMBERS

FROM    MARC

;

REVOKE  GRANT OPTION

ON      COMMITTEE_MEMBERS

FROM    MARC



Example 28.25:



CREATE USER 'DIANE'@'localhost' IDENTIFIED BY 'SECRET'

;

CREATE   VIEW NAME_ADDRESS AS

SELECT   NAME, INITIALS, STREET, HOUSENO,

         TOWN

FROM     PLAYERS

WHERE    LEAGUENO IS NULL

;

GRANT   SELECT

ON      NAME_ADDRESS

TO      DIANE



Example 28.26:



CREATE USER 'GERARD'@'localhost' IDENTIFIED BY 'XYZ1234'

;

CREATE   VIEW RESIDENTS (TOWN, NUMBER_OF) AS

SELECT   TOWN, COUNT(*)

FROM     PLAYERS

GROUP BY TOWN

;

GRANT   SELECT

ON      RESIDENTS

TO      GERARD



Answer 28.1:



CREATE  USER RONALDO IDENTIFIED BY 'NIKE'



Answer 28.2:



DROP    USER RONALDO



Answer 28.3:



GRANT   SELECT, INSERT

ON      PLAYERS

TO      RONALDO



Answer 28.4:



GRANT   UPDATE(STREET, HOUSENO, POSTCODE, TOWN)

ON      PLAYERS

TO      RONALDO



Answer 28.5:



GRANT   INSERT

ON      TENNIS.*

TO      JACO, DIANE



Example 29.1:



SHOW INDEX FROM PLAYERS



Example 29.2:



CREATE INDEX PLAYERS_TOWN

    ON PLAYERS (TOWN)

;

SHOW INDEX FROM PLAYERS



Example 29.3:



ANALYZE TABLE PLAYERS

;

SHOW INDEX FROM PLAYERS



Example 29.4:



CHECKSUM TABLE PLAYERS



Example 29.5:



OPTIMIZE TABLE PLAYERS



Example 29.6:



CHECK TABLE PLAYERS



Example 29.7:



SELECT   TABLE_NAME, CHECK_TIME

FROM     INFORMATION_SCHEMA.TABLES

WHERE    TABLE_NAME = 'PLAYERS'

AND      TABLE_SCHEMA = 'TENNIS'



Example 29.8:



REPAIR TABLE PLAYERS



Example 29.9:



BACKUP TABLE PLAYERS TO 'C:/WORKING_AREA'



Example 29.10:



RESTORE TABLE PLAYERS FROM 'C:/WORKING_AREA'



Example 31.1:



CREATE PROCEDURE DELETE_MATCHES

   (IN P_PLAYERNO INTEGER)

BEGIN

   DELETE

   FROM   MATCHES

   WHERE  PLAYERNO = P_PLAYERNO;

END



Example 31.2:



CALL DELETE_MATCHES (8)



Example 31.5:



CREATE PROCEDURE TEST

   (OUT NUMBER1 INTEGER)

BEGIN

   DECLARE NUMBER2 INTEGER DEFAULT 100;

   SET NUMBER1 = NUMBER2;

END

;

CALL TEST (@NUMBER)

;

SELECT @NUMBER



Example 31.6:



CREATE PROCEDURE TEST

   (OUT NUMBER1 INTEGER)

BEGIN

   DECLARE NUMBER2 INTEGER

      DEFAULT (SELECT COUNT(*) FROM PLAYERS);

   SET NUMBER1 = NUMBER2;

END



Example 31.7:



CREATE PROCEDURE DIFFERENCE

   (IN P1 INTEGER,

    IN P2 INTEGER,

    OUT P3 INTEGER)

BEGIN

   IF P1 > P2 THEN

      SET P3 = 1;

   ELSEIF P1 = P2 THEN

      SET P3 = 2;

   ELSE

      SET P3 = 3;

   END IF;

END



Example 31.8:



CREATE PROCEDURE FIBONNACI

   (INOUT NUMBER1 INTEGER,

    INOUT NUMBER2 INTEGER,

    INOUT NUMBER3 INTEGER)

BEGIN

   SET NUMBER3 = NUMBER1 + NUMBER2;

   IF NUMBER3 > 10000 THEN

      SET NUMBER3 = NUMBER3 - 10000;

   END IF;

   SET NUMBER1 = NUMBER2;

   SET NUMBER2 = NUMBER3;

END

;

SET @A=16, @B=27

;

SELECT @C

;

SELECT @C

;

SELECT @C



Example 31.9:



CREATE PROCEDURE LARGEST

   (OUT T CHAR(10))

BEGIN

   IF (SELECT COUNT(*) FROM PLAYERS) >

      (SELECT COUNT(*) FROM PENALTIES) THEN

      SET T = 'PLAYERS';

   ELSEIF (SELECT COUNT(*) FROM PLAYERS) =

          (SELECT COUNT(*) FROM PENALTIES) THEN

      SET T = 'EQUAL';

   ELSE

      SET T = 'PENALTIES';

   END IF;

END



Example 31.10:



CREATE PROCEDURE AGE

   (IN  START_DATE  DATE,

    IN  END_DATE    DATE,

    OUT YEARS       INTEGER,

    OUT MONTHS      INTEGER,

    OUT DAYS        INTEGER)

BEGIN

   DECLARE NEXT_DATE, PREVIOUS_DATE DATE;

   SET YEARS = 0;

   SET PREVIOUS_DATE = START_DATE;

   SET NEXT_DATE = START_DATE + INTERVAL 1 YEAR;

   WHILE NEXT_DATE < END_DATE DO

      SET YEARS = YEARS + 1;

      SET PREVIOUS_DATE = NEXT_DATE;

      SET NEXT_DATE = NEXT_DATE + INTERVAL 1 YEAR;

   END WHILE;

   SET MONTHS = 0;

   SET NEXT_DATE = PREVIOUS_DATE + INTERVAL 1 MONTH;

   WHILE NEXT_DATE < END_DATE DO

      SET MONTHS = MONTHS + 1;

      SET PREVIOUS_DATE = NEXT_DATE;

      SET NEXT_DATE = NEXT_DATE + INTERVAL 1 MONTH;

   END WHILE;

   SET DAYS = 0;

   SET NEXT_DATE = PREVIOUS_DATE + INTERVAL 1 DAY;

   WHILE NEXT_DATE <= END_DATE DO

      SET DAYS = DAYS + 1;

      SET PREVIOUS_DATE = NEXT_DATE;

      SET NEXT_DATE = NEXT_DATE + INTERVAL 1 DAY;

   END WHILE;

END

;

SET @START = '1991-01-12'

;

SET @END = '1999-07-09'

;

CALL AGE (@START, @END, @YEAR, @MONTH, @DAY)

;

SELECT @START, @END, @YEAR, @MONTH, @DAY



Example 31.11:



CREATE PROCEDURE SMALL_EXIT

   (OUT P1 INTEGER, OUT P2 INTEGER)

BEGIN

   SET P1 = 1;

   SET P2 = 1;

   BLOCK1 : BEGIN

      LEAVE BLOCK1;

      SET P2 = 3;

   END;

   SET P1 = 4;

END



Example 31.12:



CREATE PROCEDURE WAIT

   (IN WAIT_SECONDS INTEGER)

BEGIN

   DECLARE END_TIME INTEGER

      DEFAULT NOW() + INTERVAL WAIT_SECONDS SECOND;

   WAIT_LOOP: LOOP

      IF NOW() > END_TIME THEN

         LEAVE WAIT_LOOP;

      END IF;

   END LOOP WAIT_LOOP;

END



Example 31.13:



CREATE PROCEDURE AGAIN

   (OUT RESULT INTEGER)

BEGIN

   DECLARE COUNTER INTEGER DEFAULT 1;

   SET RESULT = 0;

   LOOP1: WHILE COUNTER <= 1000 DO

      SET COUNTER = COUNTER + 1;

      IF COUNTER > 100 THEN

         LEAVE LOOP1;

      ELSE

         ITERATE LOOP1;

      END IF;

      SET RESULT = COUNTER * 10;

   END WHILE LOOP1;

END



Example 31.14:



CALL WAIT ((SELECT COUNT(*) FROM PENALTIES))





Example 31.15:



CREATE TABLE PLAYERS_WITH_PARENTS

      (PLAYERNO         INTEGER NOT NULL PRIMARY KEY,

       FATHER_PLAYERNO  INTEGER,

       MOTHER_PLAYERNO  INTEGER)

;

ALTER TABLE PLAYERS_WITH_PARENTS ADD

   FOREIGN KEY (FATHER_PLAYERNO)

      REFERENCES PLAYERS_WITH_PARENTS (PLAYERNO)

;

ALTER TABLE PLAYERS_WITH_PARENTS ADD

   FOREIGN KEY (MOTHER_PLAYERNO)

      REFERENCES PLAYERS_WITH_PARENTS (PLAYERNO)

;

INSERT INTO PLAYERS_WITH_PARENTS VALUES

   (9,NULL,NULL), (8,NULL,NULL), (7,NULL,NULL), (6,NULL,NULL),

   (5,NULL,NULL), (4,8,9), (3,6,7), (2,4,5), (1,2,3)

;

CREATE PROCEDURE TOTAL_NUMBER_OF_PARENTS

   (IN P_PLAYERNO INTEGER,

    INOUT NUMBER INTEGER)

BEGIN

   DECLARE V_FATHER, V_MOTHER INTEGER;

   SET V_FATHER =

      (SELECT   FATHER_PLAYERNO

       FROM     PLAYERS_WITH_PARENTS

       WHERE    PLAYERNO = P_PLAYERNO);

   SET V_MOTHER =

      (SELECT   MOTHER_PLAYERNO

       FROM     PLAYERS_WITH_PARENTS

       WHERE    PLAYERNO = P_PLAYERNO);

   IF V_FATHER IS NOT NULL THEN

      CALL TOTAL_NUMBER_OF_PARENTS (V_FATHER, NUMBER);

      SET NUMBER = NUMBER + 1;

   END IF;

   IF V_MOTHER IS NOT NULL THEN

      CALL TOTAL_NUMBER_OF_PARENTS (V_MOTHER, NUMBER);

      SET NUMBER = NUMBER + 1;

   END IF;

END

;

SET @NUMBER = 0

;

CALL TOTAL_NUMBER_OF_PARENTS (1, @NUMBER)

;

SELECT @NUMBER



Example 31.16:



CREATE PROCEDURE TOTAL_PENALTIES_PLAYER

   (IN P_PLAYERNO INTEGER,

    OUT TOTAL_PENALTIES DECIMAL(8,2))

BEGIN

   SELECT SUM(AMOUNT)

   INTO   TOTAL_PENALTIES

   FROM   PENALTIES

   WHERE  PLAYERNO = P_PLAYERNO;

END

;

CALL TOTAL_PENALTIES_PLAYER (27, @TOTAL)

;

SELECT @TOTAL

;

SELECT   FATHER_PLAYERNO, MOTHER_PLAYERNO

INTO     V_FATHER, V_MOTHER

FROM     PLAYERS_WITH_PARENTS

WHERE    PLAYERNO = P_PLAYERNO



Example 31.17:



CREATE PROCEDURE GIVE_ADDRESS

   (IN  P_PLAYERNO SMALLINT,

    OUT P_STREET   VARCHAR(30),

    OUT P_HOUSENO  CHAR(4),

    OUT P_TOWN     VARCHAR(30),

    OUT P_POSTCODE CHAR(6))

BEGIN

   SELECT TOWN, STREET, HOUSENO, POSTCODE

   INTO   P_TOWN, P_STREET, P_HOUSENO, P_POSTCODE

   FROM   PLAYERS

   WHERE  PLAYERNO = P_PLAYERNO;

END



Example 31.18:



CREATE TABLE FIBON

      (NUMBER1   INTEGER NOT NULL PRIMARY KEY,

       NUMBER2   INTEGER NOT NULL)

;

CREATE PROCEDURE FIBONNACI_START()

BEGIN

   DELETE FROM FIBON;

   INSERT INTO FIBON (NUMBER, NUMBER2) VALUES (16, 27);

END

;

CREATE PROCEDURE FIBONNACI_GIVE

   (INOUT NUMBER INTEGER)

BEGIN

   DECLARE N1, N2 INTEGER;

   SELECT NUMBER1, NUMBER2

   INTO   N1, N2

   FROM   FIBON;

   SET NUMBER = N1 + N2;

   IF NUMBER > 10000 THEN

      SET NUMBER = NUMBER - 10000;

   END IF;

   SET N1 = N2;

   SET N2 = NUMBER;

   UPDATE FIBON

   SET    NUMBER1 = N1,

          NUMBER2 = N2;

END

;

CALL FIBONNACI_START()

;

CALL FIBONNACI_GIVE(@C)

;

SELECT @C

;

CALL FIBONNACI_GIVE(@C)

;

SELECT @C

;

CALL FIBONNACI_GIVE(@C)

;

SELECT @C



Example 31.19:



CREATE PROCEDURE DELETE_PLAYER

   (IN P_PLAYERNO INTEGER)

BEGIN

   DECLARE NUMBER_OF_ PENALTIES INTEGER;

   DECLARE NUMBER_OF_TEAMS  INTEGER;

   SELECT COUNT(*)

   INTO   NUMBER_OF_PENALTIES

   FROM   PENALTIES

   WHERE  PLAYERNO = P_PLAYERNO;

   SELECT COUNT(*)

   INTO   NUMBER_OF_TEAMS

   FROM   TEAMS

   WHERE  PLAYERNO = P_PLAYERNO_;

   IF NUMBER_OF_PENALTIES = 0 AND NUMBER_OF_TEAMS = 0 THEN

      CALL DELETE_MATCHES (P_PLAYERNO);

      DELETE FROM PLAYERS

      WHERE  PLAYERNO = P_PLAYERNO;

   END IF;

END



Example 31.20:



CREATE PROCEDURE DUPLICATE

   (OUT P_PROCESSED SMALLINT)

BEGIN

   SET P_PROCESSED = 1;

   INSERT INTO TEAMS VALUES (2,27,'third');

   SET P_PROCESSED = 2;

END

;

CALL DUPLICATE(PROCESSED)



Example 31.21:



CREATE PROCEDURE SMALL_MISTAKE1

   (OUT ERROR CHAR(5))

BEGIN

   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'

      SET ERROR = '23000';

   SET ERROR = '00000';

   INSERT INTO TEAMS VALUES (2,27,'third');

END



Example 31.22:



CREATE PROCEDURE SMALL_MISTAKE2

   (OUT ERROR CHAR(5))

BEGIN

   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'

      SET ERROR = '23000';

   DECLARE CONTINUE HANDLER FOR SQLSTATE '21S01'

      SET ERROR = '21S01';

   SET ERROR = '00000';

   INSERT INTO TEAMS VALUES (2,27,'third',5);

END



Example 31.23:



CREATE PROCEDURE SMALL_MISTAKE3

   (OUT ERROR CHAR(5))

BEGIN

   DECLARE CONTINUE HANDLER FOR SQLWARNING, NOT FOUND,

      SQLEXCEPTION SET ERROR = 'XXXXX';

   SET ERROR = '00000';

   INSERT INTO TEAMS VALUES (2,27,'third');

END



Example 31.24:



CREATE PROCEDURE SMALL_MISTAKE4

   (OUT ERROR CHAR(5))

BEGIN

   DECLARE NON_UNIQUE CONDITION FOR SQLSTATE '23000';

   DECLARE CONTINUE HANDLER FOR NON_UNIQUE

      SET ERROR = '23000';

   SET ERROR = '00000';

   INSERT INTO TEAMS VALUES (2,27,'third');

END



Example 31.25:



CREATE PROCEDURE SMALL_MISTAKE5

   (OUT ERROR CHAR(5))

BEGIN

   DECLARE NON_UNIQUE CONDITION FOR SQLSTATE '23000';

   DECLARE CONTINUE HANDLER FOR NON_UNIQUE

      SET ERROR = '23000';

   BEGIN

      DECLARE CONTINUE HANDLER FOR NON_UNIQUE

         SET ERROR = '23000';

   END;

   BEGIN

      DECLARE CONTINUE HANDLER FOR NON_UNIQUE

         SET ERROR = '00000';

      INSERT INTO TEAMS VALUES (2,27,'third');

   END;

END

;

CREATE PROCEDURE SMALL_MISTAKE6 ()

BEGIN

   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'

      SET @PROCESSED = 100;

   BEGIN

      DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'

         SET @PROCESSED = 200;

      INSERT INTO TEAMS VALUES (2,27,'third');

   END;

END



Example 31.26:



CREATE PROCEDURE NUMBER_OF_PLAYERS

   (OUT NUMBER INTEGER)

BEGIN

   DECLARE A_PLAYERNO INTEGER;

   DECLARE FOUND BOOLEAN DEFAULT TRUE;

   DECLARE C_PLAYERS CURSOR FOR

      SELECT PLAYERNO FROM PLAYERS;

   DECLARE CONTINUE HANDLER FOR NOT FOUND

      SET FOUND = FALSE;

   SET NUMBER = 0;

   OPEN C_PLAYERS;

   FETCH C_PLAYERS INTO A_PLAYERNO;

   WHILE FOUND DO

      SET NUMBER = NUMBER + 1;

      FETCH C_PLAYERS INTO A_PLAYERNO;

   END WHILE;

   CLOSE C_PLAYERS;

END



Example 31.27:



CREATE PROCEDURE DELETE_OLDER_THAN_30()

BEGIN

   DECLARE V_AGE, V_PLAYERNO,V_YEARS,

      V_MONTHS, V_DAYS INTEGER;

   DECLARE V_BIRTH_DATE DATE;

   DECLARE FOUND BOOLEAN DEFAULT TRUE;

   DECLARE C_PLAYERS CURSOR FOR

      SELECT PLAYERNO, BIRTH_DATE

      FROM   PLAYERS;

   DECLARE CONTINUE HANDLER FOR NOT FOUND

      SET FOUND = FALSE;

   OPEN C_PLAYERS;

   FETCH C_PLAYERS INTO V_PLAYERNO, V_BIRTH_DATE;

   WHILE FOUND DO

      CALL AGE (V_BIRTH_DATE, NOW(), V_YEARS,

         V_MONTHS, V_DAYS);

      IF V_YEARS > 30 THEN

         DELETE FROM PENALTIES WHERE PLAYERNO = V_PLAYERNO;

      END IF;

      FETCH C_PLAYERS INTO V_PLAYERNO, V_BIRTH_DATE;

   END WHILE;

   CLOSE C_PLAYERS;

END



Example 31.28:



CREATE PROCEDURE TOP_THREE

   (IN P_PLAYERNO INTEGER,

    OUT OK BOOLEAN)

BEGIN

   DECLARE A_PLAYERNO, BALANCE, SEQNO INTEGER;

   DECLARE FOUND BOOLEAN;

   DECLARE BALANCE_PLAYERS CURSOR FOR

      SELECT   PLAYERNO, SUM(WON) - SUM(LOST)

      FROM     MATCHES

      GROUP BY PLAYERNO

      ORDER BY 2;

   DECLARE CONTINUE HANDLER FOR NOT FOUND

      SET FOUND = FALSE;

   SET SEQNO = 0;

   SET FOUND = TRUE;

   SET OK = FALSE;

   OPEN BALANCE_PLAYERS;

   FETCH BALANCE_PLAYERS INTO A_PLAYERNO, BALANCE;

   WHILE FOUND AND SEQNO < 3 AND OK = FALSE DO

      SET SEQNO = SEQNO + 1;

      IF A_PLAYERNO = P_PLAYERNO THEN

         SET OK = TRUE;

      END IF;

      FETCH BALANCE_PLAYERS INTO A_PLAYERNO, BALANCE;

   END WHILE;

   CLOSE BALANCE_PLAYERS;

END



Example 31.29:



CREATE PROCEDURE NUMBER_PENALTIES

   (IN  V_PLAYERNO INTEGER,

    OUT NUMBER INTEGER)

BEGIN

   DECLARE A_PLAYERNO INTEGER;

   DECLARE FOUND BOOLEAN DEFAULT TRUE;

   DECLARE C_PLAYERS CURSOR FOR

      SELECT PLAYERNO

      FROM   PENALTIES

      WHERE  PLAYERNO = V_PLAYERNO;

   DECLARE CONTINUE HANDLER FOR NOT FOUND

      SET FOUND = FALSE;

   SET NUMBER = 0;

   OPEN C_PLAYERS;

   FETCH C_PLAYERS INTO A_PLAYERNO;

   WHILE FOUND DO

      SET NUMBER = NUMBER + 1;

      FETCH C_PLAYERS INTO A_PLAYERNO;

   END WHILE;

   CLOSE C_PLAYERS;

END



Example 31.30:



CREATE PROCEDURE ALL_TEAMS()

BEGIN

   SELECT * FROM TEAMS;

END

;

CALL ALL_TEAMS()





Example 31.31:



CREATE PROCEDURE NUMBERS_OF_ROWS()

BEGIN

   SELECT COUNT(*) FROM TEAMS;

   SELECT COUNT(*) FROM PENALTIES;

END

;

CALL NUMBER_OF_ROWS()



Example 31.32:



CREATE PROCEDURE USER_VARIABLE ()

BEGIN

   SET @VAR1 = 1;

END

;

CALL USER_VARIABLE ()

;

SELECT @VAR1



Example 31.33:



CREATE DEFINER = 'CHRIS3'@'%' PROCEDURE PIPOWER

   (OUT VAR1 DECIMAL(10,5))

BEGIN

   SET VAR1 = POWER(PI(),2);

END



Example 31.34:



CREATE PROCEDURE POWERPOWER

   (IN P1 INTEGER, OUT P2 INTEGER)

   DETERMINISTIC

BEGIN

   SET P2 = POWER(POWER(P1,2),2);

END



Example 31.35:



CREATE PROCEDURE CLEANUP ()

    NO SQL

BEGIN

   DELETE FROM PENALTIES;

END



Example 31.36:



SELECT   COLUMN_NAME

FROM     INFORMATION_SCHEMA.COLUMNS

WHERE    TABLE_SCHEMA = 'INFORMATION_SCHEMA'

AND      TABLE_NAME = 'ROUTINES'

ORDER BY ORDINAL_POSITION



Example 31.37:



SHOW PROCEDURE STATUS LIKE 'FIBONNACI'



Example 31.38:



SHOW CREATE PROCEDURE FIBONNACI



Example 31.39:



DROP PROCEDURE DELETE_PLAYER



Example 31.40:



GRANT EXECUTE

ON    PROCEDURE DELETE_MATCHES

TO    JOHN



Example 32.1:



CREATE FUNCTION DOLLARS(AMOUNT DECIMAL(7,2))

   RETURNS DECIMAL(7,2)

BEGIN

   RETURN AMOUNT * (1 / 0.8);

END

;

SELECT   PAYMENTNO, AMOUNT, DOLLARS(AMOUNT)

FROM     PENALTIES

WHERE    PAYMENTNO <= 3



Example 32.2:



CREATE FUNCTION NUMBER_OF_PLAYERS()

   RETURNS INTEGER

BEGIN

   RETURN (SELECT COUNT(*) FROM PLAYERS);

END

;

SELECT NUMBER_OF_PLAYERS()



Example 32.3:



CREATE FUNCTION NUMBER_OF_PENALTIES

   (P_PLAYERNO INTEGER)

   RETURNS INTEGER

BEGIN

   RETURN (SELECT   COUNT(*) 

           FROM     PENALTIES

           WHERE    PLAYERNO = P_PLAYERNO);

END

;

CREATE FUNCTION NUMBER_OF_MATCHES

   (P_PLAYERNO INTEGER)

   RETURNS INTEGER

BEGIN

   RETURN (SELECT   COUNT(*) 

           FROM     MATCHES

           WHERE    PLAYERNO = P_PLAYERNO);

END

;

SELECT   PLAYERNO, NAME, INITIALS

FROM     PLAYERS

WHERE    NUMBER_OF_PENALTIES(PLAYERNO) >

         NUMBER_OF_MATCHES(PLAYERNO)



Example 32.4:



SELECT   TEAMNO, DIVISION

FROM     TEAMS_NEW

WHERE    DIVISION & POWER(2,3-1) = POWER(2,3-1)

;

CREATE FUNCTION POSITION_IN_SET

   (P_COLUMN BIGINT, POSITION SMALLINT)

   RETURNS BOOLEAN

BEGIN

   RETURN (P_COLUMN & POWER(2, POSITION-1) = 

          POWER(2,POSITION-1));

END

;

SELECT   TEAMNO, DIVISION

FROM     TEAMS_NEW

WHERE    POSITION_IN_SET(DIVISION, 3)



Example 32.5:



CREATE FUNCTION NUMBER_OF_DAYS

   (START_DATE DATE,

    END_DATE DATE)

    RETURNS INTEGER

BEGIN

   DECLARE DAYS INTEGER;

   DECLARE NEXT_DATE, PREVIOUS_DATE DATE;

   SET DAYS = 0;

   SET NEXT_DATE = START_DATE + INTERVAL 1 DAY;

   WHILE NEXT_DATE <= END_DATE DO

      SET DAYS = DAYS + 1;

      SET PREVIOUS_DATE = NEXT_DATE;

      SET NEXT_DATE = NEXT_DATE + INTERVAL 1 DAY;

   END WHILE;

   RETURN DAYS;

END



Example 32.6:



CREATE FUNCTION DELETE_PLAYER

   (P_PLAYERNO INTEGER)

   RETURNS BOOLEAN

BEGIN

   DECLARE NUMBER_OF_PENALTIES INTEGER;

   DECLARE NUMBER_OF_TEAMS  INTEGER;

   DECLARE EXIT HANDLER FOR SQLWARNING RETURN FALSE;

   DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN FALSE;

   SELECT COUNT(*)

   INTO   NUMBER_OF_PENALTIES

   FROM   PENALTIES

   WHERE  PLAYERNO = P_PLAYERNO;

   SELECT COUNT(*)

   INTO   NUMBER_OF_TEAMS

   FROM   TEAMS

   WHERE  PLAYERNO = P_PLAYERNO;

   IF NUMBER_OF_PENALTIES = 0 AND NUMBER_OF_TEAMS = 0 THEN

      DELETE FROM MATCHES

      WHERE  PLAYERNO = P_PLAYERNO;

      DELETE FROM PLAYERS

      WHERE  PLAYERNO = P_PLAYERNO;

   END IF;

   RETURN TRUE;

END



Example 32.7:



CREATE FUNCTION GET_NUMBER_OF_PLAYERS()

   RETURNS INTEGER

BEGIN

   DECLARE NUMBER INTEGER;

   CALL NUMBER_OF_PLAYERS(NUMBER);

   RETURN NUMBER;

END



Example 32.8:



CREATE FUNCTION OVERLAP_BETWEEN_PERIODS

   (PERIOD1_START DATETIME,

    PERIOD1_END DATETIME,

    PERIOD2_START DATETIME,

    PERIOD2_END DATETIME)

    RETURNS BOOLEAN

BEGIN

   DECLARE TEMPORARY_DATE DATETIME;

   IF PERIOD1_START > PERIOD1_END THEN

      SET TEMPORARY_DATE = PERIOD1_START;

      SET PERIOD1_START = PERIOD1_END;

      SET PERIOD1_END = TEMPORARY_DATE;

   END IF;

   IF PERIOD2_START > PERIOD2_END THEN

      SET TEMPORARY_DATE = PERIOD2_START;

      SET PERIOD2_START = PERIOD2_END;

      SET PERIOD2_END = TEMPORARY_DATE;

   END IF;

   RETURN NOT(PERIOD1_END < PERIOD2_START OR

              PERIOD2_END < PERIOD1_START);

END



Example 32.9:



SELECT   *

FROM     COMMITTEE_MEMBERS

WHERE    OVERLAP_BETWEEN_PERIODS(BEGIN_DATE,END_DATE,

         '1991-06-30','1992-06-30')

ORDER BY 1, 2



Example 32.10:



DROP FUNCTION PLACE_IN_SET



Example 33.1:



CREATE TABLE CHANGES

      (USER               CHAR(30) NOT NULL,

       CHA_TIME           TIMESTAMP NOT NULL,

       CHA_PLAYERNO       SMALLINT NOT NULL,

       CHA_TYPE           CHAR(1) NOT NULL,

       CHA_PLAYERNO_NEW   INTEGER,

       PRIMARY KEY        (USER, CHA_TIME,

                          CHA_PLAYERNO, CHA_TYPE))



Example 33.2:



CREATE TRIGGER INSERT_PLAYERS

   AFTER

   INSERT ON PLAYERS FOR EACH ROW

   BEGIN

      INSERT INTO CHANGES

         (USER, CHA_TIME, CHA_PLAYERNO,

          CHA_TYPE, CHA_PLAYERNO_NEW)

      VALUES (USER, CURDATE(), NEW.PLAYERNO, 'I', NULL);

   END

;

CREATE PROCEDURE INSERT_CHANGE

   (IN CPNO       INTEGER,

    IN CTYPE      CHAR(1),

    IN CPNO_NEW   INTEGER)

BEGIN

   INSERT INTO CHANGES (USER, CHA_TIME, CHA_PLAYERNO,

                        CHA_TYPE, CHA_PLAYERNO_NEW)

   VALUES (USER, CURDATE(), CPNO, CTYPE, CPNO_NEW);

END

;

CREATE TRIGGER INSERT_PLAYER

   AFTER INSERT ON PLAYERS FOR EACH ROW

   BEGIN

      CALL INSERT_CHANGE(NEW.PLAYERNO, 'I', NULL);

   END



Example 33.3:



CREATE TRIGGER DELETE_PLAYER

   AFTER DELETE ON PLAYERS FOR EACH ROW

   BEGIN

      CALL INSERT_CHANGE (OLD.PLAYERNO, 'D', NULL);

   END



Example 33.4:



CREATE TRIGGER UPDATE_PLAYER

   AFTER UPDATE ON PLAYERS FOR EACH ROW

   BEGIN

      CALL INSERT_CHANGES

         (NEW.PLAYERNO, 'U', OLD.PLAYERNO);

   END



Example 33.5:



CREATE TABLE PLAYERS_MAT

     (PLAYERNO INTEGER NOT NULL PRIMARY KEY,

      NUMBER_OF_MATCHES INTEGER NOT NULL)

;

INSERT INTO PLAYERS_MAT (PLAYERNO, NUMBER_OF_MATCHES)

SELECT   PLAYERNO, 

        (SELECT   COUNT(*)

         FROM     MATCHES AS M

         WHERE    P.PLAYERNO = M.PLAYERNO)

FROM     PLAYERS AS P



Example 33.6:



CREATE TRIGGER INSERT_PLAYERS

   AFTER INSERT ON PLAYERS FOR EACH ROW

   BEGIN

      INSERT INTO PLAYERS_MAT

      VALUES(NEW.PLAYERNO, 0);

   END



Example 33.7:



CREATE TRIGGER DELETE_PLAYERS

   AFTER DELETE ON PLAYERS FOR EACH ROW

   BEGIN

      DELETE FROM PLAYERS_MAT

      WHERE PLAYERNO = OLD.PLAYERNO;

   END



Example 33.8:



CREATE TRIGGER INSERT_MATCHES

   AFTER INSERT ON MATCHES FOR EACH ROW

   BEGIN

      UPDATE PLAYERS_MAT

      SET    NUMBER_OF_MATCHES = NUMBER_OF_MATCHES + 1

      WHERE  PLAYERNO = NEW.PLAYERNO;

   END



Example 33.9:



CREATE TRIGGER DELETE_MATCHES

   AFTER DELETE ON MATCHES FOR EACH ROW

   BEGIN

      UPDATE PLAYERS_MAT

      SET    NUMBER_OF_MATCHES = NUMBER_OF_MATCHES - 1

      WHERE  PLAYERNO = OLD.PLAYERNO;

   END



Example 33.10:



CREATE TRIGGER SUM_PENALTIES_INSERT

   AFTER INSERT ON PENALTIES FOR EACH ROW

   BEGIN

      DECLARE TOTAL DECIMAL(8,2);

      SELECT   SUM(AMOUNT)

      INTO     TOTAL

      FROM     PENALTIES

      WHERE    PLAYERNO = NEW.PLAYERNO;

      UPDATE   PLAYERS

      SET      SUM_PENALTIES = TOTAL

      WHERE    PLAYERNO = NEW.PLAYERNO

   END

;

CREATE TRIGGER SUM_PENALTIES_DELETE

   AFTER DELETE, UPDATE ON PENALTIES FOR EACH ROW

   BEGIN

      DECLARE TOTAL DECIMAL(8,2);

      SELECT   SUM(AMOUNT)

      INTO     TOTAL

      FROM     PENALTIES

      WHERE    PLAYERNO = OLD.PLAYERNO;

      UPDATE   PLAYERS

      SET      SUM_PENALTIES = TOTAL

      WHERE    PLAYERNO = OLD.PLAYERNO

   END

;

UPDATE   PLAYERS

SET      SUM_PENALTIES = (SELECT   SUM(AMOUNT)

                          FROM     PENALTIES

                          WHERE    PLAYERNO = NEW.PLAYERNO)

WHERE    PLAYERNO = NEW.PLAYERNO



Example 33.11:



CREATE TRIGGER BORN_VS_JOINED

   BEFORE INSERT, UPDATE ON PLAYERS FOR EACH ROW

   BEGIN

      IF YEAR(NEW.BIRTH_DATE) >= NEW.JOINED) THEN

         ROLLBACK WORK;

      END IF;

   END



Example 33.12:



CREATE TRIGGER FOREIGN_KEY1

   BEFORE INSERT, UPDATE ON PENALTIES FOR EACH ROW

   BEGIN

      IF (SELECT COUNT(*) FROM PLAYERS

          WHERE PLAYERNO = NEW.PLAYERNO) = 0 THEN

         ROLLBACK WORK;

      END IF;

   END

;

CREATE TRIGGER FOREIGN_KEY2

   BEFORE DELETE, UPDATE ON PLAYERS FOR EACH ROW

   BEGIN

      DELETE

      FROM     PENALTIES

      WHERE    PLAYERNO = OLD.PLAYERNO;

   END



Example 33.13:



DROP TRIGGER BORN_VS_JOINED



Answer 33.2:



CREATE TRIGGER MAX1

   AFTER INSERT, UPDATE(POSITION) OF COMMITTEE_MEMBERS

      FOR EACH ROW

   BEGIN

      SELECT   COUNT(*)

      INTO     NUMBER_MEMBERS

      FROM     COMMITTEE_MEMBERS

      WHERE    PLAYERNO IN

              (SELECT   PLAYERNO

               FROM     COMMITTEE_MEMBERS

               WHERE    CURRENT DATE BETWEEN

                        BEGIN_DATE AND END_DATE

               GROUP BY POSITION

               HAVING   COUNT(*) > 1)

      IF NUMBER_MEMBERS > 0 THEN

         ROLLBACK WORK;

      ENDIF;

   END



Answer 33.3:



CREATE TRIGGER SUM_PENALTIES_250

   AFTER INSERT, UPDATE(AMOUNT) OF PENALTIES

      FOR EACH ROW

   BEGIN

      SELECT   COUNT(*)

      INTO     NUMBER_PENALTIES

      FROM     PENALTIES

      WHERE    PLAYERNO IN

              (SELECT   PLAYERNO

               FROM     PENALTIES

               GROUP BY PLAYERNO

               HAVING   SUM(AMOUNT) > 250);

      IF NUMBER_PENALTIES > 0 THEN

         ROLLBACK WORK;

      ENDIF;

   END



Answer 33.4:



CREATE TRIGGER NUMBER_MATCHES_INSERT

   AFTER INSERT OF MATCHES FOR EACH ROW

   BEGIN

      UPDATE   TEAMS

      SET      NUMBER_MATCHES =

              (SELECT   COUNT(*)

               FROM     MATCHES

               WHERE    PLAYERNO = NEW.PLAYERNO)

      WHERE    PLAYERNO = NEW.PLAYERNO

END

;

CREATE TRIGGER NUMBER_MATCHES_DELETE

   AFTER DELETE, UPDATE OF MATCHES FOR EACH ROW

   BEGIN

      UPDATE   TEAMS

      SET      NUMBER_MATCHES =

              (SELECT   COUNT(*)

               FROM     MATCHES

               WHERE    PLAYERNO = OLD.PLAYERNO)

      WHERE    PLAYERNO = OLD.PLAYERNO

END



Example 34.1:



SET GLOBAL EVENT_SCHEDULER = TRUE

;

SET GLOBAL EVENT_SCHEDULER = FALSE

;

CREATE TABLE EVENTS_INVOKED

      (EVENT_NAME      VARCHAR(20) NOT NULL,

       EVENT_STARTED   TIMESTAMP NOT NULL)



Example 34.2:



CREATE EVENT DIRECT

   ON SCHEDULE AT NOW()

   DO INSERT INTO EVENTS_INVOKED VALUES ('DIRECT', NOW())

;

SELECT   *

FROM     EVENTS_INVOKED

WHERE    EVENT_NAME = 'DIRECT'

;

CREATE EVENT TENNIS.DIRECT

   ON SCHEDULE AT NOW()

   DO INSERT INTO EVENTS_INVOKED VALUES ('DIRECT', NOW())



Example 34.3:



CREATE EVENT END2010

   ON SCHEDULE AT '2010-12-31 11:00:00'

   DO INSERT INTO EVENTS_INVOKED VALUES ('END2010', NOW())



Example 34.4:



CREATE EVENT THREEDAYS

   ON SCHEDULE AT NOW() + INTERVAL 3 DAY

   DO INSERT INTO EVENTS_INVOKED VALUES ('THREEDAYS', NOW())



Example 34.5:



CREATE EVENT NEXT_SUNDAY

   ON SCHEDULE AT

      CASE DAYNAME(NOW())

         WHEN 'Sunday'    THEN NOW() + INTERVAL 7 DAY

         WHEN 'Monday'    THEN NOW() + INTERVAL 6 DAY

         WHEN 'Tuesday'   THEN NOW() + INTERVAL 5 DAY

         WHEN 'Wednesday' THEN NOW() + INTERVAL 4 DAY

         WHEN 'Thursday'  THEN NOW() + INTERVAL 3 DAY

         WHEN 'Friday'    THEN NOW() + INTERVAL 2 DAY

         WHEN 'Saturday'  THEN NOW() + INTERVAL 1 DAY

      END

   DO INSERT INTO EVENTS_INVOKED

         VALUES ('NEXT_SUNDAY',NOW())

;

CREATE EVENT NEXT_SUNDAY

   ON SCHEDULE AT

      NOW() + INTERVAL (8 - DAYOFWEEK(NOW())) DAY

   DO INSERT INTO EVENTS_INVOKED

         VALUES ('NEXT_SUNDAY',NOW())



Example 34.6:



CREATE EVENT MORNING11

   ON SCHEDULE AT TIMESTAMP(CURDATE() + 

                            INTERVAL 1 DAY, '11:00:00')

   DO INSERT INTO EVENTS_INVOKED VALUES ('MORNING11', NOW())



Example 34.7:



CREATE EVENT EVERY2HOUR

   ON SCHEDULE EVERY 2 HOUR 

      STARTS NOW() + INTERVAL 3 HOUR

      ENDS   CURDATE() + INTERVAL 23 HOUR

   DO INSERT INTO EVENTS_INVOKED VALUES ('EVERY2HOUR', NOW())



Example 34.8:



CREATE EVENT SIXTIMES

   ON SCHEDULE EVERY 1 MINUTE

      STARTS TIMESTAMP(CURDATE() + INTERVAL 1 DAY,'12:00:00')

      ENDS   TIMESTAMP(CURDATE() + INTERVAL 1 DAY,'12:00:00')

             + INTERVAL 5 MINUTE

   DO INSERT INTO EVENTS_INVOKED

      VALUES ('SIXTIMES', NOW())



Example 34.9:



CREATE EVENT FIVESUNDAYS

   ON SCHEDULE EVERY 1 WEEK

      STARTS CASE DAYNAME(NOW())

         WHEN 'Sunday'    THEN NOW()

         WHEN 'Monday'    THEN NOW() + INTERVAL 6 DAY

         WHEN 'Tuesday'   THEN NOW() + INTERVAL 5 DAY

         WHEN 'Wednesday' THEN NOW() + INTERVAL 4 DAY

         WHEN 'Thursday'  THEN NOW() + INTERVAL 3 DAY

         WHEN 'Friday'    THEN NOW() + INTERVAL 2 DAY

         WHEN 'Saturday'  THEN NOW() + INTERVAL 1 DAY

      END

      ENDS CASE DAYNAME(NOW())

         WHEN 'Sunday'    THEN NOW()

         WHEN 'Monday'    THEN NOW() + INTERVAL 6 DAY

         WHEN 'Tuesday'   THEN NOW() + INTERVAL 5 DAY

         WHEN 'Wednesday' THEN NOW() + INTERVAL 4 DAY

         WHEN 'Thursday'  THEN NOW() + INTERVAL 3 DAY

         WHEN 'Friday'    THEN NOW() + INTERVAL 2 DAY

         WHEN 'Saturday'  THEN NOW() + INTERVAL 1 DAY

      END + INTERVAL 4 WEEK

   DO INSERT INTO EVENTS_INVOKED 

      VALUES ('FIVESUNDAYS',NOW())



Example 34.10:



CREATE EVENT SUNDAYS

   ON SCHEDULE EVERY 1 WEEK

      STARTS TIMESTAMP(CASE DAYNAME(NOW())

         WHEN 'Sunday'    THEN NOW()

         WHEN 'Monday'    THEN NOW() + INTERVAL 6 DAY

         WHEN 'Tuesday'   THEN NOW() + INTERVAL 5 DAY

         WHEN 'Wednesday' THEN NOW() + INTERVAL 4 DAY

         WHEN 'Thursday'  THEN NOW() + INTERVAL 3 DAY

         WHEN 'Friday'    THEN NOW() + INTERVAL 2 DAY

         WHEN 'Saturday'  THEN NOW() + INTERVAL 1 DAY

      END, '15:00:00')

      ENDS TIMESTAMP(

         CASE DAYNAME(CONCAT(YEAR(CURDATE()),'-12-31'))

         WHEN 'Sunday'    THEN

            CONCAT(YEAR(CURDATE()),'-12-31')

         WHEN 'Monday'    THEN

            CONCAT(YEAR(CURDATE()),'-12-31') - INTERVAL 1 DAY

         WHEN 'Tuesday'   THEN

            CONCAT(YEAR(CURDATE()),'-12-31') - INTERVAL 2 DAY

         WHEN 'Wednesday' THEN

            CONCAT(YEAR(CURDATE()),'-12-31') - INTERVAL 3 DAY

         WHEN 'Thursday'  THEN

            CONCAT(YEAR(CURDATE()),'-12-31') - INTERVAL 4 DAY

         WHEN 'Friday'    THEN

            CONCAT(YEAR(CURDATE()),'-12-31') - INTERVAL 5 DAY

         WHEN 'Saturday'  THEN

            CONCAT(YEAR(CURDATE()),'-12-31') - INTERVAL 6 DAY

       END, '15:00:00')

   DO INSERT INTO EVENTS_INVOKED VALUES ('SUNDAYS', NOW())



Example 34.11:



CREATE EVENT STARTMONTH

   ON SCHEDULE EVERY 1 MONTH

      STARTS CURDATE() + INTERVAL 1 MONTH -

             INTERVAL (DAYOFMONTH(CURDATE()) - 1) DAY

      ENDS   TIMESTAMP(CONCAT(YEAR(CURDATE()),'-12-31'))

   DO INSERT INTO EVENTS_INVOKED 

      VALUES ('STARTMONTH', NOW())



Example 34.12:



CREATE EVENT QUARTERS

   ON SCHEDULE EVERY 3 MONTH

      STARTS (CURDATE() - INTERVAL (DAYOFMONTH(CURDATE())

      - 1) DAY) - INTERVAL (MOD(MONTH(CURDATE() 

      - INTERVAL (DAYOFMONTH(CURDATE()) - 1) DAY)+2,3)) MONTH

      + INTERVAL 3 MONTH

   DO INSERT INTO EVENTS_INVOKED VALUES ('QUARTERS', NOW())



Example 34.13:



CREATE EVENT END_OF_YEAR

   ON SCHEDULE EVERY 1 YEAR

      STARTS ((NOW() - INTERVAL (DAYOFYEAR(NOW()) - 1) DAY)

                     + INTERVAL 1 YEAR) 

                     - INTERVAL 1 DAY

      ENDS   '2025-12-31'

   DO INSERT INTO EVENTS_INVOKED VALUES ('END_OF_YEAR', NOW())



Example 34.14:



CREATE EVENT NOT2020

   ON SCHEDULE EVERY 1 YEAR

      STARTS ((NOW() - INTERVAL (DAYOFYEAR(NOW()) - 1) DAY)

                     + INTERVAL 1 YEAR) 

                     - INTERVAL 1 DAY

      ENDS   '2025-12-31'

   DO BEGIN

         IF YEAR(CURDATE()) <> 2020 THEN

            INSERT INTO EVENTS_INVOKED

               VALUES ('NOT2020', NOW());

         END IF;

      END



Example 34.15:



CREATE TABLE MATCHES_ANNUALREPORT

      (PLAYERNO    INTEGER NOT NULL,

       YEAR        INTEGER NOT NULL,

       NUMBER      INTEGER NOT NULL,

       PRIMARY KEY (PLAYERNO, YEAR),

       FOREIGN KEY (PLAYERNO) REFERENCES PLAYERS (PLAYERNO))



Example 34.16:



CREATE EVENT YEARBALANCING

   ON SCHEDULE EVERY 1 YEAR

      STARTS ((NOW() - INTERVAL (DAYOFYEAR(NOW()) - 1) DAY)

                     + INTERVAL 1 YEAR) 

                     - INTERVAL 1 DAY

   DO INSERT INTO MATCHES_ANNUALREPORT

      SELECT   PLAYERNO, YEAR, COUNT(*)

      FROM     MATCHES

      WHERE    YEAR(DATE) = YEAR(CURDATE())

      GROUP BY PLAYERNO, YEAR



Example 34.17:



CREATE EVENT DIRECT

   ON SCHEDULE AT NOW()

   ON COMPLETION PRESERVE

   DO INSERT INTO EVENTS_INVOKED VALUES ('DIRECT', NOW())



Example 34.18:



CREATE EVENT DIRECT_WITH_COMMENT

   ON SCHEDULE AT NOW()

   ON COMPLETION PRESERVE

   COMMENT 'This event starts directly'

   DO INSERT INTO EVENTS_INVOKED 

      VALUES ('DIRECT_WITH_COMMENT', NOW())



Example 34.19:



CREATE EVENT DIRECT_INACTIVE

   ON SCHEDULE AT NOW()

   ON COMPLETION PRESERVE

   DISABLE

   COMMENT 'This event is inactive'

   DO INSERT INTO EVENTS_INVOKED

      VALUES ('DIRECT_INACTIVE', NOW())



Example 34.20:



ALTER EVENT STARTMONTH

   ON SCHEDULE EVERY 1 MONTH

      STARTS CURDATE() + INTERVAL 1 MONTH -

             INTERVAL (DAYOFMONTH(CURDATE()) - 1) DAY

      ENDS   TIMESTAMP('2025-12-31')



Example 34.21:



ALTER EVENT STARTMONTH

      RENAME TO FIRST_OF_THE_MONTH



Example 34.22:



ALTER EVENT DIRECT_INACTIVE

      ENABLE



Example 34.23:



DROP EVENT FIRST_OF_THE_MONTH



Example 34.24:



GRANT EVENT

ON    TENNIS.*

TO    SAM



Example 34.25:



SHOW CREATE EVENT TOMORROW11



Example 35.1:



<HTML>

<HEAD>

<TITLE>Logging on</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass)

        or die ("<p>Logging on has not succeeded.</p>");

echo "<p>Logging on has succeeded.</p>\n";

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.2:



<HTML>

<HEAD>

<TITLE>Current database</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass)

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.3:



<HTML>

<HEAD>

<TITLE>Create Index</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$result = mysql_query("CREATE UNIQUE INDEX PLAY

                       ON PLAYERS (PLAYERNO)");

if (!$result)

{

   echo "<br>Index PLAY is not created!\n";

}

else

{

   echo "<br>Index PLAY is created!\n";

};

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.4:



<HTML>

<HEAD>

<TITLE>Create Index plus response</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$result = mysql_query("CREATE UNIQUE INDEX PLAY

                       ON PLAYERS (PLAYERNO)");

if (!$result)

{

   echo "<br>Index PLAY is not created!\n";

}

else

{

   echo "<br>Index PLAY is created!\n";

};

echo "<br>mysql_info=".mysql_info($conn);

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.5:



<HTML>

<HEAD>

<TITLE>Error messages</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$result = mysql_query("CREATE UNIQUE INDEX PLAY 

                       ON PLAYERS (PLAYERNO)");

if (!$result)

{

   echo "<br>Index PLAY is not created!\n";

   $error_number = mysql_errno();

   $error_message = mysql_error();

   echo "<br>Fout: $error_number: $error_message\n";

}

else

{

   echo "<br>Index PLAY is created!\n";

}

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.6:



<HTML>

<HEAD>

<TITLE>Two connections</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn1 = mysql_connect($host, $user, $pass) 

         or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$host = "localhost";

$user = "BOOKSQL";

$pass = "BOOKSQLPW";

$conn2 = mysql_connect($host, $user, $pass) 

         or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS", $conn1)

      or die ("<br>Database unknown.\n");

echo "<br>Connection 1 is started.\n";

$db = mysql_select_db("TENNIS", $conn2)

      or die ("<br>Database unknown.\n");

echo "<br>Connection 2 is started.\n";

mysql_close($conn1);

mysql_close($conn2);

?>

</BODY>

</HTML>



Example 35.7:



<HTML>

<HEAD>

<TITLE>Parameters</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$wnr = 22;

$result = mysql_query("UPDATE MATCHES 

          SET WON = WON + 1 WHERE MATCHNO = $mno");

if (!$result)

{

   echo "<br>Update not executed!\n";

   $error_number = mysql_errno();

   $error_message = mysql_error();

   echo "<br>Error: $error_number: $error_message\n";

}

else

{

   echo "<br>WON column has increased for match $mno.\n";

}

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.8:



<HTML>

<HEAD>

<TITLE>Query with a row</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$query = "SELECT COUNT(*) AS NUMBER FROM PLAYERS";

$result = mysql_query($query)

          or die ("<br>Query is incorrect.\n");

$row = mysql_fetch_assoc($result)

       or die ("<br>Query had no result.\n");

echo "<br>The number of players ".$row['NUMBER'].".\n";

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.9:



<HTML>

<HEAD>

<TITLE>SELECT statement with multiple rows</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has not succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$query = "SELECT PLAYERNO FROM PLAYERS ORDER BY 1 DESC";

$result = mysql_query($query)

          or die ("<br>Query is incorrect.\n");

if (mysql_num_rows($result) > 0)

{

   while ($row=mysql_fetch_assoc($result))

   {

      echo "<br>Player number ".$row['PLAYERNO'].".\n";

   }

}

else

{

   echo "<br>No players found.\n";

}

mysql_free_result($result);

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.10:



<HTML>

<HEAD>

<TITLE>MYSQL_FETCH_ROW function</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$query = "SELECT PLAYERNO FROM PLAYERS ORDER BY 1 DESC";

$result = mysql_query($query)

          or die ("<br>Query is incorrect.\n");

while ($row=mysql_fetch_row($result))

{

   echo "<br>Player number ".$row[0].".\n";

};

mysql_free_result($result);

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.11:



<HTML>

<HEAD>

<TITLE>MYSQL_DATA_SEEK function</TITLE></HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$query = "SELECT PLAYERNO FROM PLAYERS ORDER BY 1 DESC";

$result = mysql_query($query)

          or die ("<br>Query is incorrect.\n");

mysql_data_seek($result, 3);

$row=mysql_fetch_row($result);

echo "<br>Player number ".$row[0].".\n";

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.12:



<HTML>

<HEAD>

<TITLE>Working with objects</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$query = "SELECT PLAYERNO FROM PLAYERS ORDER BY 1 DESC";

$result = mysql_query($query)

          or die ("<br>Query is incorrect.\n");

while ($row=mysql_fetch_object($result))

{

   echo "<br>Player number ".$row->PLAYERNO.".\n";

};

mysql_free_result($result);

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.13:



<HTML>

<HEAD>

<TITLE>Query with null values</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$query = "SELECT LEAGUENO FROM PLAYERS";

$result = mysql_query($query)

          or die ("<br>Query is incorrect.\n");

if (mysql_num_rows($result) > 0)

{

   while ($row=mysql_fetch_assoc($result))

   {   

      if ($row['LEAGUENO'] === NULL)

      {

         echo "<br>Player number is unknown.\n";

      }

      else

      {

         echo "<br>Player number ".$row['LEAGUENO'].".\n";

      }

   }

}

else 

{

   echo "<br>No players found.\n";

}

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.14:



<HTML>

<HEAD>

<TITLE>Characteristics of expressions</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$query = "SELECT * FROM PLAYERS WHERE PLAYERNO = 27";

$result = mysql_query($query)

          or die ("<br>Query is incorrect.\n");

while ($field=mysql_fetch_field($result))

{

   echo "<br>".$field->name."  ".$field->type."  ".

        $field->max_length."  ".$field->primary_key."\n";

}

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.15:



<HTML>

<HEAD>

<TITLE>Characteristics of expressions</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$query = "SELECT * FROM PLAYERS WHERE PLAYERNO = 27";

$result = mysql_query($query)

          or die ("<br>Query is incorrect.\n");

$exp = 0;

while ($field=mysql_fetch_field($result))

{

   echo "<br>Name=".mysql_field_name($result, $exp)."\n";

   echo "<br>Data type=".mysql_field_type($result, $exp)."\n";

   echo "<br>Length=".mysql_field_len($result, $exp)."\n";

   echo "<br>Table=".mysql_field_table($result, $exp)."\n";

   $exp += 1;

}

mysql_close($conn);

?>

</BODY>

</HTML>



Example 35.16:



<HTML>

<HEAD>

<TITLE>Catalog tables</TITLE>

</HEAD>

<BODY>

<?php

$host = "localhost";

$user = "root";

$pass = "root";

$conn = mysql_connect($host, $user, $pass) 

        or die ("<p>Logging on has not succeeded.\n");

echo "<p>Logging on has succeeded.\n";

$db = mysql_select_db("TENNIS")

      or die ("<br>Database unknown.\n");

echo "<br>TENNIS is the current database now.\n";

$query1 = "SELECT TABLE_NAME, COLUMN_NAME 

           FROM   INFORMATION_SCHEMA.COLUMNS 

           WHERE  TABLE_NAME IN 

                  ('COMMITTEE_MEMBERS','PENALTIES','PLAYERS',

                   'TEAMS','MATCHES')

           ORDER BY TABLE_NAME, ORDINAL_POSITION";

$tables = mysql_query($query1)

          or die ("<br>Query1 is incorrect.\n");

while ($tablerow=mysql_fetch_assoc($tables))

{

   $query2 = "SELECT COUNT(DISTINCT ";

   $query2 .= $tablerow['COLUMN_NAME'].") AS A, ";

   $query2 .= "MIN( ".$tablerow['COLUMN_NAME'].") AS B, ";

   $query2 .= "MAX( ".$tablerow['COLUMN_NAME'].") AS C ";

   $query2 .= "FROM ".$tablerow['TABLE_NAME'];

   $columns = mysql_query($query2)

              or die ("<br>Query2 is incorrect.\n");

   $columnrow=mysql_fetch_assoc($columns);

   echo "<br>".$tablerow['TABLE_NAME'].".".

        $tablerow['COLUMN_NAME'].

        "  Different=".$columnrow['A'].

        "  Minimum=".$columnrow['B'].

        "  Maximum=".$columnrow['C']."\n";

   mysql_free_result($columns);

};

mysql_free_result($tables);

mysql_close($conn);

?>

</BODY>

</HTML>



Example 36.1:



PREPARE S1 FROM 'SELECT * FROM TEAMS'

;

EXECUTE S1

;

SET @SQL_STATEMENT = 'SELECT * FROM TEAMS'

;

PREPARE S1 FROM @SQL_STATEMENT



Example 36.2:



DEALLOCATE PREPARE S1



Example 36.3:



PREPARE S2 FROM 'SELECT * FROM TEAMS WHERE TEAMNO = @TNO'

;

SET @TNO = 1

;

EXECUTE S2

;

SET @TNO = 2

;

EXECUTE S2



Example 36.4:



PREPARE S3 FROM

   'SELECT * FROM TEAMS WHERE TEAMNO BETWEEN ? AND ?'

;

SET @FROM_TNO = 1, @TO_TNO = 4

;

EXECUTE S3 USING @FROM_TNO, @TO_TNO

;

DEALLOCATE PREPARE S3



Example 36.5:



CREATE PROCEDURE DROP_TABLE

   (IN TABLENAME VARCHAR(64))

BEGIN

   SET @SQL_STATEMENT = CONCAT('DROP TABLE ', TABLENAME);

   PREPARE S1 FROM @SQL_STATEMENT;

   EXECUTE S1;

   DEALLOCATE PREPARE S1;

END



Example 36.6:



CREATE PROCEDURE DYNAMIC_SELECT

   (IN  SELECT_STATEMENT VARCHAR(64),

    OUT NUMBER_OF_ROWS INTEGER)

BEGIN

   DECLARE FOUND BOOLEAN DEFAULT TRUE;

   DECLARE VAR1,VAR2,VAR3 VARCHAR(100);

   DECLARE C_RESULT CURSOR FOR

      SELECT * FROM SELECT_TABLE;

   DECLARE CONTINUE HANDLER FOR NOT FOUND

      SET FOUND = FALSE;

   SET @CREATE_STATEMENT =

      CONCAT('CREATE TEMPORARY TABLE SELECT_TABLE AS (',

              SELECT_STATEMENT, ')');

   PREPARE S1 FROM @CREATE_STATEMENT;

   EXECUTE S1;

   DEALLOCATE PREPARE S1;

   SET NUMBER_OF_ROWS = 0;

   OPEN C_RESULT;

   FETCH C_RESULT INTO VAR1, VAR2, VAR3;

   WHILE FOUND DO

      SET NUMBER_OF_ROWS = NUMBER_OF_ROWS + 1;

      FETCH C_RESULT INTO VAR1, VAR2, VAR3;

   END WHILE;

   CLOSE C_RESULT;

   DROP TEMPORARY TABLE SELECT_TABLE;

END

;

CALL DYNAMIC_SELECT('SELECT PAYMENTNO, PAYMENT_DATE, PLAYERNO 

                     FROM PENALTIES', @NUMBER_OF_ROWS)

;

SELECT @NUMBER_OF_ROWS



Example 37.1:



DELETE

FROM     PENALTIES

WHERE    PLAYERNO = 44

;

SELECT   *

FROM     PENALTIES

;

ROLLBACK WORK

;

COMMIT WORK



Example 37.3:



DELETE FROM PLAYERS WHERE PLAYERNO = 6

;	

DELETE FROM PENALTIES WHERE PLAYERNO = 6

;	

DELETE FROM MATCHES WHERE PLAYERNO = 6

;	

DELETE FROM COMMITTEE_MEMBERS WHERE PLAYERNO = 6

;	

UPDATE TEAMS SET PLAYERNO = 83 WHERE PLAYERNO = 6

;

SHOW GLOBAL VARIABLES LIKE 'COMPLETION_TYPE'



Example 37.5:



CREATE PROCEDURE NEW_TEAM ()

BEGIN

   INSERT INTO TEAMS VALUES (100,27,'first');

END

;

SET AUTOCOMMIT = 1

;

START TRANSACTION

;

INSERT INTO TEAMS VALUES (200,27,'first')

;

CALL NEW_TEAM()

;

ROLLBACK WORK



Example 37.6:



UPDATE   PENALTIES

SET      AMOUNT = AMOUNT + 25

WHERE    PAYMENTNO = 4

;

SELECT   *

FROM     PENALTIES

WHERE    PAYMENTNO = 4



Example 37.7:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    TOWN = 'Stratford'

;

UPDATE   PLAYERS

SET      TOWN = 'Eltham'

WHERE    PLAYERNO = 7

;

SELECT   PLAYERNO, NAME, INITIALS,

         STREET, HOUSENO, POSTCODE, TOWN

FROM     PLAYERS

WHERE    PLAYERNO IN (6, 83, 2, 7, 57, 39, 100)



Example 37.8:



SELECT   PLAYERNO

FROM     PLAYERS

WHERE    TOWN = 'Stratford'



Example 37.9:



UPDATE   PENALTIES

SET      AMOUNT = AMOUNT + 25

WHERE    PAYMENTNO = 4

;

UPDATE   PENALTIES

SET      AMOUNT = AMOUNT + 30

WHERE    PAYMENTNO = 4



Example 37.10:



LOCK TABLE PLAYERS READ



Example 37.11:



DO GET_LOCK('lock1',0)

;

SELECT GET_LOCK('lock1',0)



Example 37.12:



SELECT IS_FREE_LOCK('lock1')



Example 37.13:



SELECT IS_USED_LOCK('lock1')



Example 37.14:



SELECT RELEASE_LOCK('lock1')



 

你可能感兴趣的:(developer)