MySQL查询之蕴涵

本文通过一个具体场景,探讨了如何使用MySQL进行复杂查询,特别是如何找出至少选修了指定学生所选全部课程的学生号码。利用逻辑蕴涵的概念,将问题转化为SQL语句,并通过双重NOT EXISTS子查询实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL查询之蕴涵

现在来假设一个场景,共有三张表。分表如下:
学生表(student)

Alt text

课程表(course)

Alt text

学生_课程对应表(sc)

Alt text

(题型内容来自王珊教授的《数据库系统概论》)
这时候,有一个需求就是

查询至少选修了学生311选修的全部课程的学生号码

本查询如果用逻辑蕴涵来表达,那就是
学生311选修了课程y 可推出学生x也选修了课程y。
那就是
(y)pq
那么根据离散数学学到的,可以推导出
(y)pq(y(pq)
意思就是
不存在这样的课程,学生311选修了,学生x却没有选修。

SELECT DISTINCT sno
FROM sc scx
WHERE NOT EXISTS 
    (SELECT * 
    FROM sc scy
    WHERE scy.sno =311 AND
        NOT EXISTS 
        (SELECT * 
        FROM sc scz
        WHERE scz.sno=scx.sno AND
              scz.cno=scy.cno
        )
    )
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值