SQL语句练习附带答案

这篇具有很好参考价值的文章主要介绍了SQL语句练习附带答案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先创建数据库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;

表关系图如下:

SQL语句练习附带答案文章来源地址https://www.toymoban.com/news/detail-457638.html

题目如下:

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;

到了这里,关于SQL语句练习附带答案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL 数据库语句- 创建和管理数据库

    SQL CREATE DATABASE 语句用于创建一个新的 SQL 数据库。 以下 SQL 语句创建了一个名为 \\\"testDB\\\" 的数据库: 通过这个简单的语句,你可以成功地创建一个名为 \\\"testDB\\\" 的数据库。记得在实际应用中,你可能需要添加其他选项,比如指定字符集、校对规则等,以满足具体需求。 SQL DRO

    2024年02月05日
    浏览(76)
  • 利用SQL语句创建、修改、删除、查看与使用数据库

    【技术路线图】 1、连接Mysql服务:mysql -u root -p 2、创建数据库:create database teacherdb; 注意:数据库的名字一旦创建后不可更改。 3、查看刚刚创建好的数据库:show databses; 4、删除数据库并查看是否删除掉:drop database teacherdb; 5、输出创建数据库时的SQL语句信息:show create dat

    2023年04月21日
    浏览(84)
  • 使用SQL语句创建实验数据库(以学生表为例)

     (1) 创建数据库stuexpm create database stuexpm   (2) 创建studentinfo表,显示studentinfo表的基本结构 use stuexpm create table studentInfo ( StudentID varchar(6) not null primary key comment \\\'学号, Name varchar(8) not null comment\\\'姓名‘, Sex varchar(2) not null default \\\'男\\\' comment\\\'性别\\\', Birthday date not null comment\\\'出生日期

    2024年02月07日
    浏览(52)
  • 用MariaDB创建数据库,SQL练习,MarialDB安装和使用

    前言:MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。  Download MariaDB Server - MariaDB.org 注意:安装路径别选C盘 期间

    2024年02月13日
    浏览(38)
  • Linux练习附带答案,用于熟练常用的命令(山东泰安电力学校)

    1.切换到student用户的用户主目录下;在student用户主目录下创建一个临时目录tmp;在临时目录下创建一个文件,文件名为a.txt;将a.txt复制成b.txt;将b.txt改名成 c.txt。 2.在当前目录下建立文件exam.c,将文件exam.c拷贝到/tmp这个目录下,并改名为 shiyan.c。 3. 在任何目录下回到用

    2024年02月04日
    浏览(41)
  • SQLAlchemy 库创建数据库引擎和会话工厂附带SQLSERVER驱动版本确认方式

    SQL Server 驱动版本确认 确认Sql Server版本:CMD执行:sqlcmd -S 服务器名称 -U 用户名 -P 密码 -Q “SELECT @@VERSION” 根据版本确认连接方式 例如 Sql Server版本:Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 连接方式:‘mssql+pyodbc://user:pass@host:port/database?driver=SQL+Server+Native+Client+10.0’ SQL

    2024年02月09日
    浏览(53)
  • 数据库SQL语句使用

    -- 查询所有数据库 -- 创建数据库,数据库名为mydatabase   -- 如果没有名为 mydatabase的数据库则创建,有就不创建   -- 如果没有名为 mydatabase的数据库则创建,有就不创建,数据库字符编码设置为utf8mb4 -- 使用数据库 -- 删除名为mydatabase的数据库 -- 如果有名为 mydatabase的数据库则

    2024年02月12日
    浏览(45)
  • 数据库作业-sql语句查询

    建表的插入数据的表 数据库作业-sql建表和插入数据_快乐的xiao何的博客-CSDN博客 create table supplier( supplierno char(6) primary key, suppliername nvarchar(10), address nvarchar(20), number char(11) )create table category( categoryno char(5) primary key, categoryname varchar(20), descriptions text... https://blog.csdn.net/m0_539670

    2023年04月23日
    浏览(54)
  • 数据库基础——数据库、数据表和SQL语句

    数据库是用来存储、管理数据的仓库 数据表是数据的存储结构 Structured Query Language,结构化查询语言,用来操作数据库 安装MySQL,自行百度 进入cmd使用命令 mysql -hAddress -uUser -p(Password) 登录数据库 -p后直接回车可进入密文登录 如果出现以下报错,则打开任务管理器-服务-开启

    2024年02月09日
    浏览(72)
  • 用SQL语句操作Oracle数据库——数据更新

    数据库中的数据更新操作有3种:1)向表中添加若干行数据(增);2)删除表中的若干行数据(删);3)修改表中的数据(改)。对于这3种操作,SQL语言中有3种相应的语句与之对应。接下来让我们逐一详细地了解一下。 本文我们依然使用以下三个表来进行数据更新操作:

    2024年01月19日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包