表与表之间的关系

本文探讨了数据库设计中的表拆分原则,旨在减少数据冗余,提升效率。详细阐述了一对一、一对多、多对多三种表间关系,并通过示例说明如何建立这些关系。此外,还介绍了多表查询的不同类型,如合并结果集(UNION, UNION ALL)、连接查询(内连接、外连接等)以及子查询,帮助理解如何在多表环境中进行高效的数据检索。
摘要由CSDN通过智能技术生成

**

十一、表与表之间的关系

**
11.1为什么拆表
拆分表的目的:为了解决数据冗余问题,可以减少重复数据的存储,表的结构也更加清晰了。
拆分之后:
在某些业务下,需要查询多个表,速度降低了。
空间 时间 的博弈
11.2表与表之间的关系
11.2.1一对一
人和身份证的关系:
注意:
(1)一对一不存在数据冗余问题 可以不拆分表吗? 可以
(2)什么场景需要拆分:用户信息+身份证+……》表中的字段太多了
11.2.2一对多
最最常见的关系:
学生和成绩的关系:一个学生有多个成绩
部门和员工的关系:一个部门有多个员工
这种关系怎么去建立,怎么去表达
在“多”的一方,存储“一”的主键ID
在成绩表中存储用户的ID
在员工表中存储部门的ID
建表:使用主外键实现

11.2.3多对多
常见案例:
老师与学生的关系:一个老师对应多个学生,多个学生对应多位老师
用户与商品的关系
用户和权限的关系
这种关系怎么去建立,怎么去表达:借助第三张表
用户和商品:订单(用户ID)什么时候买了什么商品(商品ID)
ID 用户ID 商品ID
1001 1 6
1002 1 5
1003 2 6
用户和权限的关系,谁有什么权限

  • ID 用户ID 权限ID 1001 1 1001 1002 1 1003 1003 2 1003

11.3多表查询
多表查询有如下几种:
(1)合并结果集:union,union all
(2)连接查询(列的合并):内连接
外连接:左外连接 右外连接
全连接
自然连接
(3)子查询
11.4合并结果集(行连接)
将两个结果集(表)合并在一块
要求:2个结果的列数(数据类型)应该要相同

11.4.1 union all
将2个表的结果直接放到一起 不做任何处理

select * from t1
union all
select * from t2;

11.4.2union
将2个表的结果直接放在一起 相同的数据只留下一个(去重)

select * from t1
union 
select * from t2;

11.5连接查询(列连接)
问题:学生表有10条数据,成绩表有10条数据
连接之后有多少条数据(笛卡尔积):10*10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值