topical media & game development

talk show tell print

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.