一条有意思的SQL语句分析

                        一条有意思的SQL语句分析

       这条语句,说实在的困扰了我很久了,以前由于工作忙及工作中很少用到此种写法,即使有碰到这种要求也用别的语句代替或用另外一种方案实现,所以一直没空理它。这次星期天闲着没事,认真地思考分析了一下这条语句,还真有点意思。

学生表 S(SNO int pk,SN varchar(8))  --SNO为学号 ,SN为学生姓名。
课程表 C(CNO int pk,CN varchar(50)) --CNO为课程号,CN为课程名
选修表 SC(SNO int pk,CNO int pk,SCORE number(7,2),fk(SNO,CNO) )  --SCORE为成绩。

--以下语句为求出选修了所有课程的学生姓名.
SELECT SN
FROM s
WHERE (NOT EXISTS
          (SELECT *
         FROM c
         WHERE NOT EXISTS
                   (SELECT *
                  FROM sc
                  WHERE SNO = S.SNO AND CNO = C.CNO)))

分析如下:
[1]:
SELECT *
FROM c
WHERE (NOT EXISTS
          (SELECT *
         FROM sc
         WHERE SNO = 10005 AND CNO = C.CNO))
--求出学号为10005的学生没有选修的课程.
[2]:
     select SN from s
     where (not exists ([1]:))
--如果[1]:部份语句执行为空记录时,即not exists ([1]:)条件为真时表示
--学号为10005的学生选修了所有的课程,以此类推如果[1]:部份语句中的
--SNO=10005改成SNO=S.SNO表示求出选修了所有课程的学生姓名。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值