MySQL查询练习2
MySQL查询练习2
导读:
本次MySQL的查询语句是本人考试题目;
所有题目都已通过;
该查询练习并没有sql文件进行检查;
如果有书写以及其他错误欢迎指出。
题目正文:
1.找出借书超过5本的借阅信息
找出借书超过5本的借阅信息,输出借书卡号及所借图书数。
BORROW(借书记录)表 :CNO 借书卡号,BNO 书号,RDATE 还书日期
列含义 列名 类型 主键/外键
卡号 Cno Int 主键非空,参照card表的cno
书号 bno Int 主键非空,参照book表的bno
借书日期 rdate Datetime
表名请用小写。
select cno,count(*) from borrow group by cno having count(*)>5;
2.统计各专业的学生人数,要求输出系名,专业名,总人数,按系名排序。
[注意:SQL表名请用小写]表结构如下:
1、student(学生表):sno 学号 CHAR(9)
sname 姓名 CHAR(10)
ssex 性别 CHAR(2)
sage 年龄
SMALLINTjg 籍贯 VARCHAR(50)
zydh 专业代号 CHAR(4)
xdh 系代号 CHAR(2)
2、zy(专业表) zydh 专业代号 CHAR(4)
zymc 专业名称 VARCHAR(20)
xz 学制 SMALLINT
3、xb(系表) xdh 系代号 CHAR(2)
xmc 系名称 VARCHAR(20)
select xmc,zymc,count(*) from student s,xb,zy where s.zydh=zy.zydh
and s.xdh=xb.xdh group by xmc,zymc order by xb.xmc;
3.SQL查询:查询各个部门人数大于10人的,输出部门编号和人数,并按人数升序排序。
表结构如下:

select dept_id,COUNT(employee_id) as number from employee group by dept_id HAVING number>=10 order by number;
4.查询选修未通过2门(包括2门)以上的学生的信息,输出学号、姓名、选修未通过门数,按门数降序排序,若门数相同,按学号升序排序。
[注意:SQL表名请用小写]

SELECT student.sno,sname,count(*)
from student,sc
where student.sno=sc.sno
and grade<60
GROUP by sno
HAVING count(*)>=2
ORDER BY count(*) desc ,sno ;
5.查询每个学生高于他自己选修平均分的那门课程的成绩,输出学号,课程号,课程成绩,他所有课程的平均分(取整),并按学号升序排列。
[注意:SQL表名请用小写]
学生数据库db_student包括三个数据表student(学生表)、course(课程表)和sc(选课表)。表结构如下:
1、student(学生表):
SNO学号CHAR(7)
SNAME姓名CHAR(10)
SSEX性别CHAR(2)
SAGE年龄SMALLINT
SDEPT所在系 VARCHAR(20)
2、course(课程表)
CNO课程号CHAR(10)
CNAME课程名VARCHAR(20)
CCREDIT学分SMALLINT
SEMSTER学期SMALLINT
PERIOD学时SMALLINT
3、sc(选课表)
SNO 学号CHAR(7)
CNO 课程号CHAR(10)
GRADE 成绩 SMALLINT
SELECT sc.sno,cno,grade,avggrade
FROM sc,(SELECT sno,ROUND(AVG(grade)) AS avggrade FROM sc GROUP BY sno) AS avg_sc
WHERE sc.sno=avg_sc.sno AND sc.grade>avg_sc.avggrade
ORDER BY sc.sno;
6.SQL查询:查询哪些客户从未有订单,输出客户编号和客户名称。
表结构如下:【注意order表,语句中写order】


SELECT customer_id,customer_name
FROM customer
WHERE customer_id NOT IN(SELECT customer_id FROM `order`);
7.找出至今没有人选修过的课程
有课程表,学生表,成绩表如下,找出至今没有人选修过的课程号、课程名称。
course
| 列名 | 数据类型 | 约束 | 说明 |
|---|---|---|---|
| cno | char(4) | 主键非空 | 课程号 |
| cname | varchar(40) | 非空 | 课程名 |
| cpno | char(4) | 参照course(cno) | 先修课 |
| ccredit | tinyint | 学分 |
student
| 列名 | 数据类型 | 约束 | 说明 |
|---|---|---|---|
| sno | char(7) | 主键非空 | 学号 |
| sname | char(10) | 非空 | 学生姓名 |
| ssex | enum('男','女') | 默认‘男’ | 性别 |
| sage | tinyint | 年龄 | |
| sdept | char(20) | 默认'计算机系' | 系别 |
sc
| 列名 | 数据类型 | 约束 | 说明 |
|---|---|---|---|
| sno | char(7) | 主键非空,参照student(sno) | 学号 |
| cno | char(4) | 主键非空,参照course(cno) | 课程号 |
| grade | decimal(5,1) | 成绩 | |
| ccredit | tinyint |
select cno AS 课程号,cname AS 课程名
FROM course
WHERE cno NOT IN(SELECT DISTINCT sc.cno FROM sc);
8.查询同时选修了c01,c02,c03课程学生,输出学号,姓名
[注意:SQL表名请用小写]

select distinct student.sno, sname
from student,sc
where student.sno = sc.sno
and student.sno in
(
select sno
from sc
where cno = 'c01'
and sno in
(
select sno
from sc
where cno = 'c02'
and sno in
(
select sno
from sc
where cno = 'c03'
)
)
) ;
9.查询选课门数最多的学生的学号和姓名
有课程表,学生表,成绩表如下,查询选课门数最多的学生的学号和姓名,结果可能不只一行。
course
| 列名 | 数据类型 | 约束 | 说明 |
|---|---|---|---|
| cno | char(4) | 主键非空 | 课程号 |
| cname | varchar(40) | 非空 | 课程名 |
| cpno | char(4) | 参照course(cno) | 先修课 |
| ccredit | tinyint | 学分 |
student
| 列名 | 数据类型 | 约束 | 说明 |
|---|---|---|---|
| sno | char(7) | 主键非空 | 学号 |
| sname | char(10) | 非空 | 学生姓名 |
| ssex | enum('男','女') | 默认‘男’ | 性别 |
| sage | tinyint | 年龄 | |
| sdept | char(20) | 默认'计算机系' | 系别 |
sc
| 列名 | 数据类型 | 约束 | 说明 |
|---|---|---|---|
| sno | char(7) | 主键非空,参照student(sno) | 学号 |
| cno | char(4) | 主键非空,参照course(cno) | 课程号 |
| grade | decimal(5,1) | 成绩 | |
| ccredit | tinyint |
select student.sno,sname from sc,student where sc.sno=student.sno group by sno having (count(cno)>=all(select count(cno) from sc group by sno));
10 .查询统计产品“17”的每单平均订购数,和订单总数
个人看来该语句有些歧义,表示不是很清楚;
表结构如下:

SELECT product_id, AVG(buy_number), COUNT(*)
FROM order_detail
WHERE product_id = 17;
11.输出“高等数学”课程成绩前2名的学生的学号,姓名,系名
[注意:SQL表名请用小写]
学生数据库db_student包括三个数据表student(学生表)、course(课程表)和sc(选课表)。表结构如下:
1、student(学生表):
SNO学号CHAR(7)
SNAME姓名CHAR(10)
SSEX性别CHAR(2)
SAGE年龄SMALLINT
SDEPT所在系 VARCHAR(20)
2、course(课程表)
CNO课程号CHAR(10)
CNAME课程名VARCHAR(20)
CCREDIT学分SMALLINT
SEMSTER学期SMALLINT
PERIOD学时SMALLINT
3、sc(选课表)
SNO 学号CHAR(7)
CNO 课程号CHAR(10)
GRADE 成绩 SMALLINT
SELECT s.sno,sname,sdept from student s,sc,course c WHERE s.sno=sc.sno and sc.cno=c.cno AND cname='高等数学'
ORDER BY grade DESC LIMIT 2;
12.查询2015年的借阅信息,输出读者卡号、书号及借书日期。
borrow(借书记录)表 :cno 借书卡号,bno 书号,rdate 还书日期

select cno,bno,rdate from borrow
where year(rdate)=2015;
13.SQL查询:查询人员信息:包括员工和客户
查询人员信息:包括员工和客户。(员工数据在前)
输出“id”、“name”、“type”,若为员工,type为“员工”,若为客户,type为“客户”。
员工表:employee

客户表:customer

查询输出形式如下:

SELECT employee_id AS id,employee_name AS 'name','员工'type
FROM employee
UNION
SELECT customer_id AS id,customer_name AS 'name','客户'type
FROM customer;
14.查询书名包括"网络"关键词的图书信息
查询书名包括"网络"关键词的图书信息,输出书号、书名、作者。
表结构如下:
book(图书) 表:bno 书号,bname 书名,author 作者,price 单价,quantity 库存数

select bno,bname,author from book
where bname like '%网络%';
15.成绩表包括如下列(学号,课程代号,成绩,教师工号),查询查询选课的学生总数。

SELECT count(DISTINCT xh) from cj;
16.查询选修通过门数超过3门,且平均分在70以上的学生成绩信息
查询选修通过门数超过3门,且平均分在70以上的学生的学号,选修门数,平均成绩,并按平均成绩从高到低排序。
成绩表包括如下列(学号,课程代号,成绩,教师工号),表结构定义如下:

select xh,count(*),avg(cj) from cj where cj>60 group by xh
having count(*)>3 and avg(cj)>70 order by 3 desc;
17.统计各门课程选修人数,要求输出课程代号,课程名,有成绩人数(grade不为NULL),最高分,最低分,平均分(取整round函数),按课程号排序。
[注意:SQL表名请用小写]
学生数据库db_student包括三个数据表student(学生表)、course(课程表)和sc(选课表)。表结构如下:
1、student(学生表):
SNO学号CHAR(7)
SNAME姓名CHAR(10)
SSEX性别CHAR(2)
SAGE年龄SMALLINT
SDEPT所在系 VARCHAR(20)
2、course(课程表)
CNO课程号CHAR(10)
CNAME课程名VARCHAR(20)
CCREDIT学分SMALLINT
SEMSTER学期SMALLINT
PERIOD学时SMALLINT
3、sc(选课表)
SNO 学号CHAR(7)
CNO 课程号CHAR(10)
GRADE 成绩 SMALLINT
select sc.cno,cname,count(grade),max(grade),min(grade),round(avg(grade))
from sc,course
where sc.cno=course.cno
group by cno
order by cno;
18.查询输出平均成绩在2-5名的学生,输出学号、姓名和平均成绩(取整),平均成绩降序。【不用考虑空值】
[注意:SQL表名请用小写]
学生数据库db_student包括三个数据表student(学生表)、course(课程表)和sc(选课表)。表结构如下:
1、student(学生表):
SNO学号CHAR(7)
SNAME姓名CHAR(10)
SSEX性别CHAR(2)
SAGE年龄SMALLINT
SDEPT所在系 VARCHAR(20)
2、course(课程表)
CNO课程号CHAR(10)
CNAME课程名VARCHAR(20)
CCREDIT学分SMALLINT
SEMSTER学期SMALLINT
PERIOD学时SMALLINT
3、sc(选课表)
SNO 学号CHAR(7)
CNO 课程号CHAR(10)
GRADE 成绩 SMALLINT
select sc.sno,sname,round(avg(grade))
from student,course,sc
where student.sno=sc.sno and course.cno=sc.cno
group by sc.sno
order by round(avg(grade)) desc
limit 1,4;
19.SQL查询:查询统计2016年订单客户总数
表结构如下:[注意表名请写order]

SELECT COUNT(DISTINCT customer_id) from `order` WHERE order_date LIKE '%2016%';
20.查询借阅信息,要求输出卡号,姓名,借阅书数,书名列表(按书名升序排列,用下划线_分隔),按照卡号升序排序。
表结构如下:
card(借书卡) 表:cno 卡号,name 姓名,class 班级

book(图书) 表:bno 书号,bname 书名,author 作者,price 单价,quantity 库存数

borrow(借书记录)表 :cno 借书卡号,bno 书号,rdate 还书日期

select card.cno,name,count(*),
GROUP_CONCAT(bname order by bname separator '_')
from card,borrow,book
where card.cno=borrow.cno and borrow.bno=book.bno
group by card.cno
order by card.cno;
结束:
上述题目的解不是唯一,例题中的解是我所理解并运行成功的,如果有不对的地方,欢迎指出。
后面还会有数据更新部分的练习题;
MySQL查询练习第一部分:https://www.cnblogs.com/xbhog/p/13971373.html
感谢各位看到最后!
MySQL查询练习2的更多相关文章
- mysql查询性能优化
mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...
- Mysql查询——深入学习
1.开篇 之前上一篇的随笔基本上是单表的查询,也是mysql查询的一个基本.接下来我们要看看两个表以上的查询如何得到我们想要的结果. 在学习的过程中我们一起进步,成长.有什么写的不对的还望可以指出. ...
- Mysql 查询练习
Mysql 查询练习 ---创建班级表 create table class( cid int auto_increment primary key, caption ) )engine=innodb ...
- mysql 查询去重 distinct
mysql 查询去重 distinct 待完善内容..
- MySQl查询区分大小写的解决办法
通过查询资料发现需要设置collate(校对) . collate规则: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: ca ...
- 【转】mysql查询结果输出到文件
转自:http://www.cnblogs.com/emanlee/p/4233602.html mysql查询结果导出/输出/写入到文件 方法一: 直接执行命令: mysql> select ...
- MySQL查询缓存
MySQL查询缓存 用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析.优化和执行等阶段. 如何检查缓存? MySQL保存结果于缓存中: 把SELECT语句本身做h ...
- mysql 查询数据时按照A-Z顺序排序返回结果集
mysql 查询数据时按照A-Z顺序排序返回结果集 $sql = "SELECT * , ELT( INTERVAL( CONV( HEX( left( name, 1 ) ) , 16, ...
- MySQL查询今天/本周/上周/本月/上个月份的数据
MySQL查询的方式很多,下面为您介绍的MySQL查询实现的是查询本周.上周.本月.上个月份的数据,如果您对MySQL查询方面感兴趣的话,不妨一看. 查询当前今天的数据 SELECT name,sub ...
- [转]向facebook学习,通过协程实现mysql查询的异步化
FROM : 通过协程实现mysql查询的异步化 前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能.由于facebook实现的比较早,他们不得不对php ...
随机推荐
- 直接理解转置卷积(Transposed convolution)的各种情况
使用GAN生成图像必不可少的层就是上采样,其中最常用的就是转置卷积(Transposed Convolution).如果把卷积操作转换为矩阵乘法的形式,转置卷积实际上就是将其中的矩阵进行转置,从而产生 ...
- 03 . Go框架之Gin框架从入门到熟悉(Cookie和Session,数据库操作)
Cookie Cookie是什么 HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出 Cookie就是解决HTTP协议无状态的方案之一,中文是小 ...
- Java_Math类和Random类
Math类 java.lang.Math提供了一系列静态方法用于科学计算, 其方法的参数和返回值类型一般都为double型, 如果需要更加强大的数学运算能力计算高等数学中的相关内容, 可使用apach ...
- Android NurReaderView 阅读器 (字符串-.txt文件)
有些地方还没配置好.2/3天后在更新.... 功能 支持字符串和<.txt>文件 文字自动分各个页面 支持从右到左-(从右边开始的语言.比如维吾尔语哈扎克语...外国的阿拉伯语等) 支持自 ...
- 洛谷日报 & 原来博客(转载)
震惊,新的功能:可以按Ctrl + F 进行关键字查询. \(update\) on 10.26:把这两个月的日报也加入进去了,并且修复了几个错误. 本文会把小编用过的博客和比较好的博客放在这里. 可 ...
- ERP的协议管理的操作与设计--开源软件诞生27
赤龙ERP协议与订单进阶讲解--第27篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/re ...
- Docker UnicodeEncodeError: 'ascii' codec can't encode characters in position
在容器里查询nova服务的时候字符集报错问题留档及处理方法: 1.在容器里执行nova list --all 提示 [root@stack1 region_01]# nova list --all E ...
- Linux7(centOS7)安装jdk/tomcat/docker/mysql
jdk的rpm安装.tomcat的解压缩安装.docker的yum安装.mysql的docker安装 下载地址 1.1.jdk下载地址 https://www.oracle.com/java/tech ...
- Visual Studio2013应用笔记---WinForm事件中的Object sender和EventArgs e参数
Windows程序有一个事件机制.用于处理用户事件. 在WinForm中我们经常需要给控件添加事件.例如给一个Button按钮添加一个Click点击事件.给TextBox文本框添加一个KeyPress ...
- 【JVM第一篇--类加载机制】类加载过程
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.什么是类加载过程 (1).概述 我们编写的类(.java文件)会被编译器(如ja ...