Mysql整理二 - 常见查询语句面试题(附原表)

这篇具有很好参考价值的文章主要介绍了Mysql整理二 - 常见查询语句面试题(附原表)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

表结构,创建原表的代码在最后

-- cid课程id; tid老师id; sid学生id;
select * from t_mysql_course;
select * from t_mysql_score;
select * from t_mysql_student;
select * from t_mysql_teacher;
1. 查询" 01 “课程比” 02 "课程成绩高的学生的信息及课程分数
-- 查询" 01 “课程比” 02 "课程成绩高的学生的信息及课程分数
-- 把课程01和课程02单独拉出来,再进行对比,为了确保能对应成功,需要s1.sid = s.sid这个条件
-- 为了确保对比的是同一个人,需要有s1.sid = s2.sid
select s.*,s1.score a, s2.score b
from
t_mysql_student s,
(select * from t_mysql_score where cid = "01") s1,
(select * from t_mysql_score where cid = "02") s2
where
s1.sid = s2.sid and
s1.sid = s.sid and
s1.score > s2.score;
2. 查询同时存在 " 01 “课程和” 02 "课程的情况 SELECT
-- 查询同时存在 " 01 “课程和” 02 "课程的情况 
select s1.sid from 
(select * from t_mysql_score where cid = "01") as s1 
inner join
(select * from t_mysql_score where cid = "02") as s2
where s1.sid = s2.sid;
3. 查询存在 " 01 “课程但可能不存在” 02 "课程的情况 ( 不存在时显示为 NULL ) 
-- 查询不存在" 01 “课程但存在” 02 "课程的情况
select s.* from t_mysql_score s where sid 
not in (select sid from t_mysql_score where cid = "01") and s.cid = "02";
4. 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
-- 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
select s.sid,s.sname,s2.score from t_mysql_student s
, (select sid,avg(score) as score from t_mysql_score group by sid) as s2 
where s.sid = s2.sid and s2.score >= 60;
5. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null)
-- 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null)
select s.sid,s.sname,s2.num_cid,s2.sum_score 
from t_mysql_student s,
(select s1.sid,count(cid) as num_cid,sum(score) as sum_score from t_mysql_score s1 group by sid) as s2
where s.sid = s2.sid;
6. 查询学过「张三」老师授课的同学的信息
-- 查询学过「张三」老师授课的同学的信息

select st.sid,st.sname,st.sage,st.ssex from t_mysql_student st,
t_mysql_course co, 
t_mysql_score sc, 
t_mysql_teacher te
where te.tname like '张三' and 
te.tid = co.tid and 
co.cid = sc.cid and 
sc.sid = st.sid;
7. 查询没有学全所有课程的同学的信息
-- 查询没有学全所有课程的同学的信息
select s.*, COUNT(sc.cid) as count_cid 
from t_mysql_student s 
join t_mysql_score sc 
on s.sid = sc.sid 
group by sc.sid 
having 
COUNT(sc.cid) < (select count(*) from t_mysql_course);
8. 查询没学过"张三"老师讲授的任一门课程的学生姓名
-- 查询没学过"张三"老师讲授的任一门课程的学生姓名
select * from t_mysql_student where sid 
not in 
(select sc.sid from t_mysql_course co, t_mysql_score sc, t_mysql_teacher te
where te.tname like '张三' and te.tid = co.tid and co.cid = sc.cid);
9. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
-- 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
select s.sid,s.sname,round(avg(sc.score),2) as score 
from t_mysql_student s,t_mysql_score sc
where s.sid = sc.sid
and sc.score < 60 group by sid having count(sc.cid) >= 2;
10. 检索" 01 "课程分数小于 60,按分数降序排列的学生信息
-- 检索" 01 "课程分数小于 60,按分数降序排列的学生信息
select 
s.sid,s.sname,sc.score
from 
t_mysql_student s,t_mysql_score sc
where 
s.sid = sc.sid
and sc.score < 60 
and sc.cid = "01" 
order by score desc;
11. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
-- 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
select 
s.sname,s.sid,round(avg(sc.score),2) as avg_score,
max(CASE WHEN sc.cid = "01" THEN sc.score END )语文,
max(CASE WHEN sc.cid = "02" THEN sc.score END )数学,
max(CASE WHEN sc.cid = "03" THEN sc.score END )英语
from 
t_mysql_student s,t_mysql_score sc
where 
s.sid = sc.sid 
group by s.sid
order by avg(sc.score) desc;
12. -- 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
-- 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
-- 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
-- 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

select
co.cid, co.cname, max(sc.score) 最高分, min(sc.score) 最低分, round(avg(sc.score),2) 平均分,
concat(round(sum(if (sc.score > 60, 1,0))/count(sc.score)*100,2),'%') 及格率
from t_mysql_course co,t_mysql_score sc
where co.cid = sc.cid
group by co.cid;
SUM(IF(sc.score > 60, 1, 0)):这部分计算了成绩大于 60 分的记录的数量。
如果某条记录的成绩大于 60 分,那么 IF 函数返回 1,否则返回 0。然后,
SUM 函数将这些值相加,得到及格的记录数。

COUNT(sc.score):这部分计算了总记录数,无论成绩是否及格。

sum(...) / count(sc.score):这部分计算及格的记录数除以总记录数,得到及格率。

ROUND(..., 2):这部分使用 ROUND 函数将计算结果保留两位小数。

CONCAT(..., '%'):最后,CONCAT 函数将计算结果和百分号字符 "%" 连接在一起,
得到一个带百分号的及格率字符串。

13. 原表文章来源地址https://www.toymoban.com/news/detail-644069.html

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 80018
 Source Host           : localhost:3306
 Source Schema         : mybatis_ssm

 Target Server Type    : MySQL
 Target Server Version : 80018
 File Encoding         : 65001

 Date: 04/07/2023 23:53:33
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_mysql_course
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_course`;
CREATE TABLE `t_mysql_course`  (
  `cid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '课程编号',
  `cname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '课程名称',
  `tid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '教师编号',
  PRIMARY KEY (`cid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '课程信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_mysql_course
-- ----------------------------
INSERT INTO `t_mysql_course` VALUES ('01', '语文', '02');
INSERT INTO `t_mysql_course` VALUES ('02', '数学', '01');
INSERT INTO `t_mysql_course` VALUES ('03', '英语', '03');

-- ----------------------------
-- Table structure for t_mysql_score
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_score`;
CREATE TABLE `t_mysql_score`  (
  `sid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生编号,外键',
  `cid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '课程编号,外键',
  `score` float NULL DEFAULT 0 COMMENT '成绩',
  INDEX `sid`(`sid`) USING BTREE,
  INDEX `cid`(`cid`) USING BTREE,
  CONSTRAINT `t_mysql_score_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `t_mysql_student` (`sid`) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT `t_mysql_score_ibfk_2` FOREIGN KEY (`cid`) REFERENCES `t_mysql_course` (`cid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '成绩信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_mysql_score
-- ----------------------------
INSERT INTO `t_mysql_score` VALUES ('01', '01', 80);
INSERT INTO `t_mysql_score` VALUES ('01', '02', 90);
INSERT INTO `t_mysql_score` VALUES ('01', '03', 99);
INSERT INTO `t_mysql_score` VALUES ('02', '01', 70);
INSERT INTO `t_mysql_score` VALUES ('02', '02', 60);
INSERT INTO `t_mysql_score` VALUES ('02', '03', 80);
INSERT INTO `t_mysql_score` VALUES ('03', '01', 80);
INSERT INTO `t_mysql_score` VALUES ('03', '02', 80);
INSERT INTO `t_mysql_score` VALUES ('03', '03', 80);
INSERT INTO `t_mysql_score` VALUES ('04', '01', 50);
INSERT INTO `t_mysql_score` VALUES ('04', '02', 30);
INSERT INTO `t_mysql_score` VALUES ('04', '03', 20);
INSERT INTO `t_mysql_score` VALUES ('05', '01', 76);
INSERT INTO `t_mysql_score` VALUES ('05', '02', 87);
INSERT INTO `t_mysql_score` VALUES ('06', '01', 31);
INSERT INTO `t_mysql_score` VALUES ('06', '03', 34);
INSERT INTO `t_mysql_score` VALUES ('07', '02', 89);
INSERT INTO `t_mysql_score` VALUES ('07', '03', 98);

-- ----------------------------
-- Table structure for t_mysql_student
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_student`;
CREATE TABLE `t_mysql_student`  (
  `sid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生编号',
  `sname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生名称',
  `sage` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生年龄',
  `ssex` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生性别',
  PRIMARY KEY (`sid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '学生信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_mysql_student
-- ----------------------------
INSERT INTO `t_mysql_student` VALUES ('01', '赵雷', '1990-01-01', '男');
INSERT INTO `t_mysql_student` VALUES ('02', '钱电', '1990-12-21', '男');
INSERT INTO `t_mysql_student` VALUES ('03', '孙风', '1990-12-20', '男');
INSERT INTO `t_mysql_student` VALUES ('04', '李云', '1990-12-06', '男');
INSERT INTO `t_mysql_student` VALUES ('05', '周梅', '1991-12-01', '女');
INSERT INTO `t_mysql_student` VALUES ('06', '吴兰', '1992-01-01', '女');
INSERT INTO `t_mysql_student` VALUES ('07', '郑竹', '1989-01-01', '女');
INSERT INTO `t_mysql_student` VALUES ('09', '张三', '2017-12-20', '女');
INSERT INTO `t_mysql_student` VALUES ('10', '李四', '2017-12-25', '女');
INSERT INTO `t_mysql_student` VALUES ('11', '李四', '2012-06-06', '女');
INSERT INTO `t_mysql_student` VALUES ('12', '赵六', '2013-06-13', '女');
INSERT INTO `t_mysql_student` VALUES ('13', '孙七', '2014-06-01', '女');

-- ----------------------------
-- Table structure for t_mysql_teacher
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_teacher`;
CREATE TABLE `t_mysql_teacher`  (
  `tid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '教师编号',
  `tname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '教师名称',
  PRIMARY KEY (`tid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '教师信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_mysql_teacher
-- ----------------------------
INSERT INTO `t_mysql_teacher` VALUES ('01', '张三');
INSERT INTO `t_mysql_teacher` VALUES ('02', '李四');
INSERT INTO `t_mysql_teacher` VALUES ('03', '王五');

SET FOREIGN_KEY_CHECKS = 1;

到了这里,关于Mysql整理二 - 常见查询语句面试题(附原表)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL中基础查询语句

    用户表user数据如下: id device_id gender age university province 1 2138 male 21 北京大学 Beijing 2 3214 male 复旦大学 Shanghai 3 6543 famale 20 北京大学 Deijing 4 2315 female  23   浙江大学 ZheJiang 5 5432 male 25 山东大学 Shandong 1,写出ddl语句创建如上表,插入数据,查询所有数据   执行结果如下: ​

    2024年02月13日
    浏览(32)
  • 看一眼Mysql查询语句

    目录 🛻 查询数据 🛻基本查询语句 🛻单表查询 🚕查询所有字段 🚕查询指定字段 🚕查询指定记录 🚕带in的查询 🚕带between and的范围查询 🚕带like的字符匹配查询 🚕查询空值 🚕带and的多条件查询 🚕带or的多条件查询 🚕查询结果不重复 🚕对查询结果排序 🛻单

    2024年02月12日
    浏览(70)
  • 【SQL】MySQL的查询语句

    MySQL是一种广泛使用的关系型数据库管理系统,它被广泛地应用于各种应用程序和网站。学会使用MySQL的查询语句可以帮助我们更好地管理和分析数据,从而更好地利用数据库中的信息。在本篇博客中,我们将深入学习MySQL的查询语句,包括 SELECT 语句、 WHERE 子句、 JOIN 语句等

    2024年02月06日
    浏览(45)
  • 【MySQL】——Select查询语句(其二)

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年02月08日
    浏览(48)
  • MySQL多表查询 子查询效率(DQL语句)

    项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一) 多对多 一对一 一对多 部门与员工的关系:一个部门对应多个员工,一

    2023年04月08日
    浏览(46)
  • [MySQL]不允许你不会SQL语句之查询语句

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ ------------------❤️分割线❤️------------------------- —————————

    2024年02月08日
    浏览(87)
  • MySQL 语句查询的方法案例分享,和一些常用查询语句 2023.7.08

    1. 查询出部门编号为30的所有员工  2. 所有销售员的姓名、编号和部门编号 3. 找出奖金高于工资的员工 4. 找出奖金高于工资60%的员工 5. 找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料 6. 找出部门编号为10中所有经理,部门编号为20中所有销售员,还有

    2024年02月13日
    浏览(40)
  • MySQL数据库高级查询语句

    基于这两个数据库表格来实现以下实验 concat(x,y)将提供的参数x和y拼接成一个字符串 trim()返回去除指定格式的值 GROUP BY 有一个原则,凡是在 GROUP BY 后面出现的字段,必须在 SELECT 后面出现; 凡是在 SELECT 后面出现的、且未在聚合函数中出现的字段,必须出现在 GROUP BY 后

    2024年02月11日
    浏览(63)
  • MySQL高阶语句之常用查询

    目录 常用查询 按排序 区间判断及查询不重复记录 对结果进行分组 限制结果条目 设置别名 通配符 子查询 (增、删、改、查) 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 例如只取 10 条数据、对查询结果进行排序或分组等等 P

    2024年02月10日
    浏览(38)
  • MySQL数据库——高级查询语句

    数据库是用来存储数据,更新,查询数据的工具,而查询数据是一个数据库最为核心的功能,数据库是用来承载信息,而信息是用来分析和查看的。所以掌握更为精细化的查询方式是很有必要的。本文将围绕数据的高级查询语句展开。 1.指定指字段进行查询——SELECT 语法:

    2024年02月11日
    浏览(88)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包