SQL语句练习附带答案

news2024/11/21 1:46:44

首先创建数据库filmclub

DROP DATABASE IF EXISTS filmclub;

CREATE DATABASE filmclub;

USE filmclub;

CREATE TABLE category
(
 cid INT PRIMARY KEY AUTO_INCREMENT,
 cname VARCHAR(20)
)CHARSET=utf8;
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)
)CHARSET=utf8;
CREATE TABLE USER
(
 uid INT PRIMARY KEY AUTO_INCREMENT,
 uname VARCHAR(20),
 birthday DATE,
 gender VARCHAR(10),
 address VARCHAR(20),
 cellphone CHAR(11)
)CHARSET=utf8;
CREATE TABLE user_category
(
  uid INT,
  cid INT,
  FOREIGN KEY(uid) REFERENCES USER(uid),
  FOREIGN KEY(cid) REFERENCES category(cid),
  PRIMARY KEY(uid,cid)
)CHARSET=utf8;

CREATE TABLE emp
(
  eid INT PRIMARY KEY AUTO_INCREMENT,
  ename VARCHAR(20),
  gender VARCHAR(10),
  hiredate DATE,
  sal DECIMAL(10,2),
  address VARCHAR(20)
)CHARSET=utf8;

CREATE TABLE sal_grade
(
  gid INT PRIMARY KEY AUTO_INCREMENT,
  minsal DECIMAL(10,2),
  maxsal DECIMAL(10,2)
)CHARSET=utf8;


CREATE TABLE orders
(
  eid INT,
  uid INT,
  fid INT,
  num INT,
  odate DATE
)CHARSET=utf8;


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.查询电影价格最低不小于100的类型

3.查询所有电影的名字,以及电影对应的类型名

4.查询所有每个员工的销售总额

5.查询所有员工的名字,以及员工的工资级别

6.查询每种类型各有多少部电影

7.查询每个用户多少岁.

8.查询历年来每个月份各多少订单

9.查询2016年每个月的订单数

10.查询每个会员购买过多少种电影(不考虑数量,即使购买了多个相同电影也算作一种)

11.查询每个会员,各买过多少盘DVD

12. 查询价格大于所有电影平均价的电影

13. 查询价格大于‘喜剧’平均价的电影

14. 查询价格大于所属类型平均价的电影

15. 查询有回头客的员工

16. 查询销售额最高的员工

17. 查询回头客最多的员工

18. 查询喜欢的类型,与‘刘德华’完全一样的客户

19. 查询每种类型的最低价

20. 查询每种类型中,价格在前2位的电影

21. 查询不喜欢‘喜剧’类型的用户中,每个住址住多少人

答案如下,仅供参考~

# 1.查询一共有多少部电影
select count(1) as '一共有多少部电影'
from film;

# 2.查询电影价格最低不小于100的类型
select c.cname
from film
         left join category c on c.cid = film.cid
where price >= 100;

# 3.查询所有电影的名字,以及电影对应的类型名
select c.cname, film.fname
from film
         left join category c on c.cid = film.cid;

# 4.查询所有每个员工的销售总额
select t.ename, sum(t.price)
from (select e.ename, f.price * o.num price
      from emp e,
           orders o,
           film f
      where e.eid = o.eid
        and o.fid = f.fid) t
group by t.ename;

# 5.查询所有员工的名字,以及员工的工资级别
SELECT emp.ename, sal_grade.gid
FROM emp
         JOIN sal_grade ON emp.sal BETWEEN sal_grade.minsal AND sal_grade.maxsal;


# 6.查询每种类型各有多少部电影
SELECT category.cname, COUNT(film.fid) AS movie_count
FROM category
         LEFT JOIN film ON category.cid = film.cid
GROUP BY category.cname;
-- 7.查询每个用户多少岁.
select u.uname Name, concat(timestampdiff(year, u.birthday, now()), '周岁') age, now(), curdate()
from user u;

-- 8.查询历年来每个月份各多少订单
SELECT YEAR(odate) AS year, MONTH(odate) AS month, COUNT(*) AS order_count
FROM orders
GROUP BY YEAR(odate), MONTH(odate)
ORDER BY YEAR(odate), MONTH(odate);
-- 9.查询2016年每个月的订单数
SELECT MONTH(odate) AS month, COUNT(*) AS order_count
FROM orders
WHERE YEAR(odate) = 2016
GROUP BY MONTH(odate)
ORDER BY MONTH(odate);

-- 10.查询每个会员,各买过多少种电影(不算数量,如果买1号电影,买了10盘DVD,算1个)
SELECT USER.uid, USER.uname, COUNT(DISTINCT orders.fid) AS movie_count
FROM USER
         JOIN orders ON USER.uid = orders.uid
GROUP BY USER.uid, USER.uname;

-- 11.查询每个会员,各买过多少盘DVD
SELECT USER.uid, USER.uname, SUM(orders.num) AS dvd_count
FROM USER
         JOIN orders ON USER.uid = orders.uid
GROUP BY USER.uid, USER.uname;

-- 12. 查询价格大于所有电影平均价的电影
SELECT *
FROM film
WHERE price > (
    SELECT AVG(price)
    FROM film
);

-- 13. 查询价格大于‘喜剧’平均价的电影
SELECT *
FROM film
WHERE price > (
    SELECT AVG(film.price)
    FROM film
             INNER JOIN category ON film.cid = category.cid
    WHERE category.cname = '喜剧'
);

-- 14. 查询价格大于所属类型平均价的电影
SELECT film.*
FROM film
         JOIN category ON film.cid = category.cid
WHERE film.price > (
    SELECT AVG(film.price)
    FROM film
    WHERE film.cid = category.cid
);
-- 15. 查询有回头客的员工
select distinct e.eid, e.ename
from orders
         left join emp e on orders.eid = e.eid
group by eid, uid
having count(uid) > 1;

-- 16. 查询销售额最高的员工
SELECT emp.eid, emp.ename, SUM(film.price * orders.num) AS total_sales
FROM emp
         JOIN orders ON emp.eid = orders.eid
         JOIN film ON orders.fid = film.fid
GROUP BY emp.eid, emp.ename
ORDER BY total_sales DESC
LIMIT 1;

-- 17. 查询回头客最多的员工
SELECT emp.eid, emp.ename, COUNT(DISTINCT orders.uid) AS num_return_customers
FROM emp
         JOIN orders ON emp.eid = orders.eid
GROUP BY emp.eid, emp.ename
ORDER BY num_return_customers DESC
LIMIT 1;

-- 18. 查询喜欢的类型,与‘刘德华’完全一样的客户
select *
from (select u.uid, u.uname, group_concat(uc.cid order by uc.cid) cid
      from user u,
           user_category uc
      where u.uid = uc.uid

        and u.uname != '刘德华'
      GROUP BY u.uid, u.uname) t1,
     (select group_concat(uc.cid order by uc.cid) cid
      from user u,
           user_category uc
      where u.uid = uc.uid
        and u.uname = '刘德华')
         t2
where t1.cid = t2.cid;


-- 19. 查询每种类型的最低价
SELECT category.cname, MIN(film.price) AS min_price
FROM category
         JOIN film ON category.cid = film.cid
GROUP BY category.cname;

-- 20. 查询每种类型中,价格在前2位的电影
SELECT cname,
       fname,
       price
FROM (SELECT c.cname,
             f.fname,
             f.price,
             ROW_NUMBER() OVER ( PARTITION BY c.cid ORDER BY f.price DESC ) AS row_num
      FROM film f,
           category c
      WHERE f.cid = c.cid) AS result
WHERE row_num <= 2;
-- 21. 查询不喜欢‘喜剧’类型的用户中,每个住址个多少人
SELECT address, COUNT(*) AS person_count
FROM USER
WHERE uid NOT IN (
    SELECT uid
    FROM user_category
    WHERE cid = (
        SELECT cid
        FROM category
        WHERE cname = '喜剧'
    )
)
GROUP BY address;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT和 dalle2 配合生成故事绘本

和 dalle2 配合生成故事绘本 在之前章节中&#xff0c;我们已经尝试过让 ChatGPT 来生成一些故事情节&#xff0c;不管是影视剧还是小说还是游戏都可以。这时候&#xff0c;自然而然的可以联想到&#xff1a;那我们可不可以一步到位&#xff0c;把 ChatGPT 编出来的故事情节&a…

为什么MySQL数据库单表建议最大2KW数据?

文章目录 为什么MySQL数据库单表建议最大2KW数据&#xff1f;一、 Innodb 存储引擎1、数据存储2、数据页的结构 二、 B tree 结构三、 B 树存放数据的行数 为什么MySQL数据库单表建议最大2KW数据&#xff1f; 我们经常会听到一种说法&#xff0c;在MySQL中&#xff0c;数据库单…

Spring Security 中的 CSRF 攻击是什么?如何防止它?

Spring Security 中的 CSRF 攻击是什么&#xff1f;如何防止它&#xff1f; 什么是 CSRF 攻击&#xff1f; CSRF&#xff08;Cross-Site Request Forgery&#xff09;攻击是一种常见的网络安全威胁&#xff0c;也称为“跨站请求伪造”攻击。攻击者可以通过某些手段&#xff0…

SpringBoot整合RabbitMQ及其原理分析

上一篇&#xff1a;RabbitMQ基础知识 1、相关依赖 这里无需指定版本号&#xff0c;让其跟着SpringBoot版本走。本示例使用SpringBoot版本号为2.7.10。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-…

SaaS系统平台,如何兼顾客户的个性化需求?

在当今数字化的商业环境中&#xff0c;SaaS系统已经成为企业运营的重要组成部分之一。 SaaS系统平台的好处是显而易见的&#xff0c;可以将业务流程数字化&#xff0c;从而帮助企业提高效率并节省成本。 但是&#xff0c;由于每个企业的业务都不尽相同&#xff0c;所以在选择Sa…

GuLi商城-前端基础ES6

ES6 ES6全称ECMAScript6.0是JavaScript语言的下一代标准。 ECMAScript是浏览器脚本语言的规范&#xff0c;而我们熟悉的各种js语言&#xff0c;如JavaScript则是规范的具体实 现。 新建一个ES6文件夹&#xff0c;shift!按着不动&#xff0c;回车&#xff0c;可以快速生成模…

图神经网络:(处理点云)PPFNet的实现

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook和有关文献。超链。提取码8848。 文章目录 前言文献阅读代码实操历史遗留问题 前言 本篇文章接上一篇文章…

【LeetCode: 410. 分割数组的最大值 | 暴力递归=>记忆化搜索=>动态规划 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

这七种常见的路由协议,每一个网络工程师都应该知道!

你好&#xff0c;这里是网络技术联盟站。 路由协议是网络中非常重要的一个概念&#xff0c;它负责将数据包从源节点传递到目的节点。路由协议定义了网络中不同路由器之间的通信规则和数据传输方式&#xff0c;以便有效地将数据包从源地址传输到目标地址。在网络领域中&#xf…

基于无人机辅助边缘计算系统的节能卸载策略

源自&#xff1a;《系统工程与电子技术》 作者&#xff1a;余雪勇 朱烨 邱礼翔 朱洪波 摘 要 针对复杂地形中地面基础设施无法有效提供可靠通信和密集算力的问题,首先提出一种基于无人机(unmanned aerial vehicle, UAV)托管计算资源的卸载方案。考虑用户终端的计算需…

提升网站访问性的10个步骤优化

第一步,检查 不允许空,不允许过长,简洁明了。 是第一个可以访问到内容的元素,所以一定要非常重视。当用户切换浏览器Tab标签的时候,一定最先听到 标记的内容。Title一定要能代表当前页面的主题。这里的要求和SEO最佳实践几乎一致。 第二步,提供文字替代方案。 走查网页…

【LeetCode】238. 除自身以外数组的乘积

238. 除自身以外数组的乘积&#xff08;中等&#xff09; 方法一&#xff1a;左右乘积列表 思路 除了 nums[i] 以外各元素的积&#xff0c;就等同于 nums[i] 左边元素的乘积 * 右边元素的乘积&#xff0c;因此&#xff0c;我们可以计算出两个乘积列表 &#xff0c;最后再经过一…

2023-05-23 题目

1、在java中定义一个无参的构造方法的作用&#xff1a; 在java程序执行子类的构造方法之前&#xff0c;如果是没有super()来调用父类的特定的构造方法&#xff0c;则会调用父类中没有参数的构造方法。 如果java中没有定义无参的方法&#xff0c;且没有指定super()方法&#x…

深眸科技探索AI机器视觉技术,助力密封圈缺陷识别检出率达99.8%

密封圈作为一种具有良好性能的密封材料&#xff0c;在工业领域具有极其广泛的应用&#xff0c;在汽车、船舶、管道、家用电器等多行业都能看见它的身影&#xff0c;广阔的市场需求促就密封圈产业的蓬勃发展。 密封圈属于大批量生产&#xff0c;在生产过程中难免会出现瑕疵品&a…

zabbix监控系统

一、Zabbix概述 1、使用zabbix的原因 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态。 利用一个优秀的监控软件&#xff0c;我们可以: ●通过一个友好的界面进…

vue 3.0使用 iframe 标签引入本地HTML页面,并实现数据交互

文章目录 1. 问题总结2. vue中引入html页面3. vue向html传递数据4. html向vue传递数据 1. 问题总结 最近在做vue的项目时候&#xff0c;需要引入本地html页面&#xff0c;中间遇到了很多问题&#xff0c;费时又费力&#xff0c;因此记录下来&#xff0c;以备不时之需&#xff…

顺序表 ArrayList

目录 1. 概念 2. ArrayList集合框架图 3.ArrayList常见的方法 4. 自己实现ArrayList&#xff08;Integer&#xff09; 4.1 ArrayList构造 4.2 ArrayList容量的扩容 4.3 判断空满 4.4 pos坐标是否合法&#xff08;含有&#xff09; 4.5 ArrayList的增删元素 4.6 包含元…

操作系统原理 —— 死锁的概念(十七)

什么是死锁 什么是死锁&#xff0c;如果你是个程序员&#xff0c;那么这概念肯定是不陌生的&#xff0c;死锁通常是指&#xff0c;在并发环境下&#xff0c;各个进程因竞争资源而造成一种相互等待的现象&#xff0c;导致的结果就是各个进程都处于阻塞状态&#xff0c;无法往下…

老司机解读香农定理、奈奎斯特定理、编码与调制

工程师都会考虑一个问题&#xff1a;信道上到底可以传输多大的数据&#xff0c;或者指定的信道上的极限传输率是多少。这就是信道容量的问题。例如&#xff0c;在xDSL系统中&#xff0c;我们使用的传输介质是仅有几兆带宽的电话线&#xff0c;而上面要传送几兆、十几兆甚至几十…

cuda编程学习——基础知识介绍!干货向(三)

本文主要内容为介绍CUDA编程前的一些基础知识 参考资料&#xff1a; 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 文章、讲解视频同步更新公众《AI知识物语》&#xff0c;B站&#xff1a;出门吃三碗饭 1&#xff1a;并行计算 并行程序可以分为 指令并行&#xff1…