MYSQL笔试题

MySQL 三个表,学生表(id, name),课程表(id,name,credit),id 关联表(stu_id,course_id),

题目 a 查询学生 id 所选的总学分

题解:使用 INNER JOIN 连接三个表,然后在 WHERE 子句中指定学生 id,最后使用 SUM 函数计算学生所选的总学分。

题目b:查询学生 id 没选的总学分

SELECT s.id, SUM(c.credit) AS total_credit
FROM student s
INNER JOIN id_relation r ON s.id = r.stu_id
INNER JOIN course c ON r.course_id = c.id
WHERE s.id = [学生 id]
GROUP BY s.id;

 

题目 b 查询学生 id 没选的总学分

题解:使用 CROSS JOIN 连接学生表和课程表得到所有的学生和课程的组合,然后使用 LEFT JOIN 连接 id 关联表,如果某个学生没有选某门课程,则在关联表中找不到对应的记录,此时 id 关联表的 stu_id 字段会为 NULL,因此可以在 WHERE 子句中使用 IS NULL 来过滤掉已选的课程,最后使用 SUM 函数计算学生没选的总学分。

SELECT s.id, SUM(c.credit) AS total_credit
FROM student s
CROSS JOIN course c
LEFT JOIN id_relation r ON s.id = r.stu_id AND r.course_id = c.id
WHERE s.id = [学生 id] AND r.stu_id IS NULL
GROUP BY s.id;

 CROSS JOIN 跟inner join连接区别

1、CROSS JOIN 会生成笛卡尔积,M*N,inner join只会生成满足条件的部分;

2、CROSS JOIN 不加on条件筛选,inner join加on条件筛选

posted @ 2023-06-27 16:56  小龙虾爱大龙虾  阅读(112)  评论(0)    收藏  举报