mysql表的内连和外连实战记录

 更新时间:2024年01月08日 08:40:59   作者:起飞的风筝  
在开发中我们的业务需求有时候是复杂的,多张表联合查询的时候是有多种方式的,面对不同的需求,灵活使用不同的表连接方式,这篇文章主要给大家介绍了关于mysql表内连和外连的相关资料,需要的朋友可以参考下

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

(一)内连接

1、什么叫内连接

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

2、语法格式  

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

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

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

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

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

用前面的写法

select ename, dname from EMP, DEPT where EMP.deptno=DEPT.deptno and ename='SMITH';

结果展示: 

用标准的内连接写法:

select ename, dname from EMP inner join DEPT on EMP.deptno=DEPT.deptno and
ename='SMITH';

结果展示:

【小结】

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

(二)外连接

1、什么叫外连接

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

2、左外连接 左外连

返回左表中的所有行,以及右表中与左表满足联接条件的行;

如果右表中没有匹配的行,则返回 NULL 值。

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

2.1案例演示

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

表二:

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

当左边表和右边表没有匹配时,也会显示左边表的数据:

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 表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要 显示出来
select * from stu right join exam on stu.id=exam.id;

4、全外连接

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

5、练习演示

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

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

方法展示:

 代码展示:

select dname,ename,dept.deptno from dept left join emp on dept.deptno=emp.deptno order by dept.deptno asc;

输出显示: 

(三)实战OJ

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

(四)总结

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

到此这篇关于mysql表的内连和外连的文章就介绍到这了,更多相关mysql表内连和外连内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL 数据恢复的多种方法汇总

    MySQL 数据恢复的多种方法汇总

    日常工作中,总会有因手抖、写错条件、写错表名、错连生产库造成的误删库表和数据的事情发生。但是,如果每次删库都跑路的话,怕是再也不好找工作了吧!所以,删库跑路不是上上策
    2021-06-06
  • MySQL如何查看元数据锁阻塞在哪里

    MySQL如何查看元数据锁阻塞在哪里

    这篇文章主要介绍了MySQL如何查看元数据锁阻塞在什么地方的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • Mysql中IFNULL函数举例详解

    Mysql中IFNULL函数举例详解

    这篇文章主要给大家介绍了关于Mysql中IFNULL函数举例详解的相关资料,在MySQL数据库中IFNULL()函数用于将NULL值替换为另一个值,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-07-07
  • MYSQL必知必会读书笔记第五章之排序检索数据

    MYSQL必知必会读书笔记第五章之排序检索数据

    本文给大家分享mysql必会必知读书笔记第五章之排序检索数据,小编认为非常具有参考价值,特此分享到脚本之家平台供大家参考
    2016-05-05
  • MySQL数据库自连接实例讲解

    MySQL数据库自连接实例讲解

    针对相同的表进行的连接被称为"自连接"(self join),下面这篇文章主要给大家介绍了关于MySQL数据库自连接实例讲解的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • win7下mysql5.7.17安装配置方法图文教程

    win7下mysql5.7.17安装配置方法图文教程

    这篇文章主要为大家详细介绍了win7下mysql5.7.17安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • MySQL 跨库查询示例场景分析

    MySQL 跨库查询示例场景分析

    在 MySQL 数据库应用场景中,有时需要从多个数据库中获取数据并进行关联分析或综合处理,这就涉及到跨库查询操作,本指南将详细介绍 MySQL 跨库查询的方法、注意事项以及相关示例,感兴趣的朋友一起看看吧
    2025-04-04
  • 你的like语句为什么没索引详解

    你的like语句为什么没索引详解

    这篇文章主要给大家介绍了关于你的like语句为什么没索引的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • 解决Mysql收缩事务日志和日志文件过大无法收缩问题

    解决Mysql收缩事务日志和日志文件过大无法收缩问题

    这篇文章主要介绍了解决Mysql收缩事务日志和日志文件过大无法收缩问题,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-08-08
  • mysql数据库的分区表示例代码

    mysql数据库的分区表示例代码

    这篇文章主要介绍了mysql数据库的分区表的相关资料,文章介绍了两种创建SQL表分区的方法,分别是手动创建和使用MySQL的定时事件来自动创建分区,手动创建分区时,需要在代码中判断分区并新增,可能会引入一些问题,需要的朋友可以参考下
    2024-11-11

最新评论