【MySQL 10】表的内外连接 (带思维导图)

在这里插入图片描述

🌈 一、内连接

  • 内连接实际上就是利用 where 子句对两张表形成的笛卡儿积进行筛选,之前所有的查询都是内连接,也是在开发过程中使用的最多的连接查询。
  • 内连接查询的是两张表交集部分的数据。
  • 内连接分为隐式内连接和显式内连接,隐式内连接和显式内连接除了写法不同之外,查询的结果是一致的

image-20240817223305285

⭐ 0. 准备工作

  • 当前有三张表,分别是:部门表 dept,员工表 emp,薪资等级表 salgrade,之后的查询工作主要依赖于这三张表进行。
    • 这三张表各自包含的字段和每个字段的内容如下。
  1. 员工表 emp:员工编号 (empno)、员工姓名 (ename)、员工职位 (job)、员工领导的编号 (mgr)、雇佣时间 (hiredate)、月薪 (sal)、奖金 (comm)、部门编号 (deptno)。

image-20240817104531316

image-20240817104611038

  1. 部门表 dept:部门编号 (deptno)、部门名称 (dname)、部门所在地 (loc)。

image-20240817104818532

image-20240817104856942

  1. 薪资登记表 salgrade:等级 (grade)、此等级最低工资 (losal)、此等级最高工资 (hisal)。

image-20240817105133021

image-20240817105108090

⭐ 1. 隐式内连接

  • 之前的所有查询都属于隐式内连接。
select 字段列表 from1,2 where 条件 ... ;

案例:显示 SMITH 的名字和部门名称

  • 对员工表 emp 和部门表 dept 作笛卡尔积,在 where 子句中指定使用员工表中的部门表含与部门表中的部门编号过滤迪科尔基,并且指定员工姓名为 SMITH。

image-20240817214526315

⭐ 2. 显式内连接

select 字段列表 from1 [inner] join2 on 连接条件 ... and 其他条件;
  • 显式内连接才是标准的内连接写法

案例:显示 SMITH 的名字和部门名称

  • 在 on 子句中指定内连接的连接条件为员工表的部门编号等于部门表的部门编号,再在 and 之后指定其他筛选条件为员工姓名 ename = ‘SMITH’。

image-20240817221027758

🌈 二、外连接

  • 外连接分为左外连接右外连接

⭐ 0. 准备工作

  • 创建学生表:表中包含 id 和名字 name 两个字段。

image-20240817221609725

image-20240817221706662

  • 创建成绩表:表中包含 id 和成绩 grade 这两个字段。
    • 插入数据:让 id 为 1、2、11 的同学有成绩,而 3、4 号同学没有成绩,学生表中并没有 11 号同学。

image-20240817221919723

image-20240817221959285

⭐ 1. 左外连接

select 字段列表 from1 left [outer] join2 on 条件 ...  and 其他条件;
  • 左外连接查询的是表 1 的全部数据,让表 2 按照条件与表 1 进行拼接,如果条件不满足,则用 null 进行拼接。

image-20240817223022561

案例:查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

  • 要将学生表中的内容完全显示出来,将学生表 student 设为左表即可使用左外连接。如果左表中的某条记录根据连接条件没有找到匹配的右表中的记录,则会直接显示左表中的记录信息,而其对应的右表中的列信息将会用 null 值进行填充。
    • 将学生表和成绩表按照 id 进行连接起来,并且 3、4 号同学没有成绩。

image-20240817225446888

⭐ 2. 右外连接

select 字段列表 from1 right [outer] join2 on 条件 ... and 其他条件;
  • 右外连接查询的是表 2 的全部数据,让表 1 按照条件与表 2 进行拼接,如果条件不满足,则用 null 进行拼接。

image-20240817223142271

案例:对学生表和成绩表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来

  • 要将成绩表中的内容完全显示出来,将成绩表 exam 设为右表即可使用右外连接。如果右表中的某条记录根据连接条件没有找到匹配的左表中的记录,则会直接显示右表中的记录信息,而其对应的左表中的列信息将会用 null 值进行填充。
    • 将学生表和成绩表按照 id 进行连接起来,并且没有 11 号同学。

image-20240817225356349

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值