inner join和left join的使用以及执行顺序

本文详细介绍了SQL查询中inner join和left join的使用方法,探讨了它们在查询过程中的执行顺序,同时关注了这两类连接对查询性能的影响。通过实例分析,帮助读者理解如何根据需求选择合适的连接类型,并优化查询语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好久没有写关于程序媛的技术文章了,昨天室友问了一些数据库相关的问题,那我们就来谈谈数据库吧。
那问的是什么问题呢?
我们来举个例子:
现有以下数据库表:
1.学生表Student,表中包含字段StudentId(学生号),Mobile(手机号);
2.学生资料存放表Information,表中包含字段StudentId(学生号),InfoRelationId(信息关联Id)
3.学生兴趣爱好表Hobby,表中包含字段Id(与上面信息关联Id关联),表中包含字段有Sports,Movies,Books
如下图:
学生表
信息表
兴趣爱好表

当下我需要做一件是,已经知道了学生的手机号,需要获取到对应的兴趣爱好等信息,那么我们可以怎么实现呢?如下:
select i.StudentId, h.Sports,h.Movies,h.Booksfrom TCDaTangOrder.Student s inner join TCDaTangOrder.Information i on i.StudentId = s.StudentIdinner join TCDaTangOrder.Hobby h on h.Id = i.InfoRelationIdwhere Mobile = '180****0825'
结果就是下面啦:
select i.StudentId, h.Sports,h.Movies,h.Booksfrom TCDaTangOrder.Student s left join TCDaTangOrder.Information i on i.StudentId = s.StudentIdleft join TCDaTangOrder.Hobby h on h.Id = i.InfoRelationIdwhere Mobile = '180****0825'
同样的使用left join也是可以使用的,此时就会有一个疑问,两个的具体区别:
left join/right join(左联接和右联接),左联接会以左边的表为准,右联接以右边的表为准,进行,此时如果对应的关联表无数据就是用null代替。
使用inner join呢,则没有数据的接口,将不会显示。

再查看一下,sql的执行顺序:
  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. WITH CUBE or WITH ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. TOP
当然也还是可以使用子查询进行,但是子查询在代码感官上比较的查,对于后期维护,以及性能上,会比较劣势。如果感兴趣,也可以自己试试哦。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值