三表左连接(LEFT JOIN) — 两表之间的关系

这篇具有很好参考价值的文章主要介绍了三表左连接(LEFT JOIN) — 两表之间的关系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

三表左连接(LEFT JOIN)

问题:

  最近遇到需求多表连接,要求A表所有数据均展示,B表和C表关联A表,若A表有的B,C表没有则展示为null,由此引发以下问题:文章来源地址https://www.toymoban.com/news/detail-400985.html

  1. A表作为基表,先关联B表,关联条件为A.userId=B.userId;
  2. 再关联C表,关联条件是A.userId=C.userId还是B.userId=C.userId呢?这两个条件有什么区别吗?

测试:

  1. 建表:user_info
    三表左连接(LEFT JOIN) — 两表之间的关系
  2. A表:
    (select userId,count(*) as count1 from user_info where userName is not null group by userId) A
    结果:包含userId为1,2,3,4的数据
    三表左连接(LEFT JOIN) — 两表之间的关系
  3. B表:
    (select userId,count(*) as count2 from user_info where userName='tom' group by userId) b
    结果:包含userId为1,3,4的数据
    三表左连接(LEFT JOIN) — 两表之间的关系
  4. C表:
    select userId,count(*) as count3 from user_info where userId>1 group by userId
    结果:包含userId为2,3,4的数据
    三表左连接(LEFT JOIN) — 两表之间的关系

第一种连接方式

  1. A表作为基表,连接条件选择:A.userId=B.userId   A.userId=C.userId
select a.userId,a.count1,b.count2,c.count3 from 
(select userId,count(*) as count1 from user_info where userName is not null group by userId) a
left join
(select userId,count(*) as count2 from user_info where userName='tom' group by userId) b
on a.userId = b.userId
left join
(select userId,count(*) as count3 from user_info where userId>1 group by userId) c
on a.userId = c.userId
  1. 结果:
    三表左连接(LEFT JOIN) — 两表之间的关系

第二种连接方式

  1. A表作为基表,连接条件选择:A.userId=B.userId   B.userId=C.userId
select a.userId,a.count1,b.count2,c.count3 from 
(select userId,count(*) as count1 from user_info where userName is not null group by userId) a
left join
(select userId,count(*) as count2 from user_info where userName='tom' group by userId) b
on a.userId = b.userId
left join
(select userId,count(*) as count3 from user_info where userId>1 group by userId) c
on b.userId = c.userId
  1. 结果:
    三表左连接(LEFT JOIN) — 两表之间的关系

结论

  1. 第一种连接方式:A,B表连接时,A表作为基表,故A表中的数据全部显示,B表中userId为1,3,4时正常显示,为2时自动补null值;A,C表连接时,A表仍然为基表,当userId为2,3,4时C表正常显示,为1时自动补null值。
  2. 第二种连接方式:A,B表连接时,与第一种连接方式相同;B,C表连接时,此时B表为基表,由于B表没有userId为2的值,故C表的userId为2的值也不显示,故C表只显示userId为3,4的数据。

到了这里,关于三表左连接(LEFT JOIN) — 两表之间的关系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pandas Power Play: 构建数据帝国的两表JOIN和group by之旅

    在数据分析的过程中,常常需要把多张表格进行合并,或者按照某些规则进行分组统计。Pandas是Python中一个非常强大的数据处理库,其中的JOIN和group by函数能够帮助我们轻松地完 成这些任务。本教程将详细介绍如何使用这两个函数,让你在数据分析的道路上更加游刃有余!

    2024年02月05日
    浏览(37)
  • MySQL Inner Join 和 Left Join 详解

    Inner Join Inner Join 是一种 SQL 查询语句,用于在两个或多个表中查找共有的行。Inner Join 的语法如下: SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name; 其中, table1 和 table2 是需要连接的表, column_name 是需要返回的列名。 ON 用于指定连接条件。

    2024年02月05日
    浏览(51)
  • MySQL - Left Join和Inner Join的效率对比,以及优化

    最近在写代码的时候,遇到了需要多表连接的一个问题,初始sql类似于: 这样的多个left join组合,总觉得这种写法是有问题的,后续使用inner join发现速度要比left join快一些 关于left join的概念,大家是都知道的(返回左边全部记录,右表不满足匹配条件的记录对应行返回nul

    2024年02月03日
    浏览(52)
  • SQL联表查询LEFT JOIN 数据去重复

    使用left join联表查询时,如果table1中的一条记录对应了table2的多条记录,则会重复查出id相同的多条记录。 解决方法: 将查询结果作为中间表,使用group by 进行去重 如果想对group by后的数据计算count,可以将查询结果作为中间表再计算count

    2024年02月11日
    浏览(67)
  • 业务数据LEFT JOIN 多表查询慢--优化操作

    首先你会想到,给表加索引,那么mysql会给主键自动建立索引吗? 会的,当然会。 在我们查询的业务表操作的时候,表业务数据庞大起来的时候,以及left join多的时候,甚至多表关联到几十张表的时候,查询是慢到不行。 这时候,只需要给表join查询的字段,及表结构,进行索

    2024年02月02日
    浏览(43)
  • Mysql表关联简单介绍(inner join、left join、right join、full join不支持、笛卡尔积)

    A 是1、2、3 B是2、3、4 A、B的交集是A∩B = 2、3 A、B的并集是 AUB = 1、2、3、4 A、B的差集是 A-B = 1 B、A的差集是 B-A = 4 造数据 select A. ,B. from xin_stu_t_bak A inner join xin_teach_t_bak B on A.relation_id = B.id order by A.id; select distinct A. ,B. from xin_stu_t_bak A inner join xin_teach_t_bak B on A.relation_id = B.id

    2024年01月17日
    浏览(53)
  • Oracle中LEFT JOIN后AND与WHERE的异同

    1、AND 过滤之后再连接 2、WHERE 连接之后再过滤 (1)、建表及插入测试数据 (2)、on后面and 条件表示先过滤之后,再连接 以下两种写法,所得的结果相同: (3)、on后面where条件表示先关联之后,再过滤   (4)、全值的情况   (5)、说明: 用到此类连接的情况,多为事实表为主表,维

    2024年02月10日
    浏览(41)
  • 工作的记录 left join on and 和 inner join on and的多条件查询区别

    eElasticsearch使用——结合MybatisPlus使用ES es和MySQL数据一致性 结合RabbitMQ实现解耦-CSDN博客 关于相对定位与绝对定位的区别_相对定位和绝对定位的区别-CSDN博客 display:flex(弹性盒子布局)详解_display: flex-CSDN博客 justify-content - CSS:层叠样式表 | MDN (mozilla.org) align-items - CSS:层叠样式

    2024年02月10日
    浏览(47)
  • mysql的两张表left join 进行关联后,索引进行优化案例

    1.表1没加索引  2.表2没加索引 3.查看索引 1.表1添加索引   2.表2添加索引   3.查看  

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包