SQL|SQL 中in exists 和临时表用法

最近在做项目时,遇到一个问题,同组的一位大哥,帮我解决了,先谢谢他。我写此文章来给大家参考.
直接来看示例,先给出两张表。
 表A:
SQL|SQL 中in exists 和临时表用法
文章图片

表B:
SQL|SQL 中in exists 和临时表用法
文章图片

【SQL|SQL 中in exists 和临时表用法】这是两张表。我们用表B里的两个字段来查表A的记录
先看一下SQL 语句:
SELECT * FROM A
WHERE bID IN ( SELECT bID FROM B) AND
bName IN ( SELECT bName FROM B) SQL|SQL 中in exists 和临时表用法
文章图片

上面是代码和结果,我用了两个IN 中间用AND来查结果,本来的意思是想取结果中的第一条记录,没想到全取出来了
这样结果就不是我们想要的了,其实想一下,也能明白,IN里要满足条件都可以,注意再看一下查出来的结果,都满足条件,本来表A中的第一条和最后一条为空的都没查出来。
如果你是想取这样的结果,那也可以了,可是如果是只想取第一条呢。怎么办。
请看结果:
SQL|SQL 中in exists 和临时表用法
文章图片

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

同时还可以用临时表来做。
看结果:
SQL|SQL 中in exists 和临时表用法
文章图片

看出来了吗,把B的结果放入临时表中,用日临时表去查,可以这个示例中执行起来并没有上面的快,如果你的语过多的话,日临时表执行的速度就快了。
而且主是代码可以少写点了,看成变量来用。这样用起来也方便!
查询还好,如果你是在做删除操作呢,岂不是误删除了好多数据。后果可想而知!
已下是一个临时表的文章可以看一下:http://database.51cto.com/art/200907/132827.htm
转载于:https://www.cnblogs.com/stalwart/archive/2010/12/11/1902981.html

    推荐阅读