NOT EXISTS 怎么用?
答案:1 悬赏:40 手机版
解决时间 2021-05-05 10:09
- 提问者网友:ミ烙印ゝ
- 2021-05-05 02:32
NOT EXISTS 怎么用?
最佳答案
- 五星知识达人网友:北城痞子
- 2021-05-05 03:32
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课程的学号的信息。
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课程的学号的信息。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯