数据库进阶3--表之间的关联关系

学习这一部分之前先去回顾一下之前的基础知识哦!!!

这里写目录标题

  • 关联关系
    • 关联关系分类
    • 关联关系的创建
    • 关联查询
      • 等值连接
      • 内连接
      • 外连接
        • 左连接
        • 右连接

关联关系

指一个业务中创建的表与表之间的关系。其关联关系有一下几种:

关联关系分类

  • 一对一:有AB两张表,A表中的一条数据对应着B表中的一条数据,同时,B表中的一条数据也只对应着A 表中的一条数据。(比如:一个男生只有一个女朋友,他女朋友也只有他一个男朋友)
    数据库进阶3--表之间的关联关系_第1张图片
  • 一对多:有AB两张表,A表中的一条数据对应着B表中的多条数据,但是,B表中的一条数据只对应着A 表中的一条数据。(比如:一位同学一个阶段只会在一个班级,但一个班级里却有多位同学)
    数据库进阶3--表之间的关联关系_第2张图片
  • 多对多:有AB两张表,A表中的一条数据对应着B表中的多条数据,而且,B表中的一条数据也对应着A 表中的多条数据。(比如:一个老师有多位学生,一位学生也有多个老师)
    数据库进阶3--表之间的关联关系_第3张图片

关联关系的创建

  • 一对一:在AB两张表的任意一张表中创建一个关系字段,用于指向另一张表的主键。
  • 一对多:在“多关系”的表中创建一个关系字段,用于指向“单一关系”表中的主键。(如在员工表中创建部门id字段指向部门表的主键)
  • 多对多:需要单独创建一个关系表用于保存两张表的关系,该关系表只有两个字段,分别指向两个表的主键。

关联查询

查询具有关联关系的表中的数据信息。其查询方式有一下几种:

等值连接

查询两张表的交集部分。
格式:select 字段名 from A表,B表 where 关联关系 and 查询条件。

//查询工资高于2000的员工的姓名和对应的部门名
select emp.name,dept.name from emp,dept where emp.dept_id=dept.id and  sal>2000;
//查询程序员和销售的姓名,工资,部门名,部门地点
select emp.name,sal,dept.name,loc from emp,dept where emp.dept_id=dept.id and job in("程序员","销售");

内连接

查询两张表的交集部分,和等值连接一样,但相同条件下推荐使用内连接。
格式:select 字段名 from A表 join B表 on 关联关系 where 条件

//查询工资高于2000的员工的姓名和对应的部门名
select emp.name,dept.name from emp join dept on emp.dept_id=dept.id where sal>2000;
//查询程序员和销售的姓名,工资,部门名,部门地点
select emp.name,sal,dept.name,loc from emp join dept on emp.dept_id=dept.id where job in("程序员","销售");

外连接

查询一张表的全部信息及两张表的交集部分。

左连接

格式: select 字段名 from A表 left join B表 on 关联关系 where 其它条件;
查询join之前的表(左边表)的全部信息及两张表的交集部分

//查询所有员工姓名和对应的部门名
select emp.name,dept.name from emp left join dept on emp.dept_id=dept.id ;
右连接

格式: select 字段名 from A表 right join B表 on 关联关系 where 其它条件;
查询join之后的表(右边表)的全部信息及两张表的交集部分

//查询所有部门名和地址以及员工的姓名
select emp.name,dept.name,loc from emp right join dept on emp.dept_id=dept.id;

结束啦!多练习,多测试。。。。。

你可能感兴趣的:(数据库,database,mysql)