topical media & game development
basic-mysql-10-ch10-examples.sql / sql
/* Chapter 10 - Examples */
CREATE TABLE Books
(
BookID SMALLINT NOT NULL PRIMARY KEY,
BookTitle VARCHAR(60) NOT NULL,
Copyright YEAR NOT NULL
)
ENGINE=INNODB;
INSERT INTO Books
VALUES (12786, 'Letters to a Young Poet', 1934),
(13331, 'Winesburg, Ohio', 1919),
(14356, 'Hell\’s Angels', 1966),
(15729, 'Black Elk Speaks', 1932),
(16284, 'Noncomformity', 1996),
(17695, 'A Confederacy of Dunces', 1980),
(19264, 'Postcards', 1992),
(19354, 'The Shipping News', 1993);
CREATE TABLE Authors
(
AuthID SMALLINT NOT NULL PRIMARY KEY,
AuthFN VARCHAR(20),
AuthMN VARCHAR(20),
AuthLN VARCHAR(20)
)
ENGINE=INNODB;
INSERT INTO Authors
VALUES (1006, 'Hunter', 'S.', 'Thompson'),
(1007, 'Joyce', 'Carol', 'Oates'),
(1008, 'Black', NULL, 'Elk'),
(1009, 'Rainer', 'Maria', 'Rilke'),
(1010, 'John', 'Kennedy', 'Toole'),
(1011, 'John', 'G.', 'Neihardt'),
(1012, 'Annie', NULL, 'Proulx'),
(1013, 'Alan', NULL, 'Watts'),
(1014, 'Nelson', NULL, 'Algren');
CREATE TABLE AuthorBook
(
AuthID SMALLINT NOT NULL,
BookID SMALLINT NOT NULL,
PRIMARY KEY (AuthID, BookID),
FOREIGN KEY (AuthID) REFERENCES Authors (AuthID),
FOREIGN KEY (BookID) REFERENCES Books (BookID)
)
ENGINE=INNODB;
INSERT INTO AuthorBook
VALUES (1006, 14356), (1008, 15729), (1009, 12786), (1010, 17695),
(1011, 15729), (1012, 19264), (1012, 19354), (1014, 16284);
SELECT BookTitle, Copyright, AuthID
FROM Books AS b, AuthorBook AS ab
WHERE b.BookID=ab.BookID
ORDER BY BookTitle;
SELECT BookTitle, Copyright, ab.AuthID
FROM Books AS b, AuthorBook AS ab
WHERE b.BookID=ab.BookID AND Copyright<1980
ORDER BY BookTitle;
SELECT BookTitle, Copyright, CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Books AS b, AuthorBook AS ab, Authors AS a
WHERE b.BookID=ab.BookID AND ab.AuthID=a.AuthID AND Copyright<1980
ORDER BY BookTitle;
SELECT BookTitle, AuthID FROM Books, AuthorBook;
SELECT BookTitle, AuthID FROM Books JOIN AuthorBook;
SELECT BookTitle, AuthID FROM Books INNER JOIN AuthorBook;
SELECT BookTitle, AuthID FROM Books CROSS JOIN AuthorBook;
SELECT BookTitle, Copyright, ab.AuthID
FROM Books AS b JOIN AuthorBook AS ab
ON b.BookID=ab.BookID
ORDER BY BookTitle;
SELECT BookTitle, Copyright, ab.AuthID
FROM Books JOIN AuthorBook AS ab
USING (BookID)
ORDER BY BookTitle;
SELECT BookTitle, Copyright, ab.AuthID
FROM Books AS b JOIN AuthorBook AS ab
ON b.BookID=ab.BookID
WHERE Copyright<1980
ORDER BY BookTitle;
SELECT BookTitle, Copyright, CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Books AS b CROSS JOIN AuthorBook AS ab ON b.BookID=ab.BookID
CROSS JOIN Authors AS a ON ab.AuthID=a.AuthID
WHERE Copyright<1980
ORDER BY BookTitle;
SELECT BookTitle, Copyright, CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Books JOIN AuthorBook USING (BookID)
JOIN Authors USING (AuthID)
WHERE Copyright<1980
ORDER BY BookTitle;
SELECT BookTitle, Copyright, CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Books AS b STRAIGHT_JOIN AuthorBook AS ab STRAIGHT_JOIN Authors AS a
WHERE b.BookID=ab.BookID AND ab.AuthID=a.AuthID AND Copyright<1980
ORDER BY BookTitle;
SELECT STRAIGHT_JOIN BookTitle, Copyright,
CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Books AS b, AuthorBook AS ab, Authors AS a
WHERE b.BookID=ab.BookID AND ab.AuthID=a.AuthID AND Copyright<1980
ORDER BY BookTitle;
SELECT BookTitle, Copyright, AuthID
FROM Books AS b LEFT JOIN AuthorBook AS ab
ON b.BookID=ab.BookID
ORDER BY BookTitle;
SELECT BookTitle, Copyright, AuthID
FROM Books LEFT JOIN AuthorBook
USING (BookID)
ORDER BY BookTitle;
SELECT BookTitle, Copyright, CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Books AS b LEFT JOIN AuthorBook AS ab ON b.BookID=ab.BookID
LEFT JOIN Authors AS a ON ab.AuthID=a.AuthID
ORDER BY BookTitle;
SELECT BookTitle, Copyright, AuthFN, AuthMN, AuthLN
FROM Books AS b LEFT JOIN AuthorBook AS ab ON b.BookID=ab.BookID
LEFT JOIN Authors AS a ON ab.AuthID=a.AuthID
ORDER BY BookTitle;
SELECT BookTitle, Copyright, CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Books AS b RIGHT JOIN AuthorBook AS ab ON b.BookID=ab.BookID
RIGHT JOIN Authors AS a ON ab.AuthID=a.AuthID
ORDER BY BookTitle;
SELECT BookTitle, Copyright,
CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Books AS b NATURAL JOIN AuthorBook AS ab
NATURAL JOIN Authors AS a
WHERE Copyright<1980
ORDER BY BookTitle;
SELECT BookTitle, Copyright,
CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Books AS b NATURAL LEFT JOIN AuthorBook AS ab
NATURAL LEFT JOIN Authors AS a
WHERE Copyright<1980
ORDER BY BookTitle;
UPDATE Authors AS a, AuthorBook AS ab, Books AS b
SET AuthLN='Wats'
WHERE a.AuthID=ab.AuthID AND ab.BookID=b.BookID
AND BookTitle='Tao: The Watercourse Way';
UPDATE Authors CROSS JOIN AuthorBook USING (AuthID)
CROSS JOIN Books USING (BookID)
SET AuthLN='Watts'
WHERE BookTitle='Tao: The Watercourse Way';
DELETE ab
FROM AuthorBook AS ab, Authors AS a
WHERE ab.AuthID=a.AuthID AND AuthLN='Watts';
DELETE ab, b
FROM Authors AS a, AuthorBook AS ab, Books AS b
WHERE a.AuthID=ab.AuthID AND ab.BookID=b.BookID
AND AuthLN='Watts';
DELETE ab, b
FROM Authors AS a INNER JOIN AuthorBook AS ab ON a.AuthID=ab.AuthID
INNER JOIN Books AS b ON ab.BookID=b.BookID
WHERE AuthLN='Watts';
SELECT CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Authors
WHERE AuthID=
(
SELECT ab.AuthID
FROM AuthorBook AS ab, Books AS b
WHERE ab.BookID=b.BookID AND BookTitle='Noncomformity'
);
SELECT DISTINCT CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Authors AS a JOIN AuthorBook AS ab ON a.AuthID=ab.AuthID
JOIN Books AS b ON ab.BookID=b.BookID
WHERE BookTitle='Noncomformity';
SELECT CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Authors
WHERE AuthID=
(
SELECT ab.AuthID
FROM AuthorBook AS ab, Books AS b
WHERE ab.BookID=b.BookID AND BookTitle='Black Elk Speaks'
);
SELECT DISTINCT CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
FROM Authors
WHERE AuthID<>
(
SELECT ab.AuthID
FROM AuthorBook AS ab, Books AS b
WHERE ab.BookID=b.BookID AND BookTitle='Noncomformity'
)
ORDER BY AuthLN;
SELECT BookTitle, Copyright
FROM Books
WHERE Copyright<(SELECT MAX(Copyright)-50 FROM Books)
ORDER BY BookTitle;
SELECT BookTitle, Copyright
FROM Books
WHERE Copyright > ANY
(
SELECT b.copyright
FROM Books AS b JOIN AuthorBook AS ab USING (BookID)
JOIN Authors AS a USING (AuthID)
WHERE AuthLN='Proulx'
)
ORDER BY BookTitle;
SELECT BookTitle, Copyright
FROM Books
WHERE Copyright > ALL
(
SELECT b.copyright
FROM Books AS b JOIN AuthorBook AS ab USING (BookID)
JOIN Authors AS a USING (AuthID)
WHERE AuthLN='Proulx'
)
ORDER BY BookTitle;
SELECT BookTitle, Copyright
FROM Books
WHERE Copyright IN
(
SELECT b.copyright
FROM Books AS b JOIN AuthorBook AS ab USING (BookID)
JOIN Authors AS a USING (AuthID)
WHERE AuthLN='Proulx'
)
ORDER BY BookTitle;
SELECT BookTitle, Copyright
FROM Books
WHERE Copyright NOT IN
(
SELECT b.copyright
FROM Books AS b JOIN AuthorBook AS ab USING (BookID)
JOIN Authors AS a USING (AuthID)
WHERE AuthLN='Proulx'
)
ORDER BY BookTitle;
SELECT BookID, BookTitle
FROM Books AS b
WHERE EXISTS
(
SELECT BookID
FROM AuthorBook AS ab
WHERE b.BookID=ab.BookID
)
ORDER BY BookTitle;
SELECT BookID, BookTitle
FROM Books AS b
WHERE NOT EXISTS
(
SELECT BookID
FROM AuthorBook AS ab
WHERE b.BookID=ab.BookID
)
ORDER BY BookTitle;
CREATE TABLE BookOrders
(
OrderID SMALLINT NOT NULL,
BookID SMALLINT NOT NULL,
Quantity SMALLINT NOT NULL,
PRIMARY KEY (OrderID, BookID),
FOREIGN KEY (BookID) REFERENCES Books (BookID)
)
ENGINE=INNODB;
INSERT INTO BookOrders
VALUES (101, 13331, 1), (101, 12786, 1), (101, 16284, 2), (102, 19354, 1),
(102, 15729, 3), (103, 12786, 2), (103, 19264, 1), (103, 13331, 1),
(103, 14356, 2), (104, 19354, 1), (105, 15729, 1), (105, 14356, 2),
(106, 16284, 2), (106, 13331, 1), (107, 12786, 3), (108, 19354, 1),
(108, 16284, 4), (109, 15729, 1), (110, 13331, 2), (110, 12786, 2),
(110, 14356, 2), (111, 14356, 2);
SELECT OrderID, SUM(Quantity) AS Total
FROM BookOrders
GROUP BY OrderID
HAVING Total>(SELECT AVG(Quantity) FROM BookOrders);
SELECT BookID, SUM(Quantity) AS Total
FROM BookOrders
GROUP BY BookID
HAVING BookID IN
(SELECT BookID FROM AuthorBook WHERE AuthID IN
(
SELECT AuthID FROM AuthorBook
GROUP BY AuthID
HAVING COUNT(*)>1
)
);
SELECT BookID FROM AuthorBook WHERE AuthID IN
(
SELECT AuthID FROM AuthorBook
GROUP BY AuthID
HAVING COUNT(*)>1
);
UPDATE Books
SET BookTitle='The Way of Zen', Copyright=1957
WHERE BookID=
(
SELECT ab.BookID
FROM Authors AS a, AuthorBook AS ab
WHERE a.AuthID=ab.AuthID AND a.AuthLN='Watts'
);
DELETE ab, b
FROM AuthorBook AS ab, Books AS b
WHERE ab.BookID=b.BookID
AND ab.AuthID=(SELECT AuthID FROM Authors WHERE AuthLN='Watts');
CREATE TABLE Authors2
(
AuthID SMALLINT NOT NULL PRIMARY KEY,
AuthFN VARCHAR(20),
AuthMN VARCHAR(20),
AuthLN VARCHAR(20)
);
INSERT INTO Authors2
VALUES (1006, 'Mark', NULL, 'Twain'),
(2205, 'E.', 'M.', 'Forster'),
(2206, 'Gabriel', 'Garcia', 'Marquez'),
(2207, 'Raymond', NULL, 'Carver'),
(2208, 'Mary', NULL, 'Shelley'),
(2209, 'Albert', NULL, 'Camus');
(SELECT AuthFN, AuthMN, AuthLN FROM Authors)
UNION
(SELECT AuthFN, AuthMN, AuthLN FROM Authors2)
ORDER BY AuthLN;
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.