下面SQL语句 中 exists的用法

下面2句SQL,我都知道是什么意思,一个用的是exists,一个用的是in.
可我就是不理解为什么exists用在这里,就可以呢?
select Student.* from Student , SC where Student.S# = SC.S# and SC.C# = '01' and
exists (Select 1 from SC SC_2 where SC_2.S# = SC.S# and SC_2.C# = '02') order by Student.S#

select Student.* from Student , SC where Student.S# = SC.S# and SC.C# = '01' and
Student.S# in (Select S# from SC SC_2 where SC_2.S# = SC.S# and SC_2.C# = '02') order by Student.S#

你的sql 语句语法 错误了。

 select Student.* from Student , SC where Student.S# = SC.S# and SC.C# = '01' and 
exists (Select 1 from SC SC_2 where SC_2.S# = SC.S# and SC_2.C# = '02') order by Student.S#
这句关键是Select 1 from SC SC_2 where SC_2.S# = SC.S# and SC_2.C# = '02',如果有记录,则值是1,也就是存在,注意条件SC_2.S# = SC.S# 

select Student.* from Student , SC where Student.S# = SC.S# and SC.C# = '01' and 
Student.S# in (Select S# from SC SC_2 where SC_2.S# = SC.S# and SC_2.C# = '02') order by Student.S#
这里根据 Student.S# = SC.S# ,则Student.S# 相当于SC.S#,在根据子句中SC_2.S# = SC.S#这个条件,那么Select S# from出来的数据S#肯定会等于SC.S#。也就是 SC.S#  in(Select S# from SC SC_2 where SC_2.S# = SC.S# and SC_2.C# = '02') 只要SC_2.S# = SC.S# 有记录,肯定成立。


所以上面两句是等价的

EXISTS 是判断是否存在,和in类似,但效率要比in高
http://jingyan.baidu.com/article/fea4511a565404f7bb9125de.html

有时得到同样结果的SQL语句有多种写法的,这个就看你怎么写和对执行效率有什么需求了;
这里没有为什么,也没有什么好研究的

如果回答对您有帮助,请采纳

Select 1 from SC SC_2 where SC_2.S# = SC.S# and SC_2.C# = '02',此语句查出多少条记录都显示为1