MySQL----基礎sql練習

練習腳本:

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.cid
UNION
SELECT
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 o
WHERE 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
)aa
GROUP 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
)aa
GROUP 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 uid
HAVING COUNT(
) = (
SELECT COUNT(*) FROM category
)

#16查詢每個銷售人員的銷售總額
SELECT ename,SUM(num*price) FROM emp,film,orders WHERE
emp.eid = orders.eid AND
orders.fid = film.fid
GROUP BY ename

#17查詢每個電影各被賣出多少張
SELECT fname,SUM(num) FROM film JOIN orders
ON film.fid = orders.fid
GROUP 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 != 0
OR YEAR(showtime) % 400 = 0

#20查詢上映日期中,月份比日期大的電影
SELECT * FROM film WHERE MONTH(showtime) > DAY(showtime)

#21查詢價格與類型都與‘天下無賊’相同的電影
SELECT * FROM film
WHERE (cid,price) =
(SELECT cid,price FROM film WHERE fname = '天下無賊')

#22查詢最受歡迎的類型
SELECT cid,COUNT() FROM user_category
GROUP BY cid
HAVING COUNT(
) >= ALL
(SELECT COUNT(*) FROM user_category
GROUP BY cid)

#23查詢每個用戶各花了多少錢
SELECT uid,SUM(num*price) FROM orders,film
WHERE orders.fid = film.fid
GROUP BY uid

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章