sql中exists的基本用法示例

作者:夙愿。 时间:2024-01-25 08:24:55 

现有:班级表(A_CLASS)

sql中exists的基本用法示例

学生表( STUDENT)

sql中exists的基本用法示例

注:学生表(STUDENT)的classId关联班级表(A_CLASS)的主键ID

代码:

select * from STUDENT s WHERE exists (select 1 from A_ClASS c where s.CLASS_ID=c.ID)

结果

sql中exists的基本用法示例

【exists语句的执行顺序如下】:

1.首先会执行外循环(select * from student

2.外循环返回的结果每一行都会拿着去内层循环执行(此时注意,内层也是循环查询的)

ps:select * from student查询的为 (c1,c1,c2,c3);此时执行顺序应该是(

第一次:select* from A_CLASS where c1=c1,第二次:select* from A_CLASS where c1=c2,

第三次:select* from A_CLASS where c1=c1,第四次:select* from A_CLASS where c1=c2,

第五次:select* from A_CLASS where c2=c1,第六次:select* from A_CLASS where c2=c2,

第七次:select* from A_CLASS where c3=c1,第八次:select* from A_CLASS where c3=c2)

注意:此时的内层子查询如果为true,则直接返回不会再继续执行本次循环;

综上所述:第二次和第四次是不会被执行的;  第一次和第三次还有第六次是符合条件的;

所以 STUDENT表中CLASS_ID字段为(c1,c2)的数据都会被查询出来;

如果将 上述语句的=换成!=会是什么效果?

select * from STUDENT s WHERE exists (select 1 from A_ClASS c where s.CLASS_ID!=c.ID)

结果如果所示: 

sql中exists的基本用法示例

具体分析一下:此时的执行应该和第一次一模一样也是循环8次分别为:

第一次:select* from A_CLASS where c1!=c1,第二次:select* from A_CLASS where c1!=c2,

第三次:select* from A_CLASS where c1!=c1,第四次:select* from A_CLASS where c1!=c2,

第五次:select* from A_CLASS where c2!=c1,第六次:select* from A_CLASS where c2!=c2,

第七次:select* from A_CLASS where c3!=c1,第八次:select* from A_CLASS where c3!=c2

但是=换成了!=;这次是第六次和第八次没有被执行,其余的全被执行,s.CLASS_ID涉及到(c1,c2,c3)并且语句都返回了true;

所以STUDENT表中CLASS_ID字段为(c1,c2,c3)的数据都会被查询出来;

附:exists与in比较

in的用法相信大家很好理解。

select * from table_name where col_name [not] in(子查询);
  • 先运行子查询,生成结果集

  • 再运行外查询时,判断col_name在不在子查询里,在的话则返回该行,不在则不返回。

  • col_name的列数和子查询的列数要相对应

当外大子小时,即查询的内容很大时,判断次数少,in优于exist【子查询小用in】

当外小子大时,即查询内容很小时,代入次数少,exists优于in【子查询大用exists】

总结:

1.exists执行外循环后,会拿着外循环的值,去内层查询,如果查询到就直接返回true,并且终止本次循环,如果是false,则会一直执行,直至循环完成还为false,则本次内循环不符合条件;

2.内层的判断条件不要写!=;查询的结果会不尽人意;

来源:https://blog.csdn.net/ibhjvbg/article/details/123344265

标签:sql,exists,查询
0
投稿

猜你喜欢

  • Python实现动态绘图的示例详解

    2021-07-08 16:44:40
  • JS脚本实现网页自动秒杀点击

    2024-04-16 09:36:09
  • layui实现显示数据表格、搜索和修改功能示例

    2024-04-18 10:01:46
  • MySQL性能优化的一些技巧帮助你的数据库

    2024-01-20 12:44:22
  • 安装SQL Server2019详细教程(推荐!)

    2024-01-22 18:23:11
  • 图文教程教你asp编译成dll组件

    2010-07-16 13:16:00
  • mysql 5.7.14 下载安装、配置与使用详细教程

    2024-01-15 14:39:25
  • python pandas dataframe 去重函数的具体使用

    2023-10-15 00:56:36
  • 基于Python编写一个简单的端口扫描器

    2021-09-19 09:21:22
  • 跟老齐学Python之print详解

    2021-02-06 03:32:56
  • 详解python中的文件与目录操作

    2023-10-15 06:15:03
  • Python常用数据库接口sqlite3和MySQLdb学习指南

    2024-01-16 00:53:56
  • Python的加密模块md5、sha、crypt使用实例

    2022-02-17 14:44:44
  • Python Request类源码实现方法及原理解析

    2021-03-23 02:23:50
  • SQL附加数据库失败问题的解决方法

    2024-01-25 19:22:10
  • python+requests接口压力测试500次,查看响应时间的实例

    2021-09-29 08:27:56
  • [图]关于网站开发中缓存 cache应用

    2008-08-19 18:14:00
  • 使用python Django做网页

    2023-11-22 03:35:26
  • MySQL批量SQL插入性能优化详解

    2024-01-21 15:25:59
  • Scrapy框架使用的基本知识

    2022-02-23 22:27:27
  • asp之家 网络编程 m.aspxhome.com