mysql——面试题初体验

news/2024/12/29 22:36:05/

查询环境

1、student(学生表)

2、课程表(course)

3、教师表(teacher)

4、成绩表(score)

问题

(1) 查询所有学生的学号、姓名、选课数、总成绩

mysql> select s.s_id as 学号,s.s_name as 姓名 from student as s;

+--------+--------+
| 学号   | 姓名   |
+--------+--------+
|      1 | 张三   |
|      2 | 张三   |
|      3 | 张四   |
|      4 | 张五   |
+--------+--------+
4 rows in set (0.00 sec)

mysql> select sc.s_id,sum(s_score) as scoresum ,count(c_id) as coursenumber from score as sc group by sc.s_id;

+------+----------+--------------+
| s_id | scoresum | coursenumber |
+------+----------+--------------+
|    1 |      141 |            3 |
|    2 |      112 |            3 |
|    3 |      217 |            3 |
|    4 |      151 |            3 |
+------+----------+--------------+
4 rows in set (0.00 sec)

把上面的两个表再关联查询

mysql> select s.s_id as 学号,s.s_name as 姓名,d.scoresum as 总成绩,d.coursenumber as 选课数 from student as s,
    -> (select sc.s_id,sum(s_score) as scoresum ,count(c_id) as coursenumber from score as sc group by sc.s_id) as d
    -> where s.s_id=d.s_id;


+--------+--------+-----------+-----------+
| 学号   | 姓名   |   总成绩 | 选课数    |
+--------+--------+-----------+-----------+
|      1 | 张三   |       141 |         3 |
|      2 | 张三   |       112 |         3 |
|      3 | 张四   |       217 |         3 |
|      4 | 张五   |       151 |         3 |
+--------+--------+-----------+-----------+
4 rows in set (0.00 sec)


(2) 查询学过“数学”老师所教的所有课的同学的学号、姓名

mysql> select s_id, s_name from student where s_id in (select s_id from score where c_id in (select c_id from course where t_id = (select t_id from teacher where t_name = "数学老师")));

+------+--------+
| s_id | s_name |
+------+--------+
|    1 | 张三   |
|    3 | 张四   |
|    2 | 张三   |
|    4 | 张五   |
+------+--------+
4 rows in set (0.00 sec)


(3) 查询和“1”号的同学学习的课程完全相同的其他同学学号和姓名

①从成绩表查询1号选的课

mysql> select score.c_id from score
    -> where score.s_id=1;

+------+
| c_id |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

②从成绩表查询所有同学的s_id

mysql> select sc.s_id from score as sc
    -> where sc.c_id in(
    -> select score.c_id from score
    -> where score.s_id=1);

+------+
| s_id |
+------+
|    1 |
|    3 |
|    2 |
|    4 |
|    2 |
|    3 |
|    1 |
|    4 |
|    4 |
|    3 |
|    2 |
|    1 |
+------+

12 rows in set (0.00 sec)

③从student表查询所有学生信息

mysql> select * from student
    -> where student.s_id in
    -> (select sc.s_id from score as sc
    -> where sc.c_id in(
    -> select score.c_id from score
    -> where score.s_id=1)
    -> );

+------+--------+---------+-------+
| s_id | s_name | s_birth | s_sex |
+------+--------+---------+-------+
|    1 | 张三   |      10 | 男    |
|    2 | 张三   |      11 | 男    |
|    3 | 张四   |       1 | 男    |
|    4 | 张五   |      12 | 女    |
+------+--------+---------+-------+
4 rows in set (0.00 sec)

第③次就查询到了和“1”号的同学学习的课程完全相同的其他同学学号和姓名

(4)按平均成绩从高到低显示所有学生的“数学”(c_id=1)、“语文”(c_id=2) 、英语”(c_id=3)三门的课程成绩,按如下形式显示:学生ID,数学,语文,英语,有效课程数,有效平均分

①查询有效平均分

mysql> select s_id as 学号,avg(s_score) as 有效平均分 from score group by s_id order by 有效平均分 desc;

+--------+-----------------+
| 学号   | 有效平均分      |
+--------+-----------------+
|      3 |         72.3333 |
|      4 |         50.3333 |
|      1 |         47.0000 |
|      2 |         37.3333 |
+--------+-----------------+
4 rows in set (0.00 sec)

以下为参考案例

mysql> select *  from score
    -> left join(
    -> select s_id,avg(s_score) as avscore from score
    -> group by s_id
    -> )as d
    -> on score.s_id=d.s_id
    -> order by avscore desc;


+------+------+---------+------+---------+
| s_id | c_id | s_score | s_id | avscore |
+------+------+---------+------+---------+
|    3 |    3 |      88 |    3 | 72.3333 |
|    3 |    2 |      65 |    3 | 72.3333 |
|    3 |    1 |      64 |    3 | 72.3333 |
|    4 |    1 |      78 |    4 | 50.3333 |
|    4 |    2 |      65 |    4 | 50.3333 |
|    4 |    3 |       8 |    4 | 50.3333 |
|    1 |    1 |      24 |    1 | 47.0000 |
|    1 |    3 |      91 |    1 | 47.0000 |
|    1 |    2 |      26 |    1 | 47.0000 |
|    2 |    2 |      25 |    2 | 37.3333 |
|    2 |    3 |       9 |    2 | 37.3333 |
|    2 |    1 |      78 |    2 | 37.3333 |
+------+------+---------+------+---------+
12 rows in set (0.00 sec)
 


(5) 使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计各分数段人数:课程ID和课程名称


http://www.ppmy.cn/news/1156939.html

相关文章

SQL和Python,哪个更容易自学?哪个更适合数据工作的编程新手?

如果你想从事数据工作&#xff0c;比如数据分析、数据开发、数据科学等&#xff0c;你可能会遇到这样的问题&#xff1a;SQL和Python哪个更容易自学&#xff1f;哪个更有用&#xff1f;哪个更有前途&#xff1f;其实这两种语言都是数据工作的重要技能&#xff0c;但它们的特点和…

为什么要做数据可视化

在当今信息爆炸的时代&#xff0c;数据已成为个人和企业最宝贵的资产之一。然而&#xff0c;仅仅拥有大量的数据并不足以支持明智的决策。数据可视化&#xff0c;作为一种将数据转化为图形形式的技术和方法&#xff0c;可以帮助我们更好地理解和分析数据&#xff0c;从而更准确…

ES6中什么是Promise?

Promise 是 JavaScript 中的一种异步编程模式&#xff0c;用于更好地处理异步操作和避免回调地狱&#xff08;Callback Hell&#xff09;。Promise 表示一个异步操作的最终完成或失败&#xff0c;它有以下特点&#xff1a; 状态&#xff1a;Promise 可以处于三种状态之一&#…

2023年中国超硬材料制品分析及超硬刀具市场规模分析[图]

超硬材料是指硬度特别高的材料&#xff0c;可分为天然以及人造两种&#xff0c;前者主要包括天然的钻石&#xff08;金刚石&#xff09;、黑钻石&#xff0c;后者则包括人造金刚石、立方氮化硼。 超硬材料制品分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#x…

冲刺十五届蓝桥杯P0006平面切分

文章目录 题目思路代码总结 题目 平面切分 思路 这道题是一个思维题把&#xff0c;之前没有接触过平面几何的知识&#xff0c;做起来感觉还是比较难的&#xff0c;用到的set集合和自己创建一个类 首先我们知道&#xff0c;一根直线A是可以将平面切分成两块的&#xff0c;如…

【限时免费】20天拿下华为OD笔试之【双指针】2023Q1A-最长的元音字符串【欧弟算法】全网注释最详细分类最全的华为OD真题题解

【双指针】2023Q1A-最长的元音字符串 题目描述与示例 题目 定义当一个字符串只有元音字母(a,e,i,o,u,A,E,I,O,U)组成,称为元音字符串&#xff0c;现给定一个字符串&#xff0c;请找出其中最长的元音字符串&#xff0c;并返回其长度&#xff0c;如果找不到请返回0。 字符串中…

【AOP系列】AOP场景实践

AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&#xff09;是一种编程范式&#xff0c;它提供了一种方式&#xff0c;可以在不修改源代码的情况下&#xff0c;增强或改变程序的行为。以下是一些常见的使用AOP的场景&#xff1a; 日志记录&#xff1a;可…

半导体分立器件动态测试参数有哪些?纳米软件半导体测试厂商如何助力测试?

上期我们介绍了半导体静态测试参数以及测试静态参数的必要性&#xff0c;今天我们将对半导体分立器件的动态测试参数展开描述。动态参数测试是半导体测试的另一项重要内容&#xff0c;它可以检测半导体在开关过程中的响应时间、电流变化和能量损耗情况。 半导体动态测试参数是指…