当前位置: 首页 > article >正文

mysql关于left join关联查询时on和where条件区别

说明:

用left join关联查询时,数据库会先生成一张临时表,我们查询到的就是临时表的数据.

1. left join:以左表为基准,根据on条件过滤连接生成临时表,on后面的过滤条件对左表无效,都会返回左表中的数据,where是生成临时表之后,再对临时表进行过滤,跟left join没啥关系了,这里过滤的是临时表数据了.

2. right join:逻辑同上

3. full join:以左表为基准,根据on条件过滤连接生成临时表,on后面的过滤条件对左右表无效

4. inner join:等值连接,根据过滤条件生成临时表。on后面的条件可以用 where实现,on=where

总结

1.用left join 进行条件过滤时,on条件只会对右表进行条件过滤,不会对左表数据产生任何影响;
2.用left join 进行条件过滤时,where条件会对结果表进行条件过滤,所以会对左表数据产生影响;
3.用inner join 用on和where没有任何区别

举个简单例子:

SELECT *  FROM A
   LEFT JOIN  B 
ON A.id = B.id and B.is_deleted = 0
WHERE  A.is_deleted = 0;

会返回所有A.is_deleted=0的数据

SELECT *  FROM A
   LEFT JOIN  B 
ON A.id = B.id 
WHERE  A.is_deleted = 0
and B.is_deleted = 0;

这里就不一定了,如果A.id=B.id的数据,但是B.is_deleted不等于0.那么该id的A表数据也不会返回


http://www.kler.cn/a/229106.html

相关文章:

  • 数学建模:数据相关性分析(Pearson和 Spearman相关系数)含python实现
  • Kafka SASL_SSL双重认证
  • wins 安装 tensorflow keras
  • 一个冷门的js加密逆向分析
  • LeetCode:9.回文数,对整数的反转操作
  • 紫光展锐M6780丨一语即达,“声”临其境
  • Django的配置文件setting.py
  • SENet在双塔中的应用
  • Oracle12c之Sqlplus命令行窗口基本使用
  • SpringBoot实战第三天
  • Android 11.0 framework实现禁用SIM卡的功能
  • 第三百零九回
  • 二叉树oj笔记
  • 安卓平台valgrind交叉编译
  • 蓝桥杯Web应用开发-浮动与定位
  • spring boot bean的生命周期
  • 为什么在产品设计和制造过程中要采用FMEA——SunFMEA软件
  • 如何发布自己的npm包:
  • node.js 使用 elementtree 生成思维导图 Freemind 文件
  • C语言之数据在内存中的存储