sql学习中遇到not exists相关问题

本文探讨了在SQL查询中使用NOT EXISTS子句时可能会遇到的问题和误解。通过具体的查询示例,解释了NOT EXISTS并不等同于差集运算,并分析了在处理特定查询时如何正确使用NOT EXISTS以避免空结果。文章强调了在使用NOT EXISTS时需要明确限定条件,以确保查询的准确性。

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

sql学习中遇到not exists相关问题

数据库学习

EXISTS与NOT EXISTS

SQL中没有全程量词,但是可以把带有全称量词的谓词转换为等价的带有存在量词的谓词

如典型的学生数据库查询问题:

查询选修了全部课程的学生姓名

selcet Sname
from student
where not exists
	(select *
	from Course
	where not exists
		(select *
		from SC
		where Sno=Student.Sno
			and Cno=Course.Cno)
		)
	);

这个例子较为简单,理解起来会容易很多,刚开始我的理解是,从SC表中筛选出所有当前学生未选择的课程,如果不存在,则内层NOT EXISTS为true,最终返回一个课程列表,如果该课程列表为空则外层NOT EXISTS返回true,记录下该学生。这个理解大致没问题,但对于NOT EXISTS的一些运行细节理解并不到位。

如,现有供应商表S(SNO,SNAME,STATUS,CITY),
零件表P(PNO,PNAME,COLOR,WEIGHT)
项目表J(JNO,JNAME,CITY)
供应情况表SPJ(SNO,PNO,JNO,QTY)

求至少用了供应商S1所供应的全部零件的工程号JNO。

select JNO
from J
where not exists
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值