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条件筛选
    菜鸟的自我修养
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号