【MySQL】_外连接

目录

[3.1 情况一:两个表数据一一对应](#3.1 情况一:两个表数据一一对应)

[3.2 情况二:两个表数据并非一一对应](#3.2 情况二:两个表数据并非一一对应)


本专栏关于联合查询已建立相应库与表,原文链接如下:

【MySQL】_联合查询基础表-CSDN博客

内连接原文如下:

【MySQL】_内连接-CSDN博客

基于以上内容,本篇介绍外连接;


内连接与外连接都是进行笛卡尔积计算,但是细节之处仍有差别:

3.1 情况一:两个表数据一一对应

基于以下数据库与表:

sql 复制代码
mysql> select* from student;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
|    3 | 王五 |
+------+------+
3 rows in set (0.00 sec)

mysql> select* from score;
+------------+-------+
| student_id | score |
+------------+-------+
|          1 |    90 |
|          2 |    80 |
|          3 |    70 |
+------------+-------+
3 rows in set (0.00 sec)

内连接指令为:

sql 复制代码
mysql> select name, score from student join score on student.id = score.student_id;

左外连接指令为:

sql 复制代码
mysql> select name, score from student left join score on student.id = score.student_id;

右外连接指令为:

sql 复制代码
mysql> select name, score from student left join score on student.id = score.student_id;

以上三条指令的查询结果均为:

sql 复制代码
+------+-------+
| name | score |
+------+-------+
| 张三 |    90 |
| 李四 |    80 |
| 王五 |    70 |
+------+-------+

即:当两个表的数据一一对应(即两个表的记录在彼此表中都有体现)时,内连接与外连接的查询结果是相同的;

3.2 情况二:两个表数据并非一一对应

基于以下数据库和表:

sql 复制代码
mysql> select* from student;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
|    3 | 王五 |
+------+------+
3 rows in set (0.00 sec)

mysql> select* from score;
+------------+-------+
| student_id | score |
+------------+-------+
|          1 |    90 |
|          2 |    80 |
|          4 |    70 |
+------------+-------+
3 rows in set (0.00 sec)

内连接指令与查询结果为:

sql 复制代码
mysql> select name, score from student join score on student.id = score.student_id;
+------+-------+
| name | score |
+------+-------+
| 张三 |    90 |
| 李四 |    80 |
+------+-------+
2 rows in set (0.00 sec)

左外连接指令与查询结果为:

sql 复制代码
mysql> select name, score from student left join score on student.id = score.student_id;
+------+-------+
| name | score |
+------+-------+
| 张三 |    90 |
| 李四 |    80 |
| 王五 |  NULL |
+------+-------+
3 rows in set (0.00 sec)

右外连接指令与查询结果为:

sql 复制代码
mysql> select name, score from student right join score on student.id = score.student_id;
+------+-------+
| name | score |
+------+-------+
| 张三 |    90 |
| 李四 |    80 |
| NULL |    70 |
+------+-------+
3 rows in set (0.00 sec)

即:当两个表的数据并非一一对应时,内连接只显示两个表中都有体现的数据;

注:(1)当两个表数据并非一一对应,进行外连接时,左外连接是以左表为准,右表没有对应的数据,则以空值填充;

右外连接是以右表为准,左表没有对应数据,以空值填充;

(2)join on针对多个表进行的语句为:

select* form 表1 join 表2 on 条件1 join 表4 on 条件2,如:

sql 复制代码
mysql> select* from student join score on student.id = score.student_id
    -> join course on course.id =score.course_id;

但是每次join on 语句都只计算两个表的笛卡尔积;

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
小白男神3 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android