数据库——多表设计和多表查询


一、多表设计——外键约束

  • 单表约束:主键约束;唯一约束;非空约束;
  • 多表约束:外键约束;

例子:在员工表(employee)添加外键
(注:employee为员工表,dept为部门表,did为部门表的主键,dno为员工表的部门字段)

alter table employee add foreign key (dno) references dept(did);

二、多表设计——表关系介绍

  • 一对多:例:一个部门有多个员工,一个员工在只能属于一个部门;
  • 多对多:例:一个学生可以选择多门课程,一门课程可以被多个学生选择;
  • 一对一:例:一个公司可以有一个注册地址,一个注册地址只能有一个公司;

三、多表设计——一对多关系

  • 建表原则:在多的一方建立外键 指向一的一方的主键;

四、多表设计——多对多关系

  • 建表原则:需要建立第三张表(中间表),在中间表中至少两个字段 分别作为外键,指向多对多双方的主键;

五、多表设计——一对一关系

  • 唯一外键对应:
    假设是一对多,再多的一方创建外键指向一的一方的主键,将外键设置为 unique;
  • 主键对应:
    将两个表的主键建立对应关系即可;

六、多表设计——多表分析及创建

七、多表查询——概述

1. 多表查询分类:

(1)连接查询

  • 交叉连接cross join
    查询到的是两个表的笛卡尔积;
    select * from 表1 cross join 表2;
    select * from 表1, 表2;

  • 内连接inner join
    显式内连接:select * from 表1 inner join 表2 on 关联条件;
    隐式内连接:select * from 表1, 表2 where 关联条件;

  • 外连接outer join
    左外连接:select * from 表1 left outer join 表2 on 关联条件;
    右外连接:select * from 表1 right outer join 表2 on 关联条件;

(2)子查询
一个查询语句条件需要依赖另一个查询语句的结果;

八、多表查询——数据准备

九、多表查询——交叉连接

(开发中应用较少)

十、多表查询——内连接

十一、多表查询——外连接

十二、多表查询——内连接与外连接的区别

在这里插入图片描述

十三、多表查询——子查询

  • in 的子查询;
    在这里插入图片描述

  • exisit 的子查询;
    在这里插入图片描述

  • any 的子查询;
    在这里插入图片描述

  • all 的子查询;
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/pary__for/article/details/111166412