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

好久没有写关于程序媛的技术文章了,昨天室友问了一些数据库相关的问题,那我们就来谈谈数据库吧。
那问的是什么问题呢?
我们来举个例子:
现有以下数据库表:
1.学生表Student,表中包含字段StudentId(学生号),Mobile(手机号);
2.学生资料存放表Information,表中包含字段StudentId(学生号),InfoRelationId(信息关联Id)
3.学生兴趣爱好表Hobby,表中包含字段Id(与上面信息关联Id关联),表中包含字段有Sports,Movies,Books
如下图:
inner join和left join的使用以及执行顺序_第1张图片
学生表
inner join和left join的使用以及执行顺序_第2张图片
信息表
inner join和left join的使用以及执行顺序_第3张图片
兴趣爱好表
inner join和left join的使用以及执行顺序_第4张图片
当下我需要做一件是,已经知道了学生的手机号,需要获取到对应的兴趣爱好等信息,那么我们可以怎么实现呢?如下:
 
  
 
  
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
当然也还是可以使用子查询进行,但是子查询在代码感官上比较的查,对于后期维护,以及性能上,会比较劣势。如果感兴趣,也可以自己试试哦。


你可能感兴趣的:(每天学一点)