当前位置:数据库 > SQL语言> 正文

SQL中Exists的用法

时间:2013-11-10类别:数据库

SQL中Exists的用法

SQL中Exists的用法
 
语法


EXISTS subquery

 

参数

subquery

是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。有关更多信息,请参见 Select 中有关子查询的讨论。

 

结果类型


Boolean

 

结果值


如果子查询包含行,则返回 TRUE。

 

说明

 

EXISTS(包括 NOT EXISTS )子句的返回值是一个BOOL值。 EXISTS内部有一个子查询语句(SELECT ... FROM...), 我将其称为EXIST的内查询语句。其内查询语句返回一个结果集。 EXISTS子句根据其内查询语句的结果集空或者非空,返回一个布尔值。

一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。

 

Exists是子查询的一种条件形式,通过判断Exists的选择表达式(括号内的部分)的结果,如果存在一行或多行结果记录,则Exists整个子查询结果为真,否则为假。由于我们采用Exists来实现子查询,只需要关心是否存在满足条件的记录,所以选择表达式的选择列表采用*来实现,当然,你也可以在选择列表指明具体的某些列,但这些列将在整个搜索过程中被忽略。
 

Exists实例

  •  
  • SQL 代码   复制
  • 
    select  Resc_id  from  dbo.Res_Coach
    where  EXISTS (select * from  Res_Coach  where  Resc_id  is  null)
    
    
    				
  • 查询原理:

    遍历dbo.Res_Coach每一条,同时处理where条件(EXISTS (select * from Res_Coach where Resc_id=0) 判断结果为true或者false),为true时拿出该条,false时,放弃该条记录。

     

  • SQL 代码   复制
  • 
    -- 1、  where条件中的子查询和主查询没关系
    
    select  Resc_id
    
    from  dbo.Res_Coach
    
    where  EXISTS (select  Rese_id  from  dbo.Res_Excellent  where  Rese_id  Is  null )
    
     
    
    -- 2、  where条件中得子查询和主查询有关系
    
    select  Resc_id
    
    from  dbo.Res_Coach
    
    where  EXISTS (select  Resc_id  from  dbo.Res_Coach  where  Resc_id  Is  null )
    
    
    		
  • 实例备注:不管where条件中得子查询和主查询有没有关系,遍历主查询中得每一条时,判断where条件,exists结果为真,where条件返回true,拿出该条记录,where条件返回false, 不返回该记录。

     

    Exists 和 In 的选择

     

    如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in

    上一篇下一篇

    猜您喜欢

    热门推荐