You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在学生数据库中筛选仅选修数学未选修科学的学生rollno

仅选修数学课程的学生学号筛选方案

以下是几种可行的SQL解决方案,可精准筛选出只选修数学、未选修科学的学生学号:

方法1:使用NOT EXISTS子查询

通过子查询校验学生是否存在选修科学的记录,仅保留无该记录的数学选课学生:

SELECT rollno
FROM student s1
WHERE course = 'maths'
AND NOT EXISTS (
    SELECT 1
    FROM student s2
    WHERE s2.rollno = s1.rollno
    AND s2.course = 'science'
);

方法2:LEFT JOIN 排除匹配记录

将学生表自连接匹配科学选课记录,筛选连接后无科学选课匹配的数学选课学生(加DISTINCT避免重复学号):

SELECT DISTINCT s1.rollno
FROM student s1
LEFT JOIN student s2 ON s1.rollno = s2.rollno AND s2.course = 'science'
WHERE s1.course = 'maths'
AND s2.rollno IS NULL;

方法3:使用NOT IN子查询

先获取所有选修科学的学生学号,再从数学选课学生中排除这些学号:

SELECT rollno
FROM student
WHERE course = 'maths'
AND rollno NOT IN (
    SELECT rollno
    FROM student
    WHERE course = 'science'
);

⚠️ 注意:如果student表中rollno存在NULL值,NOT IN可能返回异常结果,此时优先选择NOT EXISTS方案。

方法4:分组后筛选课程条件

按学号分组,校验该学生仅选修了数学课程:

SELECT rollno
FROM student
GROUP BY rollno
HAVING SUM(CASE WHEN course = 'science' THEN 1 ELSE 0 END) = 0
AND SUM(CASE WHEN course = 'maths' THEN 1 ELSE 0 END) > 0;

内容的提问来源于stack exchange,提问作者adesh singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:54:17