关于SQL的学习记录(十、多表连接查询)

多表连接查询

数据存储在多表的原因:

  • 为什么不用一个表存储数据,非要使用多个表呢,下面通过例子介绍其原因。
  • 假设有如下结构的关系。
    当一名学生考完某课后,其信息就会在student表中以一条记录的形式存储。下面列出student关系所存在的问题。
    (1)数据冗余。某个学生可能考了多门课程,有多个成绩,所以该生的“学号”、“姓名”“性别”和“来源地”就会有多次重复,请参考表10.1所示。
    (2)更新异常。由于数据冗余,如果要更改“张三”的来源地为“福建省”时,必须要更改多条记录,一旦遗忘了更改某条记录,“张三”就会有两个不同的来源地。
    (3)插入异常。如果某学生没有考任何考试,则无法将这名学生的学号、姓名、性别、来源地等信息插入到表内。因为,student中学号和课号组成了一个码,码值的一部分为空的记录,是不能被插入到表中的。
    (4)删除异常。如果一名学生的考试成绩全部作废,需要删除,则其正常信息也会随之被删除。这样就丢掉了一部分有用的信息。
    由于上述原因,数据就被放到了不同的多个表中。

范式:

  • 目前,范式分为第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCNF范式、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)等范式。这些范式其实是不同程度的规则,它们之间有着层次关系,第一范式是最底层的规则,第二范式是满足第一范式的基础上又多了一些要求的规则,以此类推。
  • 一般来说,设计的数据库只要满足第三范式就可以了,所以下面只介绍1NF、2NF和3NF。
    ❀第一范式(1NF)
    第一范式是关系数据库的底线,要想成为关系数据库则必须要满足第一范式。第一范式的内容为,记录的每一个分量都是不可分割的基本数据项
    ❀第二范式(2NF)
    要满足第二范式,首先必须满足第一范式,即满足第一范式是满足第二范式的前提条件,其次,第二范式增加的要求是,每一个非主属性要完全函数依赖于码
    可以用分解的方法将一个不满足2NF的表,分解为满足2NF的多个表。
    ❀第三范式(3NF)
    第三范式是在满足第二范式的基础上,还增加了每一个非主属性都不传递依赖于码的要求。

连接查询:

  • 连接两表的方法
    • 无连接规则连接
      无连接规则连接后得到的结果是将所有表中的每一行都互相连接,即结果为笛卡尔积。
      语法格式:
    SELECT *(或字段列表)
    FROM 表名1,表名2,...;
    #得到的表数据总数为每个表的数据量相乘
    #如:表1数据数为N,表2数据数为M,则连接后的表的数据数为N*M
    
    • 有链接规则连接
      有连接规则连接,其实就是在无连接规则的基础上,加上WHERE子句指定连接规则的连接方法。
      语法格式:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值