A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangaidongcumt 中级黑马   /  2013-6-13 19:44  /  1599 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yangaidongcumt 于 2013-6-22 16:24 编辑

谁能帮忙解释一下exists语句的用法,尤其是where exists(),最好有代码,可以解释一下~~O(∩_∩)O

6 个回复

倒序浏览
本帖最后由 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='计算机原理')
回复 使用道具 举报
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的学生的信息
回复 使用道具 举报
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中可是一个难点,以前学的时候老弄晕!现在明白。
回复 使用道具 举报
接口的实现分显示和隐式两种。
显示实现的接口,接口的成员都要声明成公用的(public)
而隐式实现的接口,接口的成员是接口类型加成员名称声明的。这样的声明可以通过强制转换进行和接品的转换。
回复 使用道具 举报
江湖一浪人 发表于 2013-6-13 20:14
exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:
  select name from student where sex = ' ...

这位说的很好了  exists(select 1 from grade where ...)
这个1是个占位符 这个位置可以是任何数字
我曾经在双主键分页的sql语句用到过 给双主键表一个标示
回复 使用道具 举报
select Sname from Student
where EXISTS(select * from SC where Sno='1');
若内层查询结果为非空,则外层where子句返回true,否则返回false,给出的列名Sname没有实际意义
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马