SQL 中in exists 和临时表用法

本文通过具体示例对比了使用IN和EXISTS进行SQL查询的区别,并介绍了如何利用临时表提高查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近在做项目时,遇到一个问题,同组的一位大哥,帮我解决了,先谢谢他。我写此文章来给大家参考.

    直接来看示例,先给出两张表。

 表A:

  

   表B:

  

这是两张表。我们用表B里的两个字段来查表A的记录

先看一下SQL 语句:

SELECT   *   FROM  A
WHERE  bID  IN ( SELECT  bID  FROM  B)  AND
bName 
IN ( SELECT  bName  FROM  B)

上面是代码和结果,我用了两个IN 中间用AND来查结果,本来的意思是想取结果中的第一条记录,没想到全取出来了

这样结果就不是我们想要的了,其实想一下,也能明白,IN里要满足条件都可以,注意再看一下查出来的结果,都满足条件,本来表A中的第一条和最后一条为空的都没查出来。

如果你是想取这样的结果,那也可以了,可是如果是只想取第一条呢。怎么办。

请看结果:

上面是用EXISTS来做查询的,这样就不会出现刚上面的问题了。

上面语句中有个select 1 from B这句,可能有不明白,你在SQL里运行一下就明白了。其实就是一个无列名的列,数据全为1,你想一下,我只查一条,不就只有一个1这条记录的数据了吗,这样执行速度也快。

 

同时还可以用临时表来做。

看结果:

看出来了吗,把B的结果放入临时表中,用日临时表去查,可以这个示例中执行起来并没有上面的快,如果你的语过多的话,日临时表执行的速度就快了。

而且主是代码可以少写点了,看成变量来用。这样用起来也方便!

查询还好,如果你是在做删除操作呢,岂不是误删除了好多数据。后果可想而知!

已下是一个临时表的文章可以看一下:http://database.51cto.com/art/200907/132827.htm

转载于:https://www.cnblogs.com/stalwart/archive/2010/12/11/1902981.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值