SQL中exist与in的区别.doc_第1页
SQL中exist与in的区别.doc_第2页
SQL中exist与in的区别.doc_第3页
SQL中exist与in的区别.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL中exist与in的区别in 是一个集合运算符.a in a,c,d,s,d. P105例子这个运算中,前面是一个元素,后面是一个集合,集合中的元素类型是和前面的元素一样的. 而exists是一个存在判断,如果后面的查询中有结果,则exists为真,否则为假.in 运算用在语句中,它后面带的select 一定是选一个字段,而不是select *. 比如说你要判断某班是否存在一个名为小明的学生,你可以用in 运算: 小明 in (select sname from student)这样(select sname from student) 返回的是一个全班姓名的集合,in用于判断小明是否为此集合中的一个数据; 同时,你也可以用exists语句:exists (select * from student where sname=小明) select * from 表A where exists(select * from 表B where 表B.id=表A.id) 这句相当于select * from 表A where id in (select id from 表B) 对于表A的每一条数据,都执行select * from 表B where 表B.id=表A.id的存在性判断,如果表B中存在表A当前行相同的id,则exists为真,该行显示,否则不显示区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。表A ID NAME 1 A1 2 A2 3 A3 表B ID AID NAME 1 1 B1 2 2 B2 3 2 B3 表A和表B是对多的关系 A.ID = B.AID SELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID) 执行结果为 1 A1 2 A2 原因可以按照如下分析 SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=) -SELECT * FROM B WHERE B.AID=有值返回真所以有数据 SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2) -SELECT * FROM B WHERE B.AID=有值返回真所以有数据 SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3) -SELECT * FROM B WHERE B.AID=无值返回真所以没有数据 NOT EXISTS 就是反过来 SELECT ID,NAME FROM A WHERENOT EXIST (SELECT * FROM B WHERE A.ID=B.AID) 执行结果为 3 A3 例子 查询选修了全部课程的学生姓名。( x)P ($ x (P) 查询学生x,不存在课程y,学生没有选修例 查询选修了全部课程的学生姓名。用x表示课程,p(x)表示学生学习了课程x,则( x)p(x)表示对所有课程学生都学习了。1. 依次取出一个学生,对任何一个课程,查看该学生是否选修了。如果未选修,返回该课程。2. 如果选修了,则查看下一个课程。3. 最终,如果返回的所有课程为空的话说明该学生选修了所有的课程。此时输出该学生的信息。例 查询至少选修了学生95002选修的全部课程的学生号码。解题思路:用逻辑蕴函表达:查询学号为x的学生,对所有的课程y,只要95002学生选修了课程y,则x也选修了y。形式化表示: 用P表示谓词 “学生95002选修了课程y” 用q表示谓词 “学生x选修了课程y”则上述查询为: ( y) p q 等价变换: ( y) p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论