这个SQL子查询怎么理解!?初学者

来源:百度知道 编辑:UC知道 时间:2024/05/28 18:54:15
这个SQL子查询怎么理解:select 学号from xs_kc as cj1 where not exists (select* from xs_kc as cj2 where cj2.学号='001102' and not exists (select * from xs_kc as cj3 where cj3.学号=cj1.学号 and cj3.课程号= cj2.课程号))

我们可以先看里面的查询信息【select* from xs_kc as cj2 where cj2.学号='001102' 】和 【select * from xs_kc as cj3 where cj3.学号=cj1.学号 and cj3.课程号= cj2.课程号】 这两句的意思是 1. 从表xs_kc 中查询 cj2.学号=001102 的所有信息;2.从表xs_kc 中查询所有信息 条件是 cj3.学号=cj1.学号 and cj3.课程号= cj2.课程号。然后在往外看一层【where not exists
(select* from xs_kc as cj2 where cj2.学号='001102' and
not exists (select * from xs_kc as cj3 where cj3.学号=cj1.学号 and cj3.课程号= cj2.课程号))】
这句的意思是,排除上述两个子查询的信息,再连上前面的【select 学号from xs_kc as cj1 】 ,那么整句话的意思就是 从表xs_kc 中查询“学号”这个属性的所有信息,但是排除 【学号=001102 】和 【cj3.学号=cj1.学号 and cj3.课程号= cj2.课程号】 的所有信息。

从最里面往外一步步分析就可以了.最里面:从表xs_kc中查询产生表cj2 接着得到cj2.学号=001102 的所有信息;2.同样,从表xs_kc 中查询所有信息 条件是 cj3.学号=cj1.学号 and cj3.课程号= cj2.课程号。not exist就是说排除满足上述条件的结果.因而意思说:从表xs_kc 中查询“学号”这个属性的所有信息,但是不要 学号=001102 cj3.学号=cj1.学号 and cj3.课程号= cj2.课程号的所有信息。

我也是试试:
该语句的目的是为了得到xs_kc的学号,排除学号=001102 和 最后一句最直观的理解就是先去掉查询得到的结果和没去掉的查询结果比较下.就可以看出来的,应该是为了过滤.