多表关系及多表查询

  • 一、前言
  • 二、多表关系
  • 1.一对多(多对一)
  • 2.多对多
  • 3.一对一关系
  • 三、多表查询
  • 1.概述
  • 2.分类
  • 四、结语


一、前言

在前几篇文章中介绍的数据查询都是单表查询,从本文开始将讲述多表查询。在开始讲述多表查询之前,先讲述一下多表关系已经多表查询的相关概念,有助于后面理解。

二、多表关系

1.一对多(多对一)

  • 很常见的例子就是部门与员工的关系:一个部门有很多员工,但是一个员工对应的只有唯一的一个部门

sqldata modeler 多对一 关系设计_mysql

  • 我们想要在数据库层面体现这种关系,就要在多的一方建立外键指向一的一方的主键;所以我们把外键建立在员工表上,并指向部门表,让两个表产生联系

sqldata modeler 多对一 关系设计_多表查询_02

2.多对多

  • 很常见的例子就是学生与课程的关系:一个学生可以选修很多课,一门课也可以有很多学生去选择

sqldata modeler 多对一 关系设计_sql_03

  • 我们要想在数据库的层面上体现这种关系,就要建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
  • sqldata modeler 多对一 关系设计_外键_04


  • 在DG软件中我们如果实验一下,并查看关系可以得到如下结果

3.一对一关系

  • 很常见的例子就是用户与用户详情的关系
  • sqldata modeler 多对一 关系设计_外键_05

  • 我们要想在数据库的层面上体现这种关系,就要将单表拆分,将一张表的基础字段放在一张表中,其它详情字段放在另一张表中,来提升效率

sqldata modeler 多对一 关系设计_外键_06

  • 然后在任意一方加入外键关联另一方的主键,并设置外键唯一(UNIQUE),这样才能保证是一对一的关系

三、多表查询

1.概述

  • 从多张表中查询数据
  • 在笛卡儿积中要寻找属性值相同

2.分类

  • 内连接:查询A、B交集部分数据
  • 左外连接:查询左表以及两表交集部分数据
  • 右外连接:查询右表以及两表交集部分数据
  • 自连接:当前表与自身的连接查询,必须用表别名
  • 子查询

四、结语

本文只是讲述了多表查询的一些基础概念,接下来会展开详细讲述