当前位置:   article > 正文

MySQL查询练习一(多表)_mysql 多表查询练习题

mysql 多表查询练习题
  1. CREATE DATABASE filmclub;
  2. USE filmclub;
  3. CREATE TABLE category (
  4. cid INT PRIMARY KEY AUTO_INCREMENT,
  5. cname VARCHAR(20)
  6. );
  7. CREATE TABLE film (
  8. fid INT PRIMARY KEY AUTO_INCREMENT,
  9. fname VARCHAR(20),
  10. director VARCHAR(20), # Director
  11. price DECIMAL(10,2),
  12. showtime DATE,
  13. cid INT,
  14. FOREIGN KEY(cid) REFERENCES category(cid)
  15. );
  16. CREATE TABLE USER (
  17. uid INT PRIMARY KEY AUTO_INCREMENT,
  18. uname VARCHAR(20),
  19. birthday DATE,
  20. gender ENUM('男','女'),
  21. address VARCHAR(20),
  22. cellphone CHAR(11)
  23. );
  24. CREATE TABLE user_category (
  25. uid INT,
  26. cid INT,
  27. FOREIGN KEY(uid) REFERENCES USER(uid),
  28. FOREIGN KEY(cid) REFERENCES category(cid),
  29. PRIMARY KEY(uid,cid)
  30. );
  31. CREATE TABLE emp (
  32. eid INT PRIMARY KEY AUTO_INCREMENT,
  33. ename VARCHAR(20),
  34. gender ENUM('男','女'),
  35. hiredate DATE,
  36. sal DECIMAL(10,2),
  37. address VARCHAR(20)
  38. );
  39. CREATE TABLE sal_grade (
  40. gid INT PRIMARY KEY AUTO_INCREMENT,
  41. minsal DECIMAL(10,2),
  42. maxsal DECIMAL(10,2)
  43. );
  44. CREATE TABLE orders (
  45. eid INT,
  46. uid INT,
  47. fid INT,
  48. num INT,
  49. odate DATE
  50. );
  51. INSERT INTO category VALUES(NULL, '喜剧');
  52. INSERT INTO category VALUES(NULL, '动作');
  53. INSERT INTO category VALUES(NULL, '悬疑');
  54. INSERT INTO category VALUES(NULL, '恐怖');
  55. INSERT INTO category VALUES(NULL, '科幻');
  56. INSERT INTO category VALUES(NULL, '战争');
  57. INSERT INTO category VALUES(NULL, '爱情');
  58. INSERT INTO category VALUES(NULL, '灾难');
  59. INSERT INTO film VALUES(NULL, '天下无贼', '冯小刚', 50, '2008-12-12', 1);
  60. INSERT INTO film VALUES(NULL, '功夫', '周星驰', 150, '2009-12-12', 2);
  61. INSERT INTO film VALUES(NULL, '大话西游', '周星驰', 20, '2012-3-12', 3);
  62. INSERT INTO film VALUES(NULL, '我不是潘金莲', '冯小刚', 30, '2007-5-31', 1);
  63. INSERT INTO film VALUES(NULL, '道士下山', '陈凯歌', 40, '2004-8-9', 8);
  64. INSERT INTO film VALUES(NULL, '火锅英雄', '陈凯歌', 60, '2011-11-11', 7);
  65. INSERT INTO film VALUES(NULL, '寻龙诀', '冯小刚', 100, '2007-7-7', 7);
  66. INSERT INTO film VALUES(NULL, '老炮儿', '陈凯歌', 80, '2005-9-2', 1);
  67. INSERT INTO film VALUES(NULL, '我是证人', '周星驰', 90, '2010-10-5', 2);
  68. INSERT INTO film VALUES(NULL, '叶问', '冯小刚', 120, '2012-6-3', 3);
  69. INSERT INTO USER VALUES(NULL, '刘欢', '1950-1-1', '男', '北大街', '13312345678');
  70. INSERT INTO USER VALUES(NULL, '张学友', '1955-2-3', '男', '南大街', '13312345676');
  71. INSERT INTO USER VALUES(NULL, '刘嘉玲', '1970-11-21', '女', '北大街', '13312345675');
  72. INSERT INTO USER VALUES(NULL, '李嘉欣', '1988-9-3', '女', '南大街', '13312345673');
  73. INSERT INTO USER VALUES(NULL, '刘德华', '1953-2-11', '男', '北大街', '13312345672');
  74. INSERT INTO USER VALUES(NULL, '张国立', '1999-12-31', '男', '东大街', '13312345671');
  75. INSERT INTO USER VALUES(NULL, '张国荣', '1988-3-23', '男', '西大街', '13312345670');
  76. INSERT INTO USER VALUES(NULL, '刘建国', '1970-6-22', '男', '西大街', '13312345679');
  77. INSERT INTO user_category VALUES(1, 2);
  78. INSERT INTO user_category VALUES(1, 3);
  79. INSERT INTO user_category VALUES(2, 8);
  80. INSERT INTO user_category VALUES(3, 1);
  81. INSERT INTO user_category VALUES(3, 5);
  82. INSERT INTO user_category VALUES(3, 7);
  83. INSERT INTO user_category VALUES(2, 1);
  84. INSERT INTO user_category VALUES(1, 7);
  85. INSERT INTO user_category VALUES(8, 8);
  86. INSERT INTO user_category VALUES(8, 7);
  87. INSERT INTO user_category VALUES(5, 7);
  88. INSERT INTO user_category VALUES(5, 3);
  89. INSERT INTO user_category VALUES(2, 6);
  90. INSERT INTO user_category VALUES(7, 1);
  91. INSERT INTO user_category VALUES(7, 2);
  92. INSERT INTO user_category VALUES(7, 3);
  93. INSERT INTO emp VALUES(NULL, '郭靖', '男', '2002-2-3', 2500, '东大街');
  94. INSERT INTO emp VALUES(NULL, '黄蓉', '女', '2003-12-3', 5500, '东大街');
  95. INSERT INTO emp VALUES(NULL, '杨幂', '女', '2002-2-8', 8500, '西大街');
  96. INSERT INTO emp VALUES(NULL, '刘诗诗', '女', '2004-4-12', 6500, '南大街');
  97. INSERT INTO sal_grade VALUES(NULL, 1000, 2000);
  98. INSERT INTO sal_grade VALUES(NULL, 2001, 4000);
  99. INSERT INTO sal_grade VALUES(NULL, 4001, 5000);
  100. INSERT INTO sal_grade VALUES(NULL, 5001, 7000);
  101. INSERT INTO sal_grade VALUES(NULL, 7001, 9000);
  102. INSERT INTO orders VALUES(1, 2, 10, 1, '2016-11-11');
  103. INSERT INTO orders VALUES(2, 3, 8, 2, '2016-2-21');
  104. INSERT INTO orders VALUES(3, 7, 10, 1, '2016-3-21');
  105. INSERT INTO orders VALUES(1, 1, 7, 1, '2016-10-15');
  106. INSERT INTO orders VALUES(1, 8, 3, 1, '2016-2-17');
  107. INSERT INTO orders VALUES(1, 7, 1, 1, '2016-5-18');
  108. INSERT INTO orders VALUES(4, 1, 1, 1, '2016-5-7');
  109. INSERT INTO orders VALUES(4, 2, 1, 1, '2016-5-9');
  110. INSERT INTO orders VALUES(4, 3, 1, 1, '2016-11-10');
  111. INSERT INTO orders VALUES(3, 5, 10, 1, '2016-5-11');
  112. INSERT INTO orders VALUES(2, 1, 1, 1, '2016-7-12');
  113. INSERT INTO orders VALUES(2, 1, 1, 2, '2016-7-13');
  114. INSERT INTO orders VALUES(2, 1, 1, 3, '2016-7-14');
  115. INSERT INTO orders VALUES(2, 1, 9, 5, '2016-8-19');
  116. INSERT INTO orders VALUES(2, 1, 8, 3, '2016-8-4');
  117. INSERT INTO orders VALUES(2, 2, 5, 1, '2016-8-6');
  118. INSERT INTO orders VALUES(2, 2, 6, 1, '2016-1-22');
  119. INSERT INTO orders VALUES(2, 2, 1, 1, '2016-1-11');
  120. INSERT INTO orders VALUES(2, 6, 3, 1, '2016-2-17');
  121. INSERT INTO orders VALUES(2, 6, 8, 2, '2016-3-12');

下面为本人所用数据库版本

1.建立数据库和数据表

 category表:

 emp表:

 film表:

 order表:

 sal_grade表:

 sal_grade_copy表:

user表:

 user_category表:

2.查询价格比2号类型所有电影平均价还低的电影

语句:

  1. #查询价格比2号类型所有电影平均价还低的电影
  2. select fname,price from film where price<(select avg(price) from film where cid=2);

运行结果:

3.查询张学友喜欢的类型中所有电影的最高价

语句:
 

  1. #3.查询张学友喜欢的类型中所有电影的最高价
  2. select uname,max(price) from film
  3. join category on film.cid=category.cid
  4. join user_category on category.cid=user_category.cid
  5. join `user` on `user`.uid=user_category.uid
  6. where `user`.uname='张学友' ;

运行结果:

4.查询所有电影,以及电影对应的类型名,要求显示出所有类型名

语句:

  1. #4.查询所有电影,以及电影对应的类型名,要求显示出所有类型名
  2. SELECT fname,cname from film
  3. join category on category.cid=film.cid;

运行结果:

5.查询价格大于天下无贼的电影中,每部类型各多少电影

语句:

  1. #5.查询价格大于天下无贼的电影中,每部类型各多少电影
  2. select category.cname ,count(category.cid) from film
  3. join category on film.cid=category.cid
  4. WHERE price>(select price from film where film.fname='天下无贼')
  5. GROUP BY category.cid
  6. ;

运行结果:

6.查询那些员工给那些会员卖了哪些电影

语句:

  1. #6.查询那些员工给那些会员卖了哪些电影
  2. select ename as '员工姓名',uname as '会员', fname as '电影名', num as '数量' from orders
  3. join emp on emp.eid=orders.eid
  4. join film on film.fid=orders.fid
  5. join `user` on `user`.uid=orders.uid;

结果:

7.查询有回头客的员工
 

语句:

  1. #7.查询有回头客的员工
  2. select ename as '有回头客的员工姓名' ,uname as '回头客姓名',count(orders.uid)from orders
  3. join emp on emp.eid=orders.eid
  4. join film on film.fid=orders.fid
  5. join `user` on `user`.uid=orders.uid
  6. group by orders.uid,orders.eid
  7. HAVING count(orders.uid)>1 ;

查询结果:

8.查询回头客超过一个的员工(表子查询在mysql中必须起别名,否则报错,orcale中则不需要别名)
 

9.查询价格比所有喜剧类型的平均价还高的电影
 

语句:

  1. #9.查询价格比所有喜剧类型的平均价还高的电影
  2. #查询所有喜剧类型的平均价
  3. select f1.fid,f1.fname,f1.director,f1.price,f1.showtime,c1.cname
  4. from film as f1
  5. join category as c1 on c1.cid=f1.cid
  6. where price>
  7. (SELECT avg(price) from film as f
  8. join category as c on f.cid=c.cid
  9. where c.cname='喜剧');

结果:

 10.查询电影所属类型的平均价(相关子查询)
 

语句:

  1. #10.查询电影所属类型的平均价(相关子查询)
  2. select cname as 电影类型,(select avg(price) from film where film.cid=c1.cid) as 平均价格 from category as c1

结果:

11.查询价格比1号类型所有电影价格都高的电影

语句:

  1. select f1.fid,f1.fname,f1.director,f1.price,f1.showtime,c1.cname
  2. from film as f1
  3. join category as c1 on c1.cid=f1.cid
  4. where price>
  5. (SELECT max(price) from film as f
  6. join category as c on f.cid=c.cid
  7. where c.cid=1);

结果:



12.查询上映日期比天下无贼晚的电影中,每个导演各多少部电影

 语句:

  1. #12.查询上映日期比天下无贼晚的电影中,每个导演各多少部电影
  2. #1.查询天下无贼上映日期
  3. select showtime from film where fname='天下无贼';
  4. #2.查询上映日期比天下无贼晚的电影
  5. select f1.fid,f1.fname,f1.director,f1.price,f1.showtime,c1.cname
  6. from film as f1
  7. join category as c1 on c1.cid=f1.cid
  8. where DATEDIFF(f1.showtime,(select showtime from film where fname='天下无贼'
  9. ))>0;
  10. #3.查询上映日期比天下无贼晚的电影中,每个导演各多少部电影
  11. select r1.director as 导演姓名 ,count(r1.director) as 电影数量 from
  12. (select f1.fid,f1.fname,f1.director,f1.price,f1.showtime,c1.cname
  13. from film as f1
  14. join category as c1 on c1.cid=f1.cid
  15. where DATEDIFF(f1.showtime,(select showtime from film where fname='天下无贼'
  16. ))>0) as r1
  17. GROUP BY r1.director;

1.运行结果: 

2.运行结果:

 3.运行结果:

13.查询哪些用户都喜欢哪些类型

语句:

  1. #13.查询哪些用户都喜欢哪些类型
  2. SELECT uname as 用户名,cname as 喜欢的电影类型 from `user` as u
  3. join user_category as uc on u.uid=uc.uid
  4. join category as c on c.cid=uc.cid;

结果:

14.查询喜欢类型超过2种的用户

语句:

  1. #查询喜欢类型超过2种的用户
  2. SELECT uname from `user` as u
  3. join user_category as uc on u.uid=uc.uid
  4. join category as c on c.cid=uc.cid
  5. GROUP BY u.uid
  6. having count(uc.cid)>2;

运行结果:


 


15.查询从来没有被喜欢过的类型

 语句:

  1. #15.查询从来没有被喜欢过的类型
  2. select cname from
  3. (select cname,uname from category as c1
  4. left join user_category as uc on uc.cid=c1.cid
  5. left join `user` as u on u.uid=uc.uid
  6. GROUP BY uc.uid,uc.cid) as r1
  7. where uname is null;

运行结果:

16.查询喜欢了所有类型的用户

语句即运行结果:

17.查询每个销售人员的销售总额

语句:

  1. #17.查询每个销售人员的销售总额
  2. SELECT ename as 销售人员姓名,sum(num*price) as 销售总额 from emp as e
  3. join orders as o on o.eid=e.eid
  4. join film as f on f.fid=o.fid
  5. GROUP BY o.eid;

运行结果:

18.查询每个电影各被卖出多少张

语句:

  1. #18.查询每个电影各被卖出多少张
  2. select fname as 电影名,sum(num) as 数量
  3. from orders as o
  4. join film as f on f.fid=o.fid
  5. GROUP BY o.fid;

运行结果:

19.查询上映日期比周星驰导演所有电影都晚的电影中,每种类型电影的最低价
 

语句:

  1. #19.查询上映日期比周星驰导演所有电影都晚的电影中,每种类型电影的最低价
  2. #1.查到周星驰导演的所有电影上映时间最晚的。
  3. SELECT showtime from film where director='周星驰' ORDER BY showtime DESC limit 1;
  4. #2.查询上映日期比周星驰导演所有电影都晚的电影
  5. SELECT * from film
  6. where DATEDIFF(showtime,(SELECT showtime from film where director='周星驰' ORDER BY showtime DESC limit 1))>0;
  7. #3.
  8. select fname,min(price),cname from (SELECT * from film
  9. where DATEDIFF(showtime,(SELECT showtime from film where director='周星驰' ORDER BY showtime DESC limit 1))>0)
  10. as r2 join category as c1 on c1.cid=r2.cid
  11. GROUP BY r2.cid;

1.运行结果:

2.运行结果:

3.运行结果:

20.查询在闰年上映的电影
 

运行结果:

  1. #20查询在闰年上映的电影
  2. #条件
  3. select * from film WHERE
  4. DATEDIFF(CONCAT(year(showtime),'-3-1'),CONCAT(year(showtime),'-2-1'))=29;

运行结果:

21.查询上映日期中,月份比日期大的电影
 

语句:

  1. #21.查询上映日期中,月份比日期大的电影
  2. select * from film where MONTH(showtime)>DAY(showtime);

运行结果:

22.查询价格与类型都与‘天下无贼’相同的电影

语句:

  1. # 22.查询价格与类型都与‘天下无贼’相同的电影
  2. SELECT fname from film as f1 ,(SELECT price,cid from film where fname='天下无贼') as r1
  3. where
  4. r1.price=f1.price AND
  5. r1.cid=f1.cid;

运行结果:


 22.查询最受欢迎的类型
 

语句:

  1. #22.查询最受欢迎的类型
  2. SELECT cname, SUM(num) from orders as o
  3. join film as f on f.fid=o.fid
  4. join category as c on c.cid=f.cid
  5. GROUP BY c.cid
  6. ORDER BY SUM(num) desc
  7. limit 1;

运行结果:

 

23.查询每个用户各花了多少钱

语句:

  1. #23.查询每个用户各花了多少钱
  2. select uname as 用户,sum(price*num) AS 花销 from orders as o join `user` as u on u.uid=o.uid
  3. join film as f on f.fid =o.fid
  4. GROUP BY u.uid;

运行结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/452193
推荐阅读
相关标签
  

闽ICP备14008679号