mysql中inner join和left join使用详解

 更新时间:2023年03月30日 10:38:06   作者:Nuyoahll-_-ll  
本文主要介绍了mysql中inner join和left join使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

区别

返回不同
1、inner join只返回两个表中联结字段相等的行
2、left join的数量小于等于左表和右表中的记录数量。

数量不同
1、inner join返回包括左表中的所有记录和右表中联结字段相等的记录。
2、left join的数量以左表中的记录数量相同

记录属性不同
1、inner join不足的记录属性会被直接舍弃
2、left join不足的记录属性用NULL填充

inner join 场景

设计两张表:

  • channel 频道表:有频道id、频道name等
  • module 模块表:模块id、模块name、channe_id。

页面展示频道时,可能会有新增了一个频道但是没有模块,此时不能用inner join 不然新增的模块查询不出来,所以用left join

 select channel.* from  channel left join modules on channel.id = modules.channel_id
 where page_id=1
 group by channel.id order by channel.new_sort asc , channel.id desc

1、page_id是指在哪个页面类型下,在频道channel表中定义,用来区分哪个页面类型
2、一个频道id可能有多个模块去关联,所以需要按照频道id进行分组
3、new_sort可以设置频道的排序显示,另外排序相同应该让频道最先创建的显示在前面。

以下这种情况新创建的频道就不会显示,并且没有模块的频道也不会显示。

select channel.*  from channel inner join modules on channel.id=modules.channel_id
where page_id=1 group by channel.id order by channel.new_sort asc , channel.id desc 

最后:有点疑问,频道只做显示频道相关信息,并没有用到关联的模块信息,所以感觉这样也能满足需求了。后续发现问题再更吧~

 select channel.* from  channel
 where page_id=1 order by channel.new_sort asc , channel.id desc

额~补充问题,上面遗留的问题是页面上需要查询module的id所以才关联了。

之前还遇到了个inner join 的场景,后续再补~

inner join 场景

新加一个策略表policy_lib 、然后再创建一个中间表channel_policy记录 channel频道和policy_lib策略表关联。
那么显然sql这样写

select policy_lib.id,channel_policy.policy_id,channel_policy.channel_id,channel.id  from policy_lib inner join channel_policy on channel_policy.policy_id=policy_lib.id 
inner join channel on channel.id=channel_policy.channel_id

使用inner join 显然结果查询出来不会有空的情况,如果用left join 万一表中有脏数据,左边有数据右边时空的,在处理的时候还需要考虑是否有空的情况显然不合理。

到此这篇关于mysql中inner join和left join使用详解的文章就介绍到这了,更多相关mysql中inner join和left join内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在SpringBoot中实现WebSocket会话管理的方案

    在SpringBoot中实现WebSocket会话管理的方案

    在构建实时通信应用时,WebSocket 无疑是一个强大的工具,SpringBoot提供了对WebSocket的支持,本文旨在探讨如何在 Spring Boot 应用中实现 WebSocket 会话管理,我们将通过一个模拟的场景一步步展开讨论,需要的朋友可以参考下
    2023-11-11
  • ubuntu安装mysql数据库方法

    ubuntu安装mysql数据库方法

    ubuntu基于linux的免费开源桌面PC操作系统,十分契合英特尔的超极本定位,支持x86、64位和ppc架构。这篇文章给大家介绍ubuntu安装mysql数据库方法,非常不错,需要的朋友参考下吧
    2019-08-08
  • MySQL sum后再计算percentage的多种解决办法

    MySQL sum后再计算percentage的多种解决办法

    这篇文章主要介绍了MySQL sum后再计算percentage的多种解决办法,over() 函数,Cross Join,Select 嵌套查询以及 with 函数处理,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-06-06
  • MySQL 5.7并发复制隐式bug实例分析

    MySQL 5.7并发复制隐式bug实例分析

    这篇文章主要给大家介绍了关于MySQL 5.7并发复制隐式bug的相关资料,文中介绍的非常详细,对大家学习或者使用mysql5.7具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • MySQL按天分组统计一定时间内的数据实例(没有数据补0)

    MySQL按天分组统计一定时间内的数据实例(没有数据补0)

    我们在用Mysql制作数据可视化图表时候,经常需要按照天对数据进行分组统计,下面这篇文章主要给大家介绍了关于MySQL按天分组统计一定时间内的数据,没有数据补0的相关资料,需要的朋友可以参考下
    2023-03-03
  • mysql中的不等于实例详解

    mysql中的不等于实例详解

    这篇文章主要介绍了mysql中的不等于实例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • 基于mysql事务、视图、存储过程、触发器的应用分析

    基于mysql事务、视图、存储过程、触发器的应用分析

    本篇文章是对mysql事务、视图、存储过程、触发器的应用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • MySQL 迁移后无法快速导数据问题解决

    MySQL 迁移后无法快速导数据问题解决

    这篇文章主要为大家介绍了MySQL 迁移后无法快速导数据问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • MySQL主从数据库搭建方法详解

    MySQL主从数据库搭建方法详解

    这篇文章主要介绍了MySQL主从数据库搭建方法,较为详细的分析了MySQL主从数据库搭建的原理、步骤与具体操作技巧,需要的朋友可以参考下
    2017-09-09
  • SQL中CONVERT转换函数的简单使用方法

    SQL中CONVERT转换函数的简单使用方法

    CONVERT()函数对于简单类型转换,CONVERT()函数和CAST()函数的功能相同,只是语法不同,下面这篇文章主要给大家介绍了关于SQL中CONVERT转换函数的简单使用方法,需要的朋友可以参考下
    2024-01-01

最新评论