• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
thankgoodness
博客园    首页    新随笔    联系   管理    订阅  订阅

Exists的用法

Exists的用法
指定一个子查询,检测行的存在。  

语法
EXISTS subquery  

参数
subquery

是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。

结果类型
Boolean

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

例子:

1.比较使用 EXISTS 和 IN 的查询

这个例子比较了两个语义类似的查询。第一个查询使用 EXISTS 而第二个查询使用 IN。注意两个查询返回相同的信息。

USE pubs
GO
SELECT DISTINCT pub_name
FROM publishers
WHERE EXISTS
      (SELECT *
      FROM titles
      WHERE pub_id = publishers.pub_id
      AND type = 'business')
GO

-- Or, using the IN clause:

USE pubs
GO
SELECT distinct pub_name
FROM publishers
WHERE pub_id IN
      (SELECT pub_id
      FROM titles
      WHERE type = 'business')
GO

下面是任一查询的结果集:

pub_name                                   
----------------------------------------
Algodata Infosystems                       
New Moon Books                             

(2 row(s) affected)
2.比较使用 EXISTS 和 = ANY 的查询
本示例显示查找与出版商住在同一城市中的作者的两种查询方法:第一种方法使用 = ANY,第二种方法使用 EXISTS。注意这两种方法返回相同的信息。

USE pubs
GO
SELECT au_lname, au_fname
FROM authors
WHERE exists
      (SELECT *
      FROM publishers
      WHERE authors.city = publishers.city)
GO

-- Or, using = ANY

USE pubs
GO
SELECT au_lname, au_fname
FROM authors
WHERE city = ANY
      (SELECT city
      FROM publishers)
GO

下面是任一查询的结果集:

au_lname                                    au_fname               
---------------------------------------- --------------------
Carson                                      Cheryl                 
Bennet                                      Abraham                

(2 row(s) affected)


3.与GROUP BY的使用

一张表,如下:

gcd          intvalue      strvalue  
---------- ----------- ----------
1            3             abc
1            4             NULL
1            1             abd
2            7             xyz
2            30            cde
2            8             NULL
3            300           wen
4            60            NULL

要求根据GCD分组,得到intvalue的和,如果该组中存在null,则显示为false,否则为true:

select gcd,

          sum(intvalue),

          case when exists(select 1 from test i where i.gcd = o.gcd and strvalue is not null) then 'true' else 'false' end
from test o
group by gcd

结果:

gcd                         
---------- ----------- -----
1            8             true
2            45            true
3            300           true
4            60            false

(4 row(s) affected)

posted @ 2008-05-26 16:29  宇晨  阅读(368)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3