【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 语句都只计算两个表的笛卡尔积;

相关推荐
程序猿小D5 分钟前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
钢铁男儿1 小时前
C# 接口(什么是接口)
java·数据库·c#
AirDroid_cn1 小时前
OPPO手机怎样被其他手机远程控制?两台OPPO手机如何相互远程控制?
android·windows·ios·智能手机·iphone·远程工作·远程控制
尊治1 小时前
手机电工仿真软件更新了
android
__风__2 小时前
PostgreSQL kv(jsonb)存储
数据库·postgresql
Databend2 小时前
Databend 产品月报(2025年6月)
数据库
Little-Hu3 小时前
QML TextEdit组件
java·服务器·数据库
xiangzhihong84 小时前
使用Universal Links与Android App Links实现网页无缝跳转至应用
android·ios
车载应用猿5 小时前
基于Android14的CarService 启动流程分析
android
保持学习ing5 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机