首页 / 美国VPS推荐 / 正文
MySQL内连接和外连接详解,mysql内连接和外连接的区别

Time:2025年01月06日 Read:7 评论:42 作者:y21dr45

一、内连接(INNER JOIN)

1、定义:内连接是通过匹配两个或多个表中的行来返回结果集,只有在连接条件中的值在两个表中都存在时,才会返回匹配的行。

MySQL内连接和外连接详解,mysql内连接和外连接的区别

2、特点

只返回匹配行:内连接仅返回两个表中满足连接条件的匹配行,如果左表或右表中没有匹配,则不会出现在结果集中。

常见形式:内连接是所有连接中最常见的形式,通常用于关联相关数据,将学生的学号与成绩表进行匹配,以获取每个学生的成绩。

使用方式:内连接可以使用INNER JOIN关键字或者使用逗号和ON条件来实现。

示例如下:

   SELECT columns  
   FROM table1  
   INNER JOIN table2  
   ON table1.column_name = table2.column_name;

或者

   SELECT columns  
   FROM table1, table2  
   WHERE table1.column_name = table2.column_name;

3、示例:假设有两张表,students表包含学生的学号和姓名,scores表包含学生的学号和成绩,要查询每个学生的学号、姓名和成绩,可以使用内连接:

   SELECT students.学号, students.姓名, scores.成绩  
   FROM students  
   INNER JOIN scores ON students.学号 = scores.学号;

二、外连接(OUTER JOIN)

外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN),MySQL暂不支持全外连接,但可以通过UNION来实现类似效果。

1. 左外连接(LEFT JOIN)

定义:左外连接返回左表中的所有记录以及右表中满足连接条件的记录,如果左表中的某些记录在右表中没有匹配项,则结果集中对应的右表字段将显示为NULL。

特点:返回左表中的所有行,即使右表中没有匹配项,对于那些在右表中找不到匹配项的左表记录,结果集中对应的右表字段将填充为NULL。

语法

   SELECT columns  
   FROM table1  
   LEFT JOIN table2  
   ON table1.column_name = table2.column_name;

示例:继续使用studentsscores表的例子,如果要查询每个学生的学号、姓名和成绩,包括那些没有成绩的学生,可以使用左外连接:

   SELECT students.学号, students.姓名, scores.成绩  
   FROM students  
   LEFT JOIN scores ON students.学号 = scores.学号;

2. 右外连接(RIGHT JOIN)

定义:右外连接返回右表中的所有记录以及左表中满足连接条件的记录,如果右表中的某些记录在左表中没有匹配项,则结果集中对应的左表字段将显示为NULL。

特点:返回右表中的所有行,即使左表中没有匹配项,对于那些在左表中找不到匹配项的右表记录,结果集中对应的左表字段将填充为NULL。

语法

   SELECT columns  
   FROM table1  
   RIGHT JOIN table2  
   ON table1.column_name = table2.column_name;

示例:假设有一张courses表记录课程信息,要查询每门课程的ID、名称以及选修该课程的学生学号,可以使用右外连接:

   SELECT courses.课程ID, courses.课程名称, students.学号  
   FROM courses  
   RIGHT JOIN students ON courses.课程ID = students.选修课程ID;

3. 全外连接(FULL OUTER JOIN)

定义:全外连接返回两个表中的所有记录,如果某一方没有匹配项,则结果集中对应位置显示为NULL,MySQL不直接支持全外连接,但可以通过UNION操作实现相同的效果。

特点:返回左右两个表中的所有行,如果左表和右表中没有匹配的行,则在结果集中对应位置显示为NULL。

语法:MySQL不直接支持,但可以通过以下方式模拟:

   SELECT * FROM table1
   FULL OUTER JOIN table2 ON table1.id = table2.id;

示例:结合上述studentsscores表,要查询所有学生及其成绩,同时包括没有成绩的学生和没有学生选修的课程,可以使用以下UNION查询:

   SELECT students.学号, students.姓名, scores.成绩  
   FROM students  
   LEFT JOIN scores ON students.学号 = scores.学号
   UNION
   SELECT students.学号, students.姓名, scores.成绩  
   FROM scores  
   RIGHT JOIN students ON students.学号 = scores.学号;

选择合适的连接方式取决于具体的业务需求:

内连接适用于只关心两个表中匹配的数据。

左外连接适用于需要保留左表所有记录,并尽可能匹配右表的情况。

右外连接适用于需要保留右表所有记录,并尽可能匹配左表的情况。

全外连接适用于需要保留两个表所有记录的情况,MySQL中通过UNION实现。

排行榜
关于我们
「好主机」服务器测评网专注于为用户提供专业、真实的服务器评测与高性价比推荐。我们通过硬核性能测试、稳定性追踪及用户真实评价,帮助企业和个人用户快速找到最适合的服务器解决方案。无论是云服务器、物理服务器还是企业级服务器,好主机都是您值得信赖的选购指南!
快捷菜单1
服务器测评
VPS测评
VPS测评
服务器资讯
服务器资讯
扫码关注
鲁ICP备2022041413号-1