集团网站,朗朗上口的公司名称,商务网页设计与制作相关技术介绍,网络营销常用的工具和方法前情提要#xff1a;and 则是在表连接前过滤A表或B表里面哪些记录符合连接条件#xff0c;同时会兼顾是left join还是right join。即 假如是左连接的话#xff0c;如果左边表的某条记录不符合连接条件#xff0c;那么它不进行连接#xff0c;但是仍然留在结果集中#xf… 前情提要and 则是在表连接前过滤A表或B表里面哪些记录符合连接条件同时会兼顾是left join还是right join。即 假如是左连接的话如果左边表的某条记录不符合连接条件那么它不进行连接但是仍然留在结果集中此时右边部分的连接结果为NULL。on条件是在生成临时表时使用的条件它不管on中的条件是否为真都会返回左边表中的记录。 这句话是关于MySQL中的表连接操作特别是left join和right join。表连接是一种将两个或多个表的数据组合在一起的方法通常需要指定一个连接条件即哪些字段或列是相等或匹配的。例如如果有两个表a和b它们都有一个sid列那么可以用下面的语句连接它们。 这句话是关于MySQL中的表连接操作特别是left join和right join。表连接是一种将两个或多个表的数据组合在一起的方法通常需要指定一个连接条件即哪些字段或列是相等或匹配的。例如如果有两个表a和b它们都有一个sid列那么可以用下面的语句连接它们
select * from a join b on a.sid b.sid;这里的on子句就是连接条件它表示只有当a表和b表的sid列相等时才会将两个表的记录组合在一起。这种连接方式叫做inner join它只会返回满足连接条件的记录而忽略不满足的记录。
但是有时我们可能想要保留不满足连接条件的记录这就需要用到left join或right join。left join表示以左边的表为基准即使左边表的某条记录不满足连接条件也会将它保留在结果集中只是右边表的部分会用NULL填充。right join则相反以右边的表为基准保留右边表的所有记录左边表的部分用NULL填充。例如如果用下面的语句连接a表和b表
select * from a left join b on a.sid b.sid;那么即使a表中有些记录的sid在b表中不存在也会将它们包含在结果集中如下所示
idsidtypesidremark11a1A21b1A32c2B43d3C54eNULLNULL
这里a表中的第五条记录的sid为4在b表中没有对应的记录所以右边表的部分用NULL填充。
那么and和where又有什么区别呢and是用来在连接条件中添加额外的过滤条件的它会影响连接操作的结果但不会改变left join或right join的基准表。where则是用来在连接操作完成后对结果集进行过滤的它会改变最终的输出但不会影响连接操作的过程。例如如果用下面的语句连接a表和b表
select * from a left join b on a.sid b.sid and a.sid 1;那么and子句会在连接前过滤掉a表和b表中sid不等于1的记录但仍然会保留a表中的所有记录只是右边表的部分用NULL填充如下所示
idsidtypesidremark11a1A21b1A32cNULLNULL43dNULLNULL54eNULLNULL
如果用下面的语句连接a表和b表
select * from a left join b on a.sid b.sid where a.sid 1;那么where子句会在连接后过滤掉a表中sid不等于1的记录只返回满足条件的记录如下所示
idsidtypesidremark11a1A21b1A
因此and和where的区别在于and是在连接前过滤而where是在连接后过滤。and会影响连接操作的结果但不会改变left join或right join的基准表。where则会改变最终的输出但不会影响连接操作的过程。
参考 https://blog.csdn.net/qq_33864656/article/details/77838258