sql中exists的基本用法示例

目录
  • 【exists语句的执行顺序如下】:
  • 附:exists与in比较
  • 总结:

现有:班级表(A_CLASS)

学生表( STUDENT)

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

代码:

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

结果

【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)

结果如果所示:

具体分析一下:此时的执行应该和第一次一模一样也是循环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.内层的判断条件不要写!=;查询的结果会不尽人意;

到此这篇关于sql中exists基本用法的文章就介绍到这了,更多相关sql exists的用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SQL查询中in和exists的区别分析

    select * from A where id in (select id from B); select * from A where exists (select 1 from B where A.id=B.id); 对于以上两种情况,in是在内存里遍历比较,而exists需要查询数据库,所以当B表数据量较大时,exists效率优于in. 1.select * from A where id in (select id from B); in()只执行一次,它查出B表中的所有id字段并缓存

  • sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句

    在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.在子查询中,NOT IN子句将执行一个内部的排序和合并.无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历).为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS. 如 我要查询 Sendorder表中的冗余数据(没有和reg_person或worksite相连的数

  • mysql exists与not exists实例详解

    mysql exists与not exists实例详解 tableA |column1 | column1 |column3 | tableb |column1 | column1 |column3 | 要查询 tableA 的数据,条件是是 tableA.column1 不在 tableB 的 tableB.column2 中 也就是要得到类似以下语句的效果(not in 效果不完全等同于 not exists , 如果子查询中出现空记录, 则整个查询语句不会返回数据) SELECT a.*

  • SQL中Exists的用法

    比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID FROM Orders o WHERE o.CustomerID=c.CustomerID) 这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在OrderID里面啊,这是如何匹配的呢? EX

  • 详解sql中exists和in的语法与区别

    exists和in的区别很小,几乎可以等价,但是sql优化中往往会注重效率问题,今天咱们就来说说exists和in的区别. exists语法: select - from table where exists (子查询) 将主查询的结果,放到子查询结果中进行校验,如子查询有数据,则校验成功,那么符合校验,保留数据. create table teacher ( tid int(3), tname varchar(20), tcid int(3) ); insert into teacher va

  • SQL中exists的使用方法

    有一个查询如下: 复制代码 代码如下: SELECT c.CustomerId, CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID FROM Orders o WHERE o.CustomerID = cu.CustomerID) 这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在OrderID里面啊,这是如何匹配的呢? E

  • sql中exists的基本用法示例

    目录 [exists语句的执行顺序如下]: 附:exists与in比较 总结: 现有:班级表(A_CLASS) 学生表( STUDENT) 注:学生表(STUDENT)的classId关联班级表(A_CLASS)的主键ID 代码: select * from STUDENT s WHERE exists (select 1 from A_ClASS c where s.CLASS_ID=c.ID) 结果 [exists语句的执行顺序如下]: 1.首先会执行外循环(select * from st

  • 详细聊聊sql中exists和not exists用法

    目录 exists: exists 和in 的区别 not exists详细介绍: 附案例分析 总结 之所以要说这个问题,是因为项目中用到了not exists,但两者写的语句只有一点差别,结果一个有问题了,一个没问题.具体问题下面详细说明,先来看看exists如何应用. exists: 强调的是是否有返回集,不需知道具体返回的是什么,比如: SELECT * FROM customer WHERE not EXISTS ( SELECT 0 FROM customer_goods WHERE

  • SQLServer中exists和except用法介绍

    目录 一.exists 1.1 说明 1.2 示例 1.3 intersect/2017-07-21 二.except 2.1 说明 2.2 示例 三.测试数据 一.exists 1.1 说明 EXISTS(包括 NOT EXISTS)子句的返回值是一个 BOOL 值.EXISTS 内部有一个子查询语句(SELECT ... FROM...),我将其称为 EXIST 的内查询语句.其内查询语句返回一个结果集. EXISTS 子句根据其内查询语句的结果集空或者非空,返回一个布尔值. exists:

  • Java中枚举类的用法示例详解

    目录 1.引入枚举类 2.实现枚举类 3.枚举类的使用注意事项 4.枚举的常用方法 5.enum细节 1.引入枚举类 Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等. Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割. 示例: enum Color { RED, GREEN, BLUE; } 2.实现枚举类 接下来我们来看一个一个简单的DEMO示例: /** * java枚举 */ p

  • SQL中where语句的用法及实例代码(条件查询)

    目录 1.where语法和用法 (1)语法:where <criteria> 即where <查询条件> (2)用法:获取满足一定条件的目标数据. 2.实例 (1)单一条件查询 (2)多条件查询 补充:引号的使用 总结 1.where语法和用法 (1)语法:where <criteria> 即where <查询条件> 具体查询语句:select <字段> from <表名> where <查询条件> 说明:①多个条件则用“

  • SQL语句中EXISTS的详细用法大全

    目录 前言 一.建表 二.在SELECT语句中使用EXISTS 1.在SQL中使用EXISTS 2.在SQL中使用NOT EXISTS 3.在SQL中使用多个NOT EXISTS 4.在SQL中使用多个EXISTS 5.在SQL中使用NOT EXISTS和EXISTS 三.在DELETE语句中使用EXISTS 1.在MySQL中使用 2.在Oracle中使用 四.在UPDATE语句中使用EXISTS 1.在MySQL中使用 2.在Oracle中使用 总结 前言 在业务开展中,会遇到类似需求. 需

  • sql中case语句的用法浅谈

    SQL中Case的使用方法 Case具有两种格式.简单Case函数和Case搜索函数. 复制代码 代码如下: --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 这两种方式,可以实现相同的功能.简单Case函数的写法相对比较简洁,但是和Case搜索函数相比

  • SQL Server触发器和事务用法示例

    本文实例讲述了SQL Server触发器和事务用法.分享给大家供大家参考,具体如下: 新增和删除触发器 alter trigger tri_TC on t_c for INSERT,delete as begin set XACT_ABORT ON declare @INSERTCOUNT int; declare @DELETECOUNT int; declare @UPDATECOUNT int; set @INSERTCOUNT = (select COUNT(*) from insert

随机推荐