永发信息网

NOT EXISTS 怎么用?

答案:1  悬赏:40  手机版
解决时间 2021-05-05 10:09
NOT EXISTS 怎么用?
最佳答案
exists not exists 详细解释


exists  只有满足条件(存在的条件)才返回(输出对应值,再取下一个条件值进行遍历),
        当全部遍历没有满足条件的话也返回(返回”不满足满足exists“的意思,要求外循环取下一个值遍历)。
        
not exists 只有满足条件(不存在的条件)才返回(输出对应值,再取下一个条件值进行遍历),
           当全部遍历没有满足条件(不存在的条件)的话也返回(返回”不满足满足 not exists“的意思,要求外循环取下一个值遍历)。
           
1   2   3   取1中一个值  ——取2中一个值当满足3就返回,输出对应条件1的最外层SQL——取2中一个值当不满足,继续取2中下一个值,如果这时候有满足的也返回
            输出相应的1这个值为条件的信息,但是当都不满足的话 返回假判断第1层的where,要是where中是假的话就假假为真了,为真就输出相应的信息。
            接着取1的下一个值 ,再取2中的一个值 ......重复这些过程。

一: 只要选了课的输出即输出选了课的信息

select  *         
  from   xs  a     
  where      exists   
  (select  *   
                from   kc  b     
                where   exists   
  (select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)   
);

a 取 990201  b 取 101   当存在<exists> (select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch) ); 则
       (select  *   
                from   kc  b     
                where   exists 就也存在 。输出990201的信息。   990202......
a 取 990203  b 取 101   不存在101使<exists> (select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch) );为真
       紧接着就在b中取下一个即202进行判断,202可以使<exists> (select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch) );为真
       (select  *   
                from   kc  b     
                where   exists 就也存在 。输出990203的信息。
a 取990301  b取101 不可以使<exists> (select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch) );为真
        紧接着就在b中取下一个即202进行判断,也不可以使<exists> (select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch) );为真
        b取203 也一样不可以,没有找到满足情况的则返回最外循环 , a 取990302 .....

二: 作用:输出只要有一门课没有选修的学生信息。
  select  *         
  from   xs  a     
  where      exists   
  (select  *   
                from   kc  b     
                where  not exists   
  (select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)   
   );

a 取一个学号值 , b 取一个课程号值  假如a 对应的b满足not exists(select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  );
    即a没有选对应b课程。(select  *   
                from   kc  b     
                where  not exists   
  (select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  为真 ,第1层又是exists 所以把没有选课程a的一学号值的信息输出,
           反之当b取一个课程号值 ,假如a 对应的b不满足 not exists(select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  );
    即a选了对应b课程。(select  *   
                from   kc  b     
                where  not exists   
  (select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  为假 ,则继续取b的下一个值,假如一直没找到满足 not exists的则,返回最外层,
  然后a取下一个值,.....这样重复直到a遍历完。 这里就是当你a中选一个学号值, 对应b中只要存在没有选课的情况就输出。否则取下a的下一个值遍历。

三: 作用:一门课程也没有选修的学生信息
select  *         
  from   xs  a     
  where     not exists   
  (select   *   
                from   kc  b     
                where  exists    --不满足条件的放过 只有满足条件的才返回真,当都没满足则取下一个a再遍历。
    (select   *  from  xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)   
  );

a 取一个学号值 , b 取一个课程号值  假如a 对应的b满足 exists(select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  );
    即a选了对应b课程。(select  *   
                from   kc  b     
                where  not exists   
(select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  为真 ,但是第1层是 not exists 所以选了课程a的一学号值的信息不会输出,
           反之当b取一个课程号值 ,假如a 对应的b不满足 exists(select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  );
    即a没有选对应b课程。(select  *   
                from   kc  b     
                where  not exists   
(select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  为假 ,则继续取b的下一个值,假如遍历完b一直没找到满足exists的则第1层的not exists为真,
    返回最外层,输出对应的信息。然后a取下一个值,.....这样重复直到a遍历完。 这里就是当你a中选一个学号值, 当你存在一个选课程使第2层exists为真 ,
    但是第1层 not exists就为假了(即一个a只要选了课程就不会输出),对应b中只有都没有选课的情况就输出(因为当全部遍历完b的时候都没有则返回假,
     第1层有not exists所以为真就输出)。这里关键的是对于不满足情况怎么处理:相关子查询中当你碰到可以取真的则返回输出相应条件对应的查询值,当你都取的是假
    对于单层exists或not exists则取下一个值遍历,对于多层则返回假再去判断倒数第2层的情况。

四:  作用:输出没有一门课程没有选修的学生信息。
  select   *         
  from   xs      
  where   not   exists   
  (select   *   
                from   kc      
                where   not    exists   
    (select   *  from   xs_kc  where   xh=xs.xh   and  kch=kc.kch)   
  );  

a 取一个值  ,b 中取一个值 ,假如a 对应的b满足 not exists(select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  );
    即a没有选了对应b课程。(select  *   
                from   kc  b     
                where  not exists   
(select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  为真 ,但是第1层是 not exists 所以没有选课程a的一学号值的信息不会输出,
           反之当b取一个课程号值 ,假如a 对应的b不满足 not exists(select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  );
    即a选了对应b课程。(select  *   
                from   kc  b     
                where  not exists   
(select  *  from   xs_kc c  where   c.xh=a.xh  and  c.kch=b.kch)  为假 ,则继续取b的下一个值,假如遍历完b一直没找到满足 not exists的则第1层的not exists为真,
    返回最外层,输出对应的信息。然后a取下一个值,.....这样重复直到a遍历完。 这里就是当你a中选一个学号 当b有一个对应值的满足第2层not exists(即没有选课)
   就不会输出信息,当b中有一个对应值的不满足第2层not exists(即选了课)(不满足不会处理,直接取下一个,只有全部取完当没有才返回假),则继续遍历下一个b,
  当遍历完b没有满足not exists的(即选全了b中的课程的),返回假,而第1层为 not exists 所有为真,输出这个选择了所有b课程的学号的信息。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
驭剑学什么心法
哪位能送我几句日语啊(带日文加注释)
IE高手请进
梦回山海合稀有BB有什么配方?
家人为什么对我们的分数看的那么重要?
为什么我喜欢的人她不和我好呢?我不喜欢的人
人的心情为什么会那么复杂呢`
父母介绍的女朋友该接受吗?
机子老 需要装什么系统 要支持PS2
怎么在百度发信息
光泽一中农场怎么去啊,有知道地址的么
求一款视频切割合并软件
学习法律只是为了赚钱吗?
谁知道有什么好听的歌啊
拼道可以玩现金吗?
推荐资讯
js代码解密 求助
姓黄,男,8月18日五行缺土起什么名字?
卓依婷是怎么死的?
独立勇敢是什么意思,勇敢是什么意思
不显示图片
求破解一款简单的软件
秋季吃些什么好?
现在QQ幻想重新练怎么个练法
什么车没轮的
帮忙修改!!!
温州的医院位置列表
英语题目 急哦
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?