sql中用双not exists实现除法运算的理解

  • Post author:
  • Post category:其他


SQL中除法的结构为

not exists(


a

not exists(


a



)

比如选出所有选过所有课程学生的学号,代码如下:

(sc表中有学生的选课记录,course表中有课程号)

select distinctsno  from  sc  t1  where  not  exists

(

          select  cno  from  course t2  where  not  exists

          (

             select *  from  sc t3  where t3.sno=t1.sno and t3.cno=t2.cno

     )

)

1)相当于两个for循环,外层循环就是遍历所有学生,里层循环就是对每一位学生遍历所有课程

2)最里面的那一个select语句便是选出该学生选过的课程,那么not exists语句便是从课程表course中选出该学生没选过的课。

3)外层where exists用于从sc表里选出有没选过课的学生,那么not exists便是选出选过所有课程的学生



版权声明:本文为yuanren201原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。