標籤:2-2 愛情 and gen char res primary prim group
練習指令碼:
CREATE DATABASE filmclub;USE filmclub;CREATE TABLE category( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(20));CREATE TABLE film( fid INT PRIMARY KEY AUTO_INCREMENT, fname VARCHAR(20), director VARCHAR(20), #導演 price DECIMAL(10,2), showtime DATE, cid INT, FOREIGN KEY(cid) REFERENCES category(cid));CREATE TABLE USER( uid INT PRIMARY KEY AUTO_INCREMENT, uname VARCHAR(20), birthday DATE, gender ENUM('男','女'), address VARCHAR(20), cellphone CHAR(11));CREATE TABLE user_category( uid INT, cid INT, FOREIGN KEY(uid) REFERENCES USER(uid), FOREIGN KEY(cid) REFERENCES category(cid), PRIMARY KEY(uid,cid));CREATE TABLE emp( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), gender ENUM('男','女'), hiredate DATE, sal DECIMAL(10,2), address VARCHAR(20));CREATE TABLE sal_grade( gid INT PRIMARY KEY AUTO_INCREMENT, minsal DECIMAL(10,2), maxsal DECIMAL(10,2));CREATE TABLE orders( eid INT, uid INT, fid INT, num INT, odate DATE);INSERT INTO category VALUES(NULL, '喜劇');INSERT INTO category VALUES(NULL, '動作');INSERT INTO category VALUES(NULL, '懸疑');INSERT INTO category VALUES(NULL, '恐怖');INSERT INTO category VALUES(NULL, '科幻');INSERT INTO category VALUES(NULL, '戰爭');INSERT INTO category VALUES(NULL, '愛情');INSERT INTO category VALUES(NULL, '災難');INSERT INTO film VALUES(NULL, '天下無賊','馮小剛',50,'2008-12-12',1);INSERT INTO film VALUES(NULL, '功夫','周星馳',150,'2009-12-12',2);INSERT INTO film VALUES(NULL, '大話西遊','周星馳',20,'2012-3-12',3);INSERT INTO film VALUES(NULL, '我不是潘金蓮','馮小剛',30,'2007-5-31',1);INSERT INTO film VALUES(NULL, '道士下山','陳凱歌',40,'2004-8-9',8);INSERT INTO film VALUES(NULL, '火鍋英雄','陳凱歌',60,'2011-11-11',7);INSERT INTO film VALUES(NULL, '尋龍訣','馮小剛',100,'2007-7-7',7);INSERT INTO film VALUES(NULL, '老炮兒','陳凱歌',80,'2005-9-2',1);INSERT INTO film VALUES(NULL, '我是證人','周星馳',90,'2010-10-5',2);INSERT INTO film VALUES(NULL, '葉問','馮小剛',120,'2012-6-3',3);INSERT INTO USER VALUES(NULL,'劉歡','1950-1-1','男','北大街','13312345678');INSERT INTO USER VALUES(NULL,'張學友','1955-2-3','男','南大街','13312345676');INSERT INTO USER VALUES(NULL,'劉嘉玲','1970-11-21','女','北大街','13312345675');INSERT INTO USER VALUES(NULL,'李嘉欣','1988-9-3','女','南大街','13312345673');INSERT INTO USER VALUES(NULL,'劉德華','1953-2-11','男','北大街','13312345672');INSERT INTO USER VALUES(NULL,'張國立','1999-12-31','男','東大街','13312345671');INSERT INTO USER VALUES(NULL,'張國榮','1988-3-23','男','西大街','13312345670');INSERT INTO USER VALUES(NULL,'劉建國','1970-6-22','男','西大街','13312345679');INSERT INTO user_category VALUES(1,2);INSERT INTO user_category VALUES(1,3);INSERT INTO user_category VALUES(2,8);INSERT INTO user_category VALUES(3,1);INSERT INTO user_category VALUES(3,5);INSERT INTO user_category VALUES(3,7);INSERT INTO user_category VALUES(2,1);INSERT INTO user_category VALUES(1,7);INSERT INTO user_category VALUES(8,8);INSERT INTO user_category VALUES(8,7);INSERT INTO user_category VALUES(5,7);INSERT INTO user_category VALUES(5,3);INSERT INTO user_category VALUES(2,6);INSERT INTO user_category VALUES(7,1);INSERT INTO user_category VALUES(7,2);INSERT INTO user_category VALUES(7,3);INSERT INTO emp VALUES(NULL, '郭靖', '男', '2002-2-3',2500,'東大街');INSERT INTO emp VALUES(NULL, '黃蓉', '女', '2003-12-3',5500,'東大街');INSERT INTO emp VALUES(NULL, '楊冪', '女', '2002-2-8',8500,'西大街');INSERT INTO emp VALUES(NULL, '劉詩詩', '女', '2004-4-12',6500,'南大街');INSERT INTO sal_grade VALUES(NULL, 1000, 2000);INSERT INTO sal_grade VALUES(NULL, 2001, 4000);INSERT INTO sal_grade VALUES(NULL, 4001, 5000);INSERT INTO sal_grade VALUES(NULL, 5001, 7000);INSERT INTO sal_grade VALUES(NULL, 7001, 9000);INSERT INTO orders VALUES(1,2,10,1,'2016-11-11');INSERT INTO orders VALUES(2,3,8,2,'2016-2-21');INSERT INTO orders VALUES(3,7,10,1,'2016-3-21');INSERT INTO orders VALUES(1,1,7,1,'2016-10-15');INSERT INTO orders VALUES(1,8,3,1,'2016-2-17');INSERT INTO orders VALUES(1,7,1,1,'2016-5-18');INSERT INTO orders VALUES(4,1,1,1,'2016-5-7');INSERT INTO orders VALUES(4,2,1,1,'2016-5-9');INSERT INTO orders VALUES(4,3,1,1,'2016-11-10');INSERT INTO orders VALUES(3,5,10,1,'2016-5-11');INSERT INTO orders VALUES(2,1,1,1,'2016-7-12');INSERT INTO orders VALUES(2,1,1,2,'2016-7-13');INSERT INTO orders VALUES(2,1,1,3,'2016-7-14');INSERT INTO orders VALUES(2,1,9,5,'2016-8-19');INSERT INTO orders VALUES(2,1,8,3,'2016-8-4');INSERT INTO orders VALUES(2,2,5,1,'2016-8-6');INSERT INTO orders VALUES(2,2,6,1,'2016-1-22');INSERT INTO orders VALUES(2,2,1,1,'2016-1-11');INSERT INTO orders VALUES(2,6,3,1,'2016-2-17');INSERT INTO orders VALUES(2,6,8,2,'2016-3-12');SELECT * FROM category;SELECT * FROM film;SELECT * FROM USER;SELECT * FROM USER_category;SELECT * FROM emp;SELECT * FROM sal_grade;SELECT * FROM orders;
習題:
#1查詢價格比2號類型所有電影平均價還低的電影SELECT * FROM film WHERE price <(SELECT AVG(price) FROM film WHERE cid=2);SELECT * FROM film;#2查詢張學友喜歡的類型中所有電影的最高價SELECT MAX(price) FROM film WHERE cid IN (SELECT cid FROM user_category WHERE uid = (SELECT uid FROM USER WHERE uname = '張學友'));#3查詢所有電影,以及電影對應的類型名,要求顯示出所有類型名(mysql沒有完全外串連FULL JOIN,只能用聯集查詢)SELECT * FROM film RIGHT JOIN category ON film.cid = category.cidUNIONSELECT * FROM film LEFT JOIN category ON film.cid = category.cid#4查詢價格大於天下無賊的電影中,每部類型各多少電影SELECT cid,COUNT(*) FROM film WHERE price >(SELECT price FROM film WHERE fname = '天下無賊')GROUP BY cid;#5查詢那些員工給那些會員賣了哪些電影SELECT ename,uname,fname FROM emp e,USER u,film f,orders oWHERE e.eid = o.eid AND o.uid = u.uid AND f.fid = o.fid#6查詢有回頭客的員工SELECT eid,uid,COUNT(*) FROM orders GROUP BY eid,uid HAVING COUNT(*) > 1;#7查詢回頭客超過一個的員工(表子查詢在mysql中必須起別名,否則報錯,orcale中則不需要別名)SELECT eid,COUNT(*) FROM (SELECT eid,uid,COUNT(*) FROM orders GROUP BY eid,uid HAVING COUNT(*) > 1)aaGROUP BY eid#8查詢價格比所有喜劇類型的平均價還高的電影SELECT * FROM film WHERE price >(SELECT AVG(price) FROM film WHERE cid =(SELECT cid FROM category WHERE cname = '喜劇'))#9查詢電影所屬類型的平均價(相互關聯的子查詢)SELECT fname,(SELECT AVG(price) FROM film WHERE cid = a.cid) AS 所屬類型平均價 FROM film a#10查詢價格比1號類型所有電影價格都高的電影SELECT * FROM film WHERE price >(SELECT MAX(price) FROM film WHERE cid = 1)#11查詢上映日期比天下無賊晚的電影中,每個導演各多少部電影SELECT * FROM film WHERE showtime >(SELECT showtime FROM film WHERE fname = '天下無賊')#12查詢哪些使用者都喜歡哪些類型SELECT uname,cname FROM USER,category,user_category WHERE user.uid = user_category.uid AND category.cid = user_category.cid#13查詢喜歡類型超過2種的使用者SELECT uname FROM(SELECT uname,cname FROM USER,category,user_category WHERE user.uid = user_category.uid AND category.cid = user_category.cid)aaGROUP BY uname HAVING COUNT(*) > 2#14查詢從來沒有被喜歡過的類型SELECT cname FROM category WHERE cid NOT IN(SELECT DISTINCT cid FROM user_category)#15查詢喜歡了所有類型的使用者SELECT uid,COUNT(*) FROM user_category GROUP BY uidHAVING COUNT(*) = (SELECT COUNT(*) FROM category)#16查詢每個銷售人員的銷售總額SELECT ename,SUM(num*price) FROM emp,film,orders WHERE emp.eid = orders.eid ANDorders.fid = film.fidGROUP BY ename#17查詢每個電影各被賣出多少張SELECT fname,SUM(num) FROM film JOIN orders ON film.fid = orders.fidGROUP BY fname#18查詢上映日期比周星馳導演所有電影都晚的電影中,每種類型電影的最低價SELECT (SELECT cname FROM category WHERE a.cid = cid),MIN(price) FROM film a WHERE showtime >(SELECT MAX(showtime) FROM film WHERE director = '周星馳')GROUP BY cid#19查詢在閏年上映的電影SELECT * FROM film WHERE YEAR(showtime) % 4 = 0 AND YEAR(showtime) % 100 != 0OR YEAR(showtime) % 400 = 0#20查詢上映日期中,月份比日期大的電影SELECT * FROM film WHERE MONTH(showtime) > DAY(showtime)#21查詢價格與類型都與‘天下無賊’相同的電影SELECT * FROM filmWHERE (cid,price) =(SELECT cid,price FROM film WHERE fname = '天下無賊')#22查詢最受歡迎的類型SELECT cid,COUNT(*) FROM user_categoryGROUP BY cidHAVING COUNT(*) >= ALL(SELECT COUNT(*) FROM user_categoryGROUP BY cid)#23查詢每個使用者各花了多少錢SELECT uid,SUM(num*price) FROM orders,film WHERE orders.fid = film.fid GROUP BY uid
MySQL----基礎sql練習