读书人

关于sql2000中exists的有关问题

发布时间: 2012-03-03 15:33:03 作者: rapoo

关于sql2000中exists的问题
两个表 tb_student(学生表)和tb_score(成绩表)

select * from tb_student
where exists (select * from tb_score where
course_no= 'c801 ')
返回tb_student表中所有记录

这个我可以理解,就是说exists里面返回 真  然后执行外层的查询.

但是 select * from tb_student
where exists (select * from tb_score where
course_no= 'c801 ' and tb_student.student_no=student_no)
返回

一条记录.

我看过一本书,说exists只是返回 真 或者 假

同样的exists里面返回的是  真  为什么就一条记录????

多了这一个条件 tb_student.student_no=student_no,它是怎么执行的????

[解决办法]
个人理解:
exists是存在于的意思.
第一个例子中,exists后面的数据与exists前面的不相关,所以可以都取出
第二个例子中,exists后面的数据与前面的表中的数据有了关联,所以只能取一条数据
用这个也是一样的
select * from tb_student
where exists (select 1 from tb_score where
course_no= 'c801 ' and tb_student.student_no=student_no)
[解决办法]
很容易理解,只有一条记录满足:
  course_no= 'c801 ' and tb_student.student_no=student_no
其它的都不满足,不满足就是“假”,当然只返回满足——“真”的一条记录。

如果改成 OR 必然还是返回所有记录:
  course_no= 'c801 ' or tb_student.student_no=student_no

读书人网 >SQL Server

热点推荐