好久没有写关于程序媛的技术文章了,昨天室友问了一些数据库相关的问题,那我们就来谈谈数据库吧。
那问的是什么问题呢?
我们来举个例子:
现有以下数据库表:
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的执行顺序:
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- WITH CUBE or WITH ROLLUP
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- TOP
当然也还是可以使用子查询进行,但是子查询在代码感官上比较的查,对于后期维护,以及性能上,会比较劣势。如果感兴趣,也可以自己试试哦。