sql 语句查询存在于一张表中而不存在于另外一张表数据的三种最常用方法

学习笔记 马富天 2019-04-11 19:18:05 9 1

【摘要】很多时候,我们都需要查询已存在于 tbl_a 表而不存在于 tbl_b 的数据,那么都有哪些方法呢,本文记录了三种方法,并比较它们的优劣。

首先给出两张表 tbl_a 和 tbl_b ,表内容如下所示:

请输入图片名称

方法一:not in

采用 not in 方式优点在于 sql 语言很好理解,一看就能够看懂语句的意思,缺点在于当数据量较大的时候,查询时间长,即其 sql 效率低,当然在数据量较小的时候还是可以使用的。

select distinct a.name from tbl_a a where a.name not in (select distinct b.name from tbl_b b);

方法二:left join ... on

这种方法的效率比 not in 的高,但是不太好理解,不过如果将它想象成一张关联后的大表,把 b 表中不存在的数据去掉即能够很好的理解。

  1. select distinct a.name from tbl_a a left join tbl_b b on a.name = b.name where b.name is null;

方法三:not exists

这种方法,是最为高效的,而且也是比较好理解的,建议大家一定要记住这一方法!

exists(sql 返回结果集为真)、not exists(sql 不返回结果集为假)

效率对比:select 1 > select name > select *

  1. select distinct a.name from tbl_a a where not exists(select 1 from tbl_b b where a.name = b.name);

最后查询出来的结果都是:

请输入图片名称

当然除了这三种方式之外,肯定还有其他方法,但是咱们不需要记住这么多,因为脑子可能记不住。

版权归 马富天PHP博客 所有

本文标题:《sql 语句查询存在于一张表中而不存在于另外一张表数据的三种最常用方法》

本文链接地址:http://www.mafutian.net/416.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 SQL 语句中 count() 与 distinct() 函数合用简介 》 下一篇《 Python 3.5 利用 Urllib3 包发送 post 请求并设置 header 和 body 中携带 json 格式数据 》

所有评论

  1. 首页
  2. 上一页
  3. 1
  4. 下一页
  5. 尾页
  6. 第1页
  7. 每页12条
  8. 共1页
  9. 共1条
评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码

TOP10

  • 浏览最多
  • 评论最多