关于Mysql中ON与Where区别问题详解

 更新时间:2022年02月18日 10:51:08   作者:啥时能挣6000块  
在编写SQL脚本中,多表连接查询操作需要使用到on和where条件,但是经常会混淆两者的用法,从而造成取数错误,下面这篇文章主要给大家介绍了关于Mysql中ON与Where区别问题的相关资料,需要的朋友可以参考下

今天工作的时候编写了一个SQL,大家一起来看一下

SELECT * FROM user user 
LEFT JOIN 
user_message msg
ON user.id = msg.user_id AND user.name = '张三'

我们有一张user表

我们还有一张user_message表

我们执行上面的SQL后,查询结果如下

并不如我们所想的,只出现张三的结果,这是为什么呢?

经过我的整理发现查询是如下原因

关联的时候ON条件是在合并两张表形成临时表前进行的条件筛选,所以在使用 JOIN 关键字进行关联的时候,尤其是左关联或右关联的时候,不要使用 字段 = '定值' 这种筛选方式

在内关联(inner join)中,Mysql判断 字段 = '定值' 如果为false,会被筛选掉,如果为true,则会正确显示数据。

在左关联(left join)中,Mysql判断 字段 = '定值' 如果为false,会返回左表的数据,如果为true,则会正确显示显示数据。

在右关联(right join)中,Mysql判断 字段 = '定值' 如果为false,会返回右表的数据,如果为true,则会正确显示显示数据。

所以我上述的SQL会返回张三的全部数据,除张三外的所有数据只会返回左表数据,右表全部为null,无论是否可以匹配到

where是在临时表创建成功后,再次对临时表进行筛选的,所以此时我们可以对关联后的数据随意进行筛选。

区别总结:

先执行on,后执行where;on是建立关联关系,where是对关联关系的筛选。

比如两个表进行left join连接查询结果,where会对查询的结果进行过滤, on会返回驱动表的所有数据。

left join按照条件关联,不管是否为真,都返回左边表的数据。

 总结

到此这篇关于关于Mysql中ON与Where区别问题的文章就介绍到这了,更多相关Mysql ON与Where区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 全面解析Windows下安装 mysql5.7的方法

    全面解析Windows下安装 mysql5.7的方法

    这篇文章主要介绍了全面解析Windows下安装 mysql5.7的方法的相关资料,需要的朋友可以参考下
    2016-07-07
  • 解决Windows10下mysql5.5数据库命令行中文乱码问题

    解决Windows10下mysql5.5数据库命令行中文乱码问题

    重置系统后,很久之前安装的MySQL数据库出现了控制台查询中文乱码问题,时间太久早已经不记得怎么设置了。下面通过本文给大家分享Windows10下解决MySQL5.5数据库命令行中文乱码问题,一起看看吧
    2017-07-07
  • Mysql大型SQL文件快速恢复方案分享

    Mysql大型SQL文件快速恢复方案分享

    这篇文章主要给大家介绍了关于Mysql大型SQL文件快速恢复方案的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • MySQL 的 20+ 条最佳实践

    MySQL 的 20+ 条最佳实践

    数据库操作是当今 Web 应用程序中的主要瓶颈。 不仅是 DBA(数据库管理员)需要为各种性能问题操心,程序员为做出准确的结构化表,优化查询性能和编写更优代码,也要费尽心思。 在本文中,我列出了一些针对程序员的 MySQL 优化技术
    2016-12-12
  • MSQL中DATETIME或TIMESTAMP的区别小结

    MSQL中DATETIME或TIMESTAMP的区别小结

    MySQL中的 DATETIME 和 TIMESTAMP 类型都用于存储日期和时间信息,本文主要介绍了MSQL中DATETIME或TIMESTAMP的区别小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 详解Mysql数据库date, datetime类型设置0000-00-00默认值(default)报错问题

    详解Mysql数据库date, datetime类型设置0000-00-00默认值(default)报错问题

    这篇文章主要介绍了详解Mysql数据库date, datetime类型设置0000-00-00默认值(default)报错问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • mysql创建用户并赋予用户权限详细操作教程

    mysql创建用户并赋予用户权限详细操作教程

    这篇文章主要给大家介绍了关于mysql创建用户并赋予用户权限详细操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • mysql删除重复行的实现方法

    mysql删除重复行的实现方法

    这篇文章主要介绍了mysql删除重复行的实现方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • Linux下mysql 8.0.15 安装配置图文教程以及修改密码

    Linux下mysql 8.0.15 安装配置图文教程以及修改密码

    这篇文章主要为大家详细介绍了Linux下mysql 8.0.15安装配置图文教程以及修改密码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • mysql获取group by总记录行数的方法

    mysql获取group by总记录行数的方法

    这篇文章主要介绍了mysql获取group by总记录行数的方法,主要通过group by SQL_CALC_FOUND_ROWS语句来实现该功能,具有一定的实用价值,需要的朋友可以参考下
    2014-10-10

最新评论