mysql中left join设置条件在on与where时的用法区别分析
作者:怀素真 发布时间:2024-01-12 15:05:52
本文实例讲述了mysql中left join设置条件在on与where时的用法区别。分享给大家供大家参考,具体如下:
一、首先我们准备两张表来进行测试。
CREATE TABLE `a` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(32) DEFAULT '' COMMENT '名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `b` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`a_id` int(11) DEFAULT '0' COMMENT 'a表ID',
`name` varchar(32) DEFAULT '' COMMENT '名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
两个表的数据如图所示:
运行下面左连接查询:
select * from a left join b on a.id = b.a_id;
我们分别在on和where后面加上条件,看看执行结果是否相同。
select * from a left join b on a.id = b.a_id and b.id > 3;
select * from a left join b on a.id = b.a_id where b.id > 3;
上面的两条语句,条件我们设置的是一样的都是b.id > 3,为什么显示结果不同。
sql语句查询的关键字顺序一般为 from > where > group by > having > order by
left join 在 from范围,on 条件会先对 left join 的右表进行筛选,筛选完后的结果 where 再进行筛选。
多个 left join 会生成一张临时表,on 条件是对 left join 右表进行条件过滤,where 条件针对最后生成的临时表进行过滤。
所以:
b.id > 3 的条件如果写在 on 后面,则是先对右边表(关联表)进行筛选,得出符合条件的行,然后主表 left join ,返回主表所有的行,右边表没匹配上的用 null 表示。
b.id > 3 的条件如果写在 where 后面,则是先主表 left join 右边表(关联表),返回所有的行,然后 where 条件再对结果进行筛选。
注意:on 后面的条件是针对右边的表(关联表),对主表没什么作用。
select * from a left join b on a.id = b.a_id and a.id > 3;
我们在on 后面添加了对主表的条件 a.id > 3,不过主表的数据仍然全部显示出来了,但是影响了右边表(关联表)的显示。
如果想要对主表进行筛选,应该把条件写在where后。
select * from a left join b on a.id = b.a_id where a.id > 3;
希望本文所述对大家MySQL数据库计有所帮助。
来源:https://www.cnblogs.com/jkko123/p/10148927.html
猜你喜欢
- 作者:敖士伟 Email:ikmb@163.com 转载注明作者 说明: 1、js根据表单元素class属性,把表单元素的name和valu
- 某些时候我们需要让类动态的添加属性或方法,比如我们在做插件时就可以采用这种方法。用一个配置文件指定需要加载的模块,可以根据业务扩展任意加入需
- 在这节教程中,我们将探讨PyQt5中的拖放操作。在计算机图形用户界面(GUI)中,拖放是在某个虚拟对象上点击并拖动到另一个位置或虚拟对象上的
- 本文实例讲述了JS实现的字符串数组去重功能。分享给大家供大家参考,具体如下:这里只考虑最简单字符串的数组去重,暂不考虑,对象,函数,NaN等
- 如下所示:def signal_xHz(A, fi, time_s, sample):return A * np.sin(np.linspa
- 举例写文章详情页面的时候的一个场景:首先更改文章详情中的 PV,然后读取文章详情,然后根据文章详情中文章 Id 查阅该文章评论和该文章作者信
- 导读:在Java中我们使用try-catch进行异常处理,同样的JavaScript也提供了和异常处理类似的异常处理机制,本节我们将对Jav
- 语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征。
- 1、使用索引来更快地遍历表。缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索
- 用6N±1法求素数 任何一个自然数,总可以表示成为如下的形式之一: 6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2
- 可能很多人都要问,网站的文字还需要设计吗?对于很多的网站来说,字在整个网站的内容中占了80%以上甚至更多,或者换个角度上说,网站可以没有颜色
- 本文实例讲述了python使用urlparse分析网址中域名的方法。分享给大家供大家参考。具体如下:这里给定网址,通过下面这段python代
- 在数据库查询的时候,我们有时有这样的需求,就是要找出数据表里指定范围行内的数据记录,比如说要找出数据表里第10行到第20行的这10条数据,那
- model:class Profile(models.Model): user = models.OneToOneField(User, o
- 在SQL Server 2005中,它的另外一个强大的新特点是数据库快照。数据库快照是一个数据库的只读副本,它是数据库所有数据的映射,由快照
- //我修改之,能正常运行,测试环境为mysql5.0,xp //关键是设置对字符集,设置gbk,gb2312测试通过,utf8测试未通过 /
- 在tensorflow中,有三种方式输入数据1. 利用feed_dict送入numpy数组2. 利用队列从文件中直接读取数据3. 预加载数据
- 写一个循环删除的过程。 create or replace procedure delBigTab(p_TableName in varch
- 在Web开发者中,Google Chrome是使用最广泛的浏览器。六周一次的发布周期和一套强大的不断扩大开发功能,使其成为了web开发者必备
- OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。本文对OAuth 2.0的