MySQL内外连接的具体使用

 更新时间:2023年01月28日 08:31:38   作者:2021dragon  
本文主要介绍了MySQL内外连接的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

MySQL内外连接

表的连接分为内连接和外连接。

内连接

内连接

内连接的SQL如下:

SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;

说明一下:

  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • 内连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明。

显示SMITH的名字和部门名称

给出一张员工表和一张部门表,员工表中的ename代表的是员工的姓名,deptno代表的是员工所在部门的部门号。如下:

部门表中的dname代表的是部门名,deptno代表的是部门的部门号。如下:

现在要显示SMITH的名字和其所在部门的名称,按照复合查询的做法就是,取员工表和部门表的笛卡尔积,在where子句中指明筛选条件为员工的部门号等于部门的部门号,筛选出每个员工匹配的部门信息,并指明员工姓名为SMITH,筛选出SMITH的信息和其所在部门的信息。如下:

实际上述多表查询的方式本质就是内连接,用标准的内连接SQL编写:

  • 将员工表和部门号放在from子句中并通过inner join关键字隔开。
  • 在on子句后指明内连接的条件为员工的部门号等于部门的部门号,保证筛选出来的数据是有意义的。
  • 在and之后指明筛选条件为员工的姓名为SMITH。

这样筛选出来的结果和多表查询筛选出来的结果是一样的,只不过是写法有一点不同而已。如下:

外连接

外连接分为左外连接和右外连接。

左外连接

左外连接

左外连接的SQL如下:

SELECT ... FROM t1 LEFT JOIN t2 ON 连接条件 [LEFT JOIN t3 ON 连接条件] ... AND 其他条件;

说明一下:

SQL中大写的表示关键字,[ ]中代表的是可选项。左外连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明。

查询所有学生的成绩,就算这个学生没有成绩,也要将学生的个人信息显示出来

给出一张学生表和一张成绩表,学生表中的name代表的是学生的姓名,id代表的是学生的学号。如下:

成绩表中的id代表的是考试学生的学号,score代表的是学生的成绩。如下:

现在要显示所有学生的成绩,如果直接使用内连接将学生表和成绩表连接起来,然后筛选出学生学号等于考试学生学号的记录,那么只能筛选出有考试成绩的学生信息。如下:

而题目要求将没有成绩的学生的个人信息也要显示出来,也就是学生表当中的内容需要完全被显示出来。如果在连接学生表和成绩表时将学生表放在左侧,那么就可以使用左外连接,这时如果左侧表中的某条记录根据连接条件没有找到匹配的右侧表中的记录,就会直接显示左侧表中的记录信息,而其对应的右侧表中的列信息将会用NULL值进行填充。如下:

右外连接

右外连接

右外连接的SQL如下:

SELECT ... FROM t1 RIGHT JOIN t2 ON 连接条件 [RIGHT JOIN t3 ON 连接条件] ... AND 其他条件;

说明一下:

  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • 左外连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明。

查询所有的成绩,就算这个成绩没有学生与它对应,也要将成绩信息显示出来

题目要求将没有学生与它对应的成绩信息也要显示出来,也就是成绩表当中的内容需要完全被显示出来。如果在连接学生表和成绩表时将成绩表放在右侧,那么就可以使用右外连接,这时如果右侧表中的某条记录根据连接条件没有找到匹配的左侧表中的记录,就会直接显示右侧表中的记录信息,而其对应的左侧表中的信息将会用NULL值进行填充。如下:

简单案例

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

由于题目要求同时列出部门名和员工信息,因此需要将部门表和员工表连接起来,连接条件就是部门的部门号要等于员工所在的部门号。如果直接使用内连接进行查询,那么将会显示出所有满足连接条件的记录。如下:

而题目要求同时列出没有员工的部门,也就是部门表当中的内容需要完全被显示出来,如果在连接部门表和员工表时将部门表放在左侧,那么就可以使用左外连接。如下:

当然,如果要使用右外连接,那么可以在连接部门表和员工表时将部门表放在右侧。如下:

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

相关文章

  • MySQL8.0.26的安装与简化教程(全网最全)

    MySQL8.0.26的安装与简化教程(全网最全)

    MySQL关是一种关系数据库管理系统,所使用的 SQL 语言是用于访问数据库的最常用的标准化语言,今天通过本文给大家分享MySQL8.0.26的安装与简化教程使全网最详细的安装教程,需要的朋友参考下吧
    2021-07-07
  • Mysql服务器的启动与停止(一)

    Mysql服务器的启动与停止(一)

    Mysql服务器的启动与停止(一)...
    2006-11-11
  • Mysql排序和分页(order by&limit)及存在的坑

    Mysql排序和分页(order by&limit)及存在的坑

    这篇文章主要介绍了Mysql排序和分页(order by&limit)及存在的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Mysql表的约束超详细讲解

    Mysql表的约束超详细讲解

    MySQL唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况
    2022-09-09
  • 从0到1学会MySQL单表查询

    从0到1学会MySQL单表查询

    这篇文章主要给大家介绍了关于如何从0到1学会MySQL单表查询的相关资料,单表查询是指从一张表数据中查询所需的数据,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 在Debian 9系统上安装Mysql数据库的方法教程

    在Debian 9系统上安装Mysql数据库的方法教程

    这篇文章主要给大家介绍了在Debian 9系统上安装Mysql数据库的方法教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • MySQL通过DQL实现对数据库数据的基本查询

    MySQL通过DQL实现对数据库数据的基本查询

    这篇文章给大家介绍了MySQL如何通过DQL进行数据库数据的基本查询,文中通过代码示例和图文结合介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • 关于MySQL 大批量插入时如何过滤掉重复数据

    关于MySQL 大批量插入时如何过滤掉重复数据

    这篇文章主要介绍关于MySQL 大批量插入时如何过滤重复数据,比如线上库有6个表存在重复数据,其中2个表比较大,96万+和30万+,因为之前处理过相同的问题,就直接拿来了上次的Python去重脚本,脚本很简单,就是连接数据库,查出来重复数据,循环删除,需要的朋友可以参考下
    2021-09-09
  • 如何实现MySQL的索引

    如何实现MySQL的索引

    这篇文章主要介绍了如何实现MySQL的索引,MySQL中索引分三类,有B+树索引、Hash索引和全文索引,下面我们一起来看看MySQL索引的具体实现,需要的小伙伴可以参考一下
    2022-01-01
  • MySql 8.0.11 安装过程及 Navicat 链接时遇到的问题小结

    MySql 8.0.11 安装过程及 Navicat 链接时遇到的问题小结

    这篇文章主要介绍了MySql 8.0.11 安装过程及 Navicat 链接时遇到的问题,需要的朋友可以参考下
    2018-06-06

最新评论