摘自:http://blog.csdn.net/zengcong2013/article/details/45820639

今天用到exists,结果代码居然忘了怎么写了,这里分享下

1、Student:

Sno

Sname

Ssex

Sage

Sdept

200215121

李勇

20

CS

200215122

刘晨

19

CS

200215123

王敏

18

MA

200215124

张立

19

IS

2、Course:

Cno

Cname

Cpno

Ccredit

1

数据库

5

4

2

数学

2

3

信息系统

1

4

4

操作系统

6

3

5

数据结构

7

4

6

数据处理

2

7

PASCAL语言

6

4

3、SC:

Sno

Cno

Credit

200215121

1

92

200215121

2

85

200215121

3

88

200215122

2

90

200215122

3

80

例1:查询所有选修了1号课程的学生的姓名。

解法1:利用exists

首先取Student表中的一个元组,然后在SC表中依次找SC.Sno=该元组的Sno,并且对应的Cno='1',如果存在,则外层查询的where子句返回为真,则Student表中的该元组可以输出。然后依次遍历Student表中的其他元组。

举个例子:对于在学生表中学号等于2002151121这个元组,在SC表中第一条记录即符合条件,然后where 子句返回 true,所以该条元组可以输出。然后依次遍历。

select Sname

from  Student

where exists

(

select *

from SC

where Sno = Student.Sno AND Cno='1'

);

解法2:利用连接查询

select Sname

from Student,SC

where Student.Sno=SC.Sno AND SC.Cno='1';

例2:查询没有选修1号课程的学生的姓名。

解:

select Sname

from Student

where not exists

(

select *

from SC

where Sno=Student.Sno  AND   Cno='1'

);

例3:查询选修了全部课程的学生姓名。

select Sname

from Student

where not exists

(

select *

from Course

where not exists

(

select *

from  SC

where Sno=Student.Sno AND

Cno=Course.Cno

) );

查找语义:查询这样的学生,没有一门课程是他不选修的。

查找过程:

首先,选取Student表中的一个元组,然后在依次判断Course表中的每个元组是否可以输出,只要有一个课程可以输出,则最外层查询的where子句返回为false;而在判断某个课程是否可以输出时,则要利用第三层查询,利用当前的学号和当前的课程号,在SC表中查询,如果存在,则第二层查询where子句返回false。至此,每一门课程都不可以输出时,这个学号对应的元组才可以输出。表示这个学生选修了全部的课程。

例4:至少选修了学生200215122选修的全部课程的学生号码。

select distinct Sno

from SC SCX

where not exists

(

select *

from SC SCY

where SCY.Sno='2002151122'  AND

not exists

(

select *

from SC SCZ

where SCZ.Sno=SCX.Sno  AND

SCZ.Cno=SCY.Cno));

查询语义:不存在这样的课程y,学生200215122选修了y,而学生x没选。

查询过程:先在SCX表中选一条记录,比方说第一条,然后再看SCY表中,只有SCY表中全部不能输出,第一层查询的where子句才返回true,第一条记录就可以输出;所以就要一次查看SCY表中的每一个元组,前三个,因为学号首先不满足=200215122所以必然不能输出,第四个的话,就要看其AND后面的not exists返回什么值,而这又取决于第三层查询中是否存在满足学号等于SCX.Sno且课程号=SCY.Cno的元组,经查看,有 ,则返回false,所以第四个也不能输出,第五个类似,所以,第一层查询的not exists返回true。所以第一条记录可以输出。

转载于:https://www.cnblogs.com/HQ2017/p/6885808.html

SQL语句中exists/not exists的用法分析相关推荐

  1. Sql 语句中 IN 和 EXISTS

    原文链接:  (2条消息)Sql 语句中 IN 和 EXISTS 的区别及应用 - jcpp9527的博客 - CSDN博客 https://blog.csdn.net/wqc19920906/art ...

  2. Sql语句中between与in的用法详解

    通常在写SQL语句中我们时不时就会用到between或者in,或者两者组合在一起,between的运算符用于 WHERE 表达式中,选取介于两个值之间的数据范围.BETWEEN 同AND 一起搭配使用 ...

  3. Sql语句中IN和exists的区别及应用

    表展示 首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询 ...

  4. sql语句中any和all的用法

    这两个都是用于子查询的 any 是任意一个 all 是所有 any表示有任何一个满足就返回true,all表示全部都满足才返回true 建议使用max和min更加直观 比如 select * from ...

  5. 03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询

    映射文件的sql语句中 #{} 和 ${} 区别以及实现模糊查询 目录 sql 语句中的 #{} #{} 模糊查询错误用法 #{} 实现模糊查询 sql 语句中的 ${} ${} 实现模糊查询 #{} ...

  6. 【MyBatis笔记】03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询

    映射文件的sql语句中 #{} 和 ${} 区别以及实现模糊查询 sql 语句中的 #{} #{} 模糊查询错误用法 #{} 实现模糊查询 sql 语句中的 ${} ${} 实现模糊查询 #{} 与 ...

  7. SQL语句中的数学函数

    SQL语句中的数学函数 开发工具与关键技术:SQL Server 2014.SQL语句中的数学函数 作者:袁何恩 撰写时间:2019年7月16日 今天,我要和大家分享的技术是SQL语句中的数学函数. ...

  8. sql语句中exists用法详解

    文章目录 一.语法说明 exists: not exists: 二.常用示例说明 1.查询a表在b表中存在数据 2.查询a表在b表中不存在数据 3.查询时间最新记录 4.exists替代distinc ...

  9. SQL语句中EXISTS的用法

    记录:258 在业务开展中,会遇到类似需求. 需求1:UPDATE表TEST_TB01中的记录:满足条件:这些记录不在TEST_TB02中. 需求2:UPDATE表TEST_TB01中的记录:满足条件 ...

  10. UNION,EXISTS,IN等在SQL语句中的灵活应用和场境的选择。

    今天在QQ群里,有朋友问我这样的一个SQL Server中查询数据的问题, 表 A: num       unit 001        a 002        b 003        c 表 B ...

最新文章

  1. ajax post的回调函数另一个方法,jQueryajax–post()方法 - 米扑博客
  2. SVG脚本编程简介(转)
  3. log4jdbc oracle,通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql
  4. IOS FRAMEWORK,动态库 等几个问题
  5. How to resolve error message Malformed URI literal syntax
  6. 早期访问中具有NetBeans的Oracle公共云Java服务
  7. 快准狠!Intel论文揭示自家车牌识别算法:LPRNet
  8. Sentinel热点Key降级上_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0042
  9. linux入门常识(三)
  10. 中兴e9000服务器,ZXCTN 9000-E设备系列_ZXCTN 9000-E系列中兴传输设备_中兴设备 - 诺深达华为光端机...
  11. signature=9b2caa13f2468eba05d2d57d9a88606d,【音响聚焦】顶级Hi-End音响发烧器材介绍(功放篇)...
  12. Java总结一:初窥线程
  13. 软件测试之验收测试三要点
  14. php公众号获取code,微信公众号获取code
  15. 【SAP Hana】SAP HANA协同开发代码管理应用入门
  16. 局域网:提高内网安全技术的十大策略(转)
  17. HTTP的get和post请求方法以及HTTP接口
  18. reactnative 京豆
  19. java实现本地图片转urljava中映射本地图片地址为url访问
  20. u盘什么品牌质量好?这几款可以试试

热门文章

  1. 分布式文件系统FastDFS如何做到高可用
  2. 解决scrollView上subView下移20point问题的一种方式
  3. 没有文件扩展“.vbs”的脚本引擎的解决方案
  4. springcloud与jdk版本问题
  5. c++ 写x64汇编 5参数_自己动手写操作系统 8086sos
  6. Unity 序列化的问题
  7. minio获取上传文件_Springboot集成Minio实现对象存储服务
  8. jtextarea可以让某一行右对齐吗_单元格对齐还在敲空格吗?几个简单小技巧要学会...
  9. 【渝粤题库】国家开放大学2021春2605经济法律基础题目
  10. 【5分钟 Paper】Dueling Network Architectures for Deep Reinforcement Learning