这里写目录标题
一级目录
二级目录
三级目录
003多表查询
多表如何查询
【题目】
现在有两个表,“学生表” 记录了学生的基本信息,有 “学号”、“姓名”。
“成绩” 表记录了学生选修的课程,以及对应课程的成绩。
这两个表通过 “学号” 进行关联。
现在要查找出所有学生的学号,姓名,课程和成绩。
解题思路】
- 确定查询结果
题目要求查询所有学生的姓名,学号,课程和成绩信息
select 学号, 姓名, 课程, 成绩
查询结果的列名 “学号”、“姓名”,在“学生” 表里,列名 “课程”、“成绩” 在“成绩”表里,所以需要进行多表查询。 - 哪种联结呢?
涉及到多表查询,在之前的课程《从零学会 sql:多表查询》里讲过需要用到联结。
多表的联结又分为以下几种类型:
1)左联结(left join),联结结果保留左表的全部数据
2)右联结(right join),联结结果保留右表的全部数据
3)内联结(inner join),取两表的公共数据
这个题目里要求 “所有学生”,而 “所有学生” 在“学生”表里。为什么不在 “成绩” 表里呢?
如果有的学生没有选修课程,那么他就不会出现在 “成绩” 表里,所以 “成绩” 表没有包含 “所有学生”。
所以要以 “学生” 表进行左联结,保留左边表(学生表)里的全部数据。
from 学生信息表 as a left join 成绩表 as b - 两个表联结条件是什么?
两个表都有 “学号”,所以联结条件为学号。
on a. 学号 = b. 学号
4.最终 sql
select a.学号,a.姓名,b.课程,b.成绩
from 学生 as a
left join 成绩 as b
on a.学号=b.学号;
举一反三:
编写一个 SQL 查询,