三大范式
第一范式(1NF) :数据库表的每一列都是不可分割的原子数据项
第二范式(2NF): 在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
第三范式(3NF): 在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
几个概念:
- 码: 如果一个属性或属性组 被其他属性完全依赖 ,则这个属性为码
- 依赖: A->B 如果通过A属性的值,可以确定唯一B属性的值,则称B依赖于A
- 完全函数依赖 A->B A是属性组() ,则B属性的值的确定 依赖与 A中所有属性值。
- 部分函数依赖: A->B A是属性组(),则B属性的值的确定 仅依赖与A属性组中的某一些属性值即可
多表查询
笛卡尔积
两个集合,取2个集合所有可以组成的情况
内连接
隐式内连接 :where
显示内连接: inner join 。。。 on
外连接
左连接: left join … on …
查询的是左表 所有数据 以及其交集部分
右链接: right join… on …
查询的是右表 所有数据 以及其交集部分
相比于 where , left join 会带上左表的所有记录,而where 后面的条件不满足的左表记录则不会出现在查询结果中
子查询
子查询的结果是单行单列的
select * from
XX where id =
(select max(id) from XX)
子查询的结果是多行单列的
select * from
XX where salary <
(select avg(salary)from XX )
select * from emp where id dep_id in (select id from dep);