引子:A left join B选取所有满足关联条件的数据,还会列举出A表中的剩余数据,但是select出来的B表部分会以null来填充
现在有4张表:
- 班级表A[ID,NAME(班级名称)]
- 学生表B[ID,NAME(姓名),CLASSID(哪个班的)]
- 学生选课表C[ID,STUDENTID(学生ID),COURSEID(课程ID)]
- 课程表D[ID,NAME(课程名称),WLK(文科还是理科)]
有一需求要查询某班级所有学生选修课中选修理科的情况,4张表需要关联,查询条件理由班级名称、课程类型也就是
考虑到有些学生是不选课的,所以B、C应该是左关联,A、B内连接,C、D也是内关联。
得到语句为:
运行后就会发现没有选修课的学生是选不出来的,主要原因分析如下:
- A、B内连接后该有的数据都有了
- 和C关联后不满足关联条件取出的数据中C表的部分为空,这时如果还用内连接和D关联的话,那么就会丢失部分数据,所以使用右关联和D关联
- 和D关联后,步骤2中取出为空字段不满足关联条件,那么选出的D表部分也就为空,所以加上D表的查询条件D.WLK = '理'就不能选出应该被选出的字段为空的数据
所以最后可以得出以下的查询语句: