【mysql】—— 表的内连和外连

在MySQL中,内连(INNER JOIN)和外连(OUTER JOIN)是用于联接多个表的操作。接下来,我分别给大家介绍下二者。

目录

(一)内连接

1、什么叫内连接

2、语法格式

[3、案例:显示SMITH的名字和部门名称(来自oracle 9i的经典测试表)](#3、案例:显示SMITH的名字和部门名称(来自oracle 9i的经典测试表))

(二)外连接

1、什么叫外连接

2、左外连接

2.1案例演示

3、右外连接

3.1案例演示

4、全外连接

5、练习演示

(三)实战OJ

(四)总结


(一)内连接

1、什么叫内连接

在MySQL中, 内连接 实际上就是利用 where 子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。

2、语法格式

  • 💨 以下是内连接的基本语法:

SELECT 列名
FROM 表1
INNER JOIN 表2 ON 表1.关联列 = 表2.关联列;

**注:**内连会返回同时存在于表1和表2中的行,并且仅包括满足关联条件的行。

3、案例:显示****SMITH的名字和部门名称(来自oracle 9i的经典测试表**)**

之前我们通过笛卡尔积可以对其进行操作,今天我们通过内连接的方式来进行有关操作。具体如下:
用前面的写法

bash 复制代码
select ename, dname from EMP, DEPT where EMP.deptno=DEPT.deptno and ename='SMITH';
  • 结果展示:

用标准的内连接写法:

bash 复制代码
select ename, dname from EMP inner join DEPT on EMP.deptno=DEPT.deptno and
ename='SMITH';
  • 结果展示:

【小结】

  • 内连接的关键点是只返回两个表中连接条件满足的行,而不包括任何一个表中没有匹配的行;
  • 如果某行在其中一个表中没有匹配的行,则不会包含在结果中
  • 需要注意的是,内连接并不包括符合条件但值为NULL的行。如果你需要包含这些行,可以使用接下来讲到的外连接

(二)外连接

1、什么叫外连接

在MySQL中,外连接是一种用于检索两个或多个表之间的数据的方法,它包括左外连接、右外连接和全外连接

2、左外连接

  1. 左外连返回左表中的所有行,以及右表中与左表满足联接条件的行;
  2. 如果右表中没有匹配的行,则返回 NULL 值。

💨 语法如下select 字段名 from 表名1 left****join 表名2 on 连接条件

2.1案例演示

首先,我先建立两张表以供实现需要。具体如下:

  • 表一:
  • 表二:


需求查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来
当左边表和右边表没有匹配时,也会显示左边表的数据:

bash 复制代码
select * from stu left join exam on stu.id=exam.id;

3、右外连接

  1. 右外连与左外连相反,返回右表中的所有行,以及左表中与右表满足联接条件的行;
  2. 如果左表中没有匹配的行,则返回 NULL 值。

💨 语法如下select 字段名 from 表名1 right****join 表名2 on 连接条件

3.1案例演示

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

bash 复制代码
select * from stu right join exam on stu.id=exam.id;

**4、**全外连接

  1. 全外连返回左表和右表中的所有行,并将它们联接在一起;
  2. 如果某个表中没有匹配的行,则返回 NULL 值;
  3. MySQL不直接支持全外连,可以使用UNION操作符来模拟实现。

5、练习演示

需求 :列出部门名称和这些部门的员工信息,同时列出没有员工的部门

现在有这样的场景,一家公司为了业务架构的完整设置了某个部门,但是暂时这个部门还没有人,随着之后公司的发展这个部门才会发挥作用。

  • 方法展示:

代码展示:

bash 复制代码
select dname,ename,dept.deptno from dept left join emp on dept.deptno=emp.deptno order by dept.deptno asc;

输出显示:


(三)实战****OJ

大家看完上诉可以通过下面这两道题目练练手:


(四)总结

通过内连和外连操作,可以根据表之间的关联条件将数据联接起来,并进行灵活的查询和分析。具体选择哪种联接类型取决于你的需求和数据结构。

相关推荐
子非衣13 分钟前
MySQL修改JSON格式数据示例
android·mysql·json
钊兵1 小时前
数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)
数据库·mysql·postgresql·oracle·达梦·驱动
隔壁老王1563 小时前
mysql实时同步到es
数据库·mysql·elasticsearch
Hanson Huang6 小时前
【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较
redis·mysql·mongodb·es
LUCIAZZZ6 小时前
EasyExcel快速入门
java·数据库·后端·mysql·spring·spring cloud·easyexcel
yuanbenshidiaos6 小时前
【正则表达式】
数据库·mysql·正则表达式
雾里看山9 小时前
【MySQL】内置函数
android·数据库·mysql
geovindu9 小时前
python: SQLAlchemy (ORM) Simple example using mysql in Ubuntu 24.04
python·mysql·ubuntu
清水加冰11 小时前
【MySQL】索引
数据库·mysql