0%

SQL书本笔记摘抄

2017年6月28日 下午10:14

  1. 查询时的三种思维
    1. 先连接 ,后删除
    2. 先选取 ,后连接—–in
    3. 一个个的试,从小范围到大范围 exists
    4. 注:后两种所查询出来的信息必须在一张表中
      1. 第一种可以拼接多个表数据的原因是两个表通过笛卡尔积进行了拼接
  2. eg:从sc表中筛选出所有计算机系的学生选课情况
    1. select sc.* from sc,student where sc.sno=student.sno and student.dept=’计算机系’
    2. select * from sc where sno in (select student.sno from student where student.dept=’计算机系’)
    3. select * from sc where exists (select * from student where student.sno=sc.sno and student.dept=’计算机系’);
      1. 我拿上sc表的第一条数据的学号,用这个学号作为条件,看是否在学生表中存在一条数据满足:有这个学号的学生,并且她是计算机系的
    4. select * from sc where ‘计算机系’= (select dept from student where student.son=sc.sno)—这个稍微短点
      1. 这个是exists的改写版,虽然没有出现exist,但是就是exist
  3. 范式
    1. 范式问题只看两个东西
      1. 依赖
        1. 1.多值 and 非多值
        2. 2.主要通过画图解决
        3. 3.使用范围是1-3+bc范式
      2. 候选码
        1. 能唯一标识元组的码

依赖:

1. 平凡与非平凡依赖
    1. 非平凡: (Sno,Cno) ->Grade
    2. 平凡:        (Sno,Cno)   ->Sno
                 (Sno,Cno)   ->Cno
2. 部分与完全函数依赖
    1. 完全:    (Sno,Cno)->Grade
    2. 部分:    (Sno,Cno)->Sname
3. 传递与直接函数依赖

范式:

BCNF与1,2,3NF的区别:
    BC是主属性之间的依赖,而1,2,3是非主属性与主属性之间的依赖

结论:

1. 如果不存在依赖—>化为4NF
2. 如果是全码为候选码(无非主属性)->至少BC
3. 依赖与候选码之间的关系  ->确定2NF 3NF


注:
像图片中所显示依赖关系,你是画不出依赖图的
必须先进行处理,求最小函数依赖集