数据库MySQL经典面试题之SQL语句
学生表
CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT,`student_name` varchar(255) DEFAULT NULL,`age` datetime DEFAULT NULL,`sex` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
教师表
CREATE TABLE `teacher` (`id` int(11) NOT NULL AUTO_INCREMENT,`teacher_name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
课程表
CREATE TABLE `course` (`id` int(11) NOT NULL AUTO_INCREMENT,`course_name` varchar(255) DEFAULT NULL,`teacher_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
分数表
CREATE TABLE `score` (`id` int(11) NOT NULL AUTO_INCREMENT,`student_id` int(11) DEFAULT NULL,`course_id` int(11) DEFAULT NULL,`score` decimal(18,1) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;
插入数据
INSERT INTO `course`(`id`, `course_name`, `teacher_id`) VALUES (1, '语文', 2);
INSERT INTO `course`(`id`, `course_name`, `teacher_id`) VALUES (2, '数学', 1);
INSERT INTO `course`(`id`, `course_name`, `teacher_id`) VALUES (3, '英语', 3);INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (1, 1, 1, 80.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (2, 1, 2, 90.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (3, 1, 3, 99.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (4, 2, 1, 70.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (5, 2, 2, 60.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (6, 2, 3, 80.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (7, 3, 1, 80.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (8, 3, 2, 80.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (9, 3, 3, 80.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (10, 4, 1, 50.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (11, 4, 2, 30.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (12, 4, 3, 20.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (13, 5, 1, 76.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (14, 5, 2, 87.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (15, 6, 1, 31.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (16, 6, 3, 34.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (17, 7, 2, 89.0);
INSERT INTO `score`(`id`, `student_id`, `course_id`, `score`) VALUES (18, 7, 3, 98.0);INSERT INTO `student`(`id`, `student_name`, `age`, `sex`) VALUES (1, '赵雷', '1990-01-01 00:00:00', '男');
INSERT INTO `student`(`id`, `student_name`, `age`, `sex`) VALUES (2, '钱电', '1990-12-21 00:00:00', '男');
INSERT INTO `student`(`id`, `student_name`, `age`, `sex`) VALUES (3, '孙风', '1990-05-20 00:00:00', '男');
INSERT INTO `student`(`id`, `student_name`, `age`, `sex`) VALUES (4, '李云', '1990-08-06 00:00:00', '男');
INSERT INTO `student`(`id`, `student_name`, `age`, `sex`) VALUES (5, '周梅', '1991-12-01 00:00:00', '女');
INSERT INTO `student`(`id`, `student_name`, `age`, `sex`) VALUES (6, '吴兰', '1992-03-01 00:00:00', '女');
INSERT INTO `student`(`id`, `student_name`, `age`, `sex`) VALUES (7, '郑竹', '1989-07-01 00:00:00', '女');
INSERT INTO `student`(`id`, `student_name`, `age`, `sex`) VALUES (8, '王菊', '1990-01-20 00:00:00', '女');INSERT INTO `teacher`(`id`, `teacher_name`) VALUES (1, '张三');
INSERT INTO `teacher`(`id`, `teacher_name`) VALUES (2, '李四');
INSERT INTO `teacher`(`id`, `teacher_name`) VALUES (3, '王五');
sql语句面试题
1、查询语文比数学成绩高的学生的信息及课程分数
SELECTt1.student_id,t1.score 语文,t2.score 数学
FROM(SELECTsc.*,c.course_name FROMscore scINNER JOIN course c WHEREsc.course_id = c.id AND c.course_name = '语文' ) t1,(SELECTsc.*,c.course_name FROMscore scINNER JOIN course c WHEREsc.course_id = c.id AND c.course_name = '数学' ) t2
WHEREt1.score > t2.score
2、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
SELECTsc.student_id,s.student_name,avg( sc.score )
FROMscore scINNER JOIN student s
WHEREsc.student_id = s.id
GROUP BYstudent_id
HAVINGavg( sc.score )> 60
3、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
SELECTs.id,s.student_name,count( sc.course_id ) 选课总数,SUM( sc.score ) 总成绩
FROMstudent s,score sc
WHEREs.id = sc.student_id
GROUP BYsc.student_id
4、查询"李"姓老师的数量
SELECTcount(*)
FROMteacher
WHEREteacher_name LIKE '李%'
5、 查询学过"张三"老师授课的同学的信息
SELECTs.*
FROM
teacher t
INNER JOIN course cON t.id=c.teacher_idINNER JOIN score sc onsc.course_id=c.idINNER JOIN student sON s.id=sc.student_idWHEREt.teacher_name="张三"
6、查询学过编号为"1"并且也学过编号为"2"的课程的同学的信息
SELECT*
FROMstudent
WHEREid IN ( SELECT student_id FROM `score` WHERE course_id = 1 ) AND id IN (SELECTstudent_id FROM`score`
WHEREcourse_id = 2)
7、查询没有学全所有课程的同学的信息
SELECT * FROM student WHERE id IN ( SELECT student_id FROM score GROUP BY student_id HAVING COUNT( course_id )<( SELECT COUNT(*) FROM course )
)
8、查询至少有一门课与学号为"1"的同学所学相同的同学的信息
SELECTDISTINCT s.*
FROMscore sc,student s
WHEREsc.course_id IN ( SELECT course_id FROM score WHERE student_id = 1 ) AND student_id != 1 AND s.id = sc.student_id
9、查询和"1"号的同学学习的课程完全相同的其他同学的信息
把其他学生选课信息拼成字符串
SELECTsc.student_id , GROUP_CONCAT( course_id ORDER BY course_id ASC )FROMscore sc GROUP BYstudent_id
和把学生1选课信息拼成字符串进行比较,得到结果。
SELECT*
FROMstudent
WHEREid IN (SELECTsc.student_id FROMscore sc WHEREstudent_id != 1 GROUP BYstudent_id HAVINGGROUP_CONCAT( course_id ORDER BY course_id ASC )=(SELECTGROUP_CONCAT( course_id ORDER BY course_id ASC ) FROMscore sc WHEREstudent_id = 1 ))
10、查询没学过"张三"老师讲授的任一门课程的学生姓名
SELECT*
FROMstudent
WHEREid NOT IN (SELECT DISTINCTsc.student_id FROMteacher tINNER JOIN course c ON t.id = c.teacher_idINNER JOIN score sc ON c.id = sc.course_id WHEREt.teacher_name = '张三' )
11、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
SELECTs.id,s.student_name,t.avgScore
FROMstudent s,( SELECT COUNT( course_id ), student_id, AVG( score ) avgScore FROM score sc WHERE sc.score < 60 GROUP BY student_id ) t
WHEREs.id = t.student_id
12、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
SELECTsc.student_id,SUM( CASE sc.course_id WHEN 1 THEN sc.score ELSE 0 END ) 语文,SUM( CASE sc.course_id WHEN 2 THEN sc.score ELSE 0 END ) 数学,SUM( CASE sc.course_id WHEN 3 THEN sc.score ELSE 0 END ) 英语,AVG( sc.score ) 平均成绩
FROMscore sc
GROUP BYsc.student_id
ORDER BY平均成绩 DESC
13、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
及格为>=60,
中等为:70-80,
优良为:80-90,
优秀为:>=90
先把学生每科成绩进行划分等级
SELECTsc.*,( CASE WHEN sc.score >= 60 AND sc.score < 70 THEN 1 ELSE 0 END ) pass,( CASE WHEN sc.score >= 70 AND sc.score < 80 THEN 1 ELSE 0 END ) mid,( CASE WHEN sc.score >= 80 AND sc.score < 90 THEN 1 ELSE 0 END ) good,( CASE WHEN sc.score >= 90 THEN 1 ELSE 0 END ) exellent
FROMscore sc
ORDER BYsc.student_id,course_id
按课目求出学生的最高最低分
SELECTsc.course_id,c.course_name,MAX( sc.score ) 最高分,MIN( sc.score ) 最低分
FROMscore scINNER JOIN course c ON sc.course_id = c.id
GROUP BYsc.course_id
合起来
5.7及以上由于sql_mode默认开启ONLY_FULLY_GROUP_BY会报错
1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.sc.course_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SELECTsc.course_id,c.course_name,MAX( sc.score ) 最高分,MIN( sc.score ) 最低分,sum( t.pass )* 100 / count( sc.student_id ) 及格率,sum( t.mid )* 100 / count( sc.student_id ) 中等率,sum( t.good )* 100 / count( sc.student_id ) 优良率,sum( t.exellent )* 100 / count( sc.student_id ) 优秀率
FROMscore scINNER JOIN course c ON sc.course_id = c.idINNER JOIN (SELECTsc.course_id,sc.id,( CASE WHEN sc.score >= 60 AND sc.score < 70 THEN 1 ELSE 0 END ) pass,( CASE WHEN sc.score >= 70 AND sc.score < 80 THEN 1 ELSE 0 END ) mid,( CASE WHEN sc.score >= 80 AND sc.score < 90 THEN 1 ELSE 0 END ) good,( CASE WHEN sc.score >= 90 THEN 1 ELSE 0 END ) exellent FROMscore sc ORDER BYsc.student_id,course_id ) t ON t.id = sc.id
GROUP BYt.course_id
如果开启了ONLY_FULLY_GROUP_BY 将id相等转换成 student_id 和course_id相等
SELECTsc.course_id,c.course_name,MAX( sc.score ) 最高分,MIN( sc.score ) 最低分,sum( t.pass )* 100 / count( sc.student_id ) 及格率,sum( t.mid )* 100 / count( sc.student_id ) 中等率,sum( t.good )* 100 / count( sc.student_id ) 优良率,sum( t.exellent )* 100 / count( sc.student_id ) 优秀率
FROMscore scINNER JOIN course c ON sc.course_id = c.idINNER JOIN (SELECTsc.course_id,sc.id,sc.student_id,( CASE WHEN sc.score >= 60 AND sc.score < 70 THEN 1 ELSE 0 END ) pass,( CASE WHEN sc.score >= 70 AND sc.score < 80 THEN 1 ELSE 0 END ) mid,( CASE WHEN sc.score >= 80 AND sc.score < 90 THEN 1 ELSE 0 END ) good,( CASE WHEN sc.score >= 90 THEN 1 ELSE 0 END ) exellent FROMscore sc ORDER BYsc.student_id,course_id ) t ON t.course_id = sc.course_id AND t.student_id=sc.student_idGROUP BYt.course_id
14、查询学生的科目1的成绩并进行排名
SELECTstudent_id,score,(@rowNum := @rowNum + 1 ) rowNum,@rowinc :=
CASEWHEN @rowTotal = score THEN@rowinc WHEN @rowTotal := score THEN@rowNum END AS rank
FROMscore,(SELECT@rowNum := 0,@rowTotal := NULL,@rowinc := 0 ) t
WHEREcourse_id =1
ORDER BYscore DESC
SELECTsc.score,(SELECTCOUNT( s.score )+ 1 FROMscore s WHEREs.score > sc.score AND s.course_id = 1 ) rank
FROMscore sc
WHEREsc.course_id = 1
ORDER BYsc.score DESC;
15、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩
16、查询各科成绩前三名的记录
数据库MySQL经典面试题之SQL语句相关推荐
- mysql面试题sql语句_数据库MySQL经典面试题之SQL语句
数据库MySQL经典面试题之SQL语句 1.需要数据库表1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex ...
- 数据库MySQL总结(一)SQL语句
目录 一.一些命令 二.SQL结构化查询语言 1.DDL 数据库定义语言 针对结构(库.表)的增删改查 create drop alter show 有关库的增删改查 (1)创建库 (2) ...
- MySQL经典面试题--SQL语句
备注:建立下面的每一个题目对应的表,插入案例数据,然后执行需要的 SQL ,将结果复制到 word 文件中 MYSQL经典面试题,后面有建表过程和SQL执行语句 有道云连接 https://note ...
- 如何在mysql查找效率慢的SQL语句
如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启 ...
- mysql命令书写顺序_MySQL SQL语句书写顺序和执行顺序
SQL语句书写顺序和执行顺序 (7) SELECT (8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9 ...
- 会mysql不会sql_不是吧,不会有人还不知道MySQL中具实用的SQL语句
原标题:不是吧,不会有人还不知道MySQL中具实用的SQL语句 目录 实用的SQL 1.插入或替换 2.插入或更新 3.插入或忽略 4.SQL中的if-else判断语句 5.指定数据快照或备份 6.写 ...
- 使用Shell对MySQL指定的库进行SQL语句批量插入操作
需求: 某环境MySQL数据库中有1000个以yz_xxx开头命名的库,要求:在所有以yz_xxx开头命名的库中插入指定的SQL语句. 解决一: 使用Navicat Mysql工具连接到MyS ...
- 详解MySQL的逻辑架构和SQL语句执行流程
文章目录 1. 逻辑架构 1.1 连接层 1.2 服务层 1.3 引擎层 1.3.1 InnoDB 存储引擎 1.3.2 MyISAM 存储引擎 1.3.3 其他存储引擎 1.4 存储层 3. SQL ...
- SQLSERVER数据库、表的创建及SQL语句命令
SQLSERVER数据库.表的创建及SQL语句命令 备份,还原,创建,删除,查询,修改 ** 数据库定义及操作命令:** 按照数据结构来组织.存储和管理数据的仓库.由表.关系以及操作对象组成,把数据存 ...
最新文章
- Request Connection: Remote Server @ 192.229.145.200:80
- Perl Nmap报告处理摸索(学习)
- 小心多任务设计被滥用
- linux mint 18支持安卓编译,Linux mint 18版本开启SSH服务
- 转 C#对多个集合和数组的操作(合并,去重,判断)
- Python学习之路—初识Python
- Linux 安装 MySQL 数据库
- MyBatis学习总结(20)——MyBatis完全使用指南
- 读书-算法《程序设计导引及在线实践》-简单计算题3:校门外的树
- python输入整数反转输出_Python反转输出正整数
- Latex语法学习05:代码表格的制作
- Intellij创建自己的TODO
- 踱步狼注释移除,状态机算法更新2019.10.16
- 纸飞机html,纸飞机.html
- Linux与数据库简要说明
- 浮点数定化--altera 乘除法ip使用FPGA学习笔记
- 弘辽科技:如何提高客单价
- 浅谈Facade外观模式
- iOS Airplay Screen Mirroring 投屏技术详解
- 新手小白一行代码快速生成HTML代码块
热门文章
- 4.1 使用常见的各种字体属性 [原创Excel教程]
- android 系统下拉菜单,【MotoX评测】原生Android5.0下拉菜单和基础设置_Moto X_手机评测-中关村在线...
- 常见格式浏览器在线预览
- SGMII光模块知识百科
- android系统关机广播,Android开机广播和关机广播
- 【Dubbo实战】基础学习篇(一)
- Bless You Autocorrect!(字典树上建图)
- CPU后面字母究竟是啥?
- 01. Web漏洞靶场的搭建
- 如何开通微信支付和支付宝支付0.2%(千分之二)费率(最全攻略)