mysql开发者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')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值