【SQL除法运算】查询选修了全部课程的学生姓名

在这里插入图片描述

查询学生姓名:两种SQL方法
在数据库操作中,查询特定条件下的学生姓名是一项常见任务。这里我们讨论两种不同的方法来查询没有选修任何课程的学生姓名,以及查询选修了所有课程的学生姓名。

第一种方法:查询没有选修任何课程的学生姓名
思路
从Student表逐行获取学生数据。
从Course表逐行获取课程数据。
从SC表逐行获取数据进行比对。
通过三层循环,比对SC表中的学号和课程号是否同时存在于Student和Course表中。

SQL语句

SELECT Sname
FROM Student
WHERE NOT EXISTS(
    SELECT *
    FROM Course
    WHERE NOT EXISTS(
        SELECT *
        FROM SC
        WHERE SC.Sno = Student.Sno AND SC.Cno = Course.Cno
    )
);

结果
执行此查询将返回所有没有选修任何课程的学生姓名。

第二种方法:查询选修了所有课程的学生姓名
思路
此方法的思路略有不同:查询一个学生的姓名,该学生选修的课程数量等于所有课程的数量。

通过Student表中的学号查询学生姓名。
使用COUNT(*)在Course表中计算所有课程的数量。
在SC表中按学号分组,并计算每个学生选修的课程数量。
比较每个学生选修的课程数量是否等于所有课程的数量。
SQL语句

SELECT Sname
FROM Student
WHERE Sno in (
    SELECT Sno
    FROM SC
    GROUP BY Sno
    HAVING COUNT(*) = (
        SELECT COUNT(*)
        FROM Course
    )
);

此查询将返回所有选修了所有课程的学生姓名。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值