黑马程序员技术交流社区

标题: sql server中的exists语句 [打印本页]

作者: yangaidongcumt    时间: 2013-6-13 19:44
标题: sql server中的exists语句
本帖最后由 yangaidongcumt 于 2013-6-22 16:24 编辑

谁能帮忙解释一下exists语句的用法,尤其是where exists(),最好有代码,可以解释一下~~O(∩_∩)O
作者: lyn    时间: 2013-6-13 20:02
本帖最后由 lyn 于 2013-6-13 20:04 编辑

我这涉及了三个关系(关系即表),用了存在量词exists,翻译成我们理解的语言就是:查询选修了“计算机原理”课程的同学姓名及班级编号
select studentName,classNo
from Student a
where exists
          (select * from Score b,Course c
            where b.courseNo=c.courseNo       --这两个就是b,c关系中的主外键关系,下面studentNo也是
            and b.studentNo=a.studentNo and courseName='计算机原理')
作者: 274997322    时间: 2013-6-13 20:07
exists是用来判断是否存在的,当exists(查询)中的查询存在结果时则返回真,否则返回假。not exists则相反。
例如:
select * from T_student where exists(select  * from T_student inner join T_score on T_student.StuID=T_score.StudentID where score>60)
就是返回分数大于60的学生的信息
作者: 江湖一浪人    时间: 2013-6-13 20:14
exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:
  select name from student where sex = 'm' and mark exists(select 1 from grade where ...) ,
只要exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,
如果改成“select 2 from grade where ...”,那么返回的字段就是2,这个数字没有意义。所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。
这个关键字在Sql server中可是一个难点,以前学的时候老弄晕!现在明白。
作者: 甘斌斌    时间: 2013-6-13 20:53
接口的实现分显示和隐式两种。
显示实现的接口,接口的成员都要声明成公用的(public)
而隐式实现的接口,接口的成员是接口类型加成员名称声明的。这样的声明可以通过强制转换进行和接品的转换。
作者: 彭康    时间: 2013-6-13 21:24
江湖一浪人 发表于 2013-6-13 20:14
exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:
  select name from student where sex = ' ...

这位说的很好了  exists(select 1 from grade where ...)
这个1是个占位符 这个位置可以是任何数字
我曾经在双主键分页的sql语句用到过 给双主键表一个标示

作者: 胡章诚    时间: 2013-6-13 22:44
select Sname from Student
where EXISTS(select * from SC where Sno='1');
若内层查询结果为非空,则外层where子句返回true,否则返回false,给出的列名Sname没有实际意义




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2