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