总结
先总结一下之前的语句,以及它们在命令中出现的顺序
select distinct *
from 表名
where ...
group by ... having ...
order by ...
limit start, count
执行顺序
- from 表名
- where …
- group by …
- select distinct *
- having …
- order by …
- limit start, count
关系
现在已经有一个学生表,还有一个科目表,我们再建一个 成绩表,成绩表将学生表和科目表连接了起来。
根据第3范式,我们只能引用其它表的主键,所以成绩表里的学生应该指的是学生表里的id,成绩表中的科目是科目表中的id。
接下来,还要分析对应关系。
A对B是一对一,那么关系字段在A或B表中都可以;
A对B是一对多,那么关系字段在B表中;
A对B是多对多,则新建一张表存储关系;
比如,
一个学生有多门课的成绩,学生表对成绩表是一对多,所以关系字段(学生id)放成绩表中;
一个科目有多个学生课的成绩,科目表对成绩表是一对多,所以关系字段(科目id)放成绩表中。
注意:关系不能闭合!
就是A和C有关系,A和B有关系,B和C也有关系,那么A其实可以通过B和C产生关系,这就是有闭环了,说明数据产生了冗余。
但是可能A到C更方便呢?那这时候就要考虑断开哪条关系更方便了。
这些都可以在以后,靠经验慢慢积累。