MySQL查询之内连接,外连接查询场景的区别与不同
前言#
我在写sql
查询的时候,用的最多的就是where
条件查询,这种查询也叫内连查询inner join
,当然还有外连查询outer join
,左外连接,右外连接
查询,常用在多对多关系中,那他们区别和联系是什么呢?
内连接inner join#
内连接最常用定义:
- 连接结果仅包含
符合连接条件
的行组合起来作为结果集,参与连接的两个表
都应该符合连接条件使用关键词:INNER JOIN
连接多张表
如下sql查询语句
查询所有分配了部门信息的用户信息
也就是部门id在用户表,和部门表都存在行符合条件数据才展示
select u.USERNAME, u.MOBILE, u.EMAIL, d.DEPT_NAME
from t_user u inner join
t_dept d
on u.DEPT_ID = d.DEPT_ID
内连接还有一种隐式的写法,即不需要显示的指定 INNER JOIN 关键字
等价于
select u.USERNAME, u.MOBILE, u.EMAIL, d.DEPT_NAME
from t_user u,
t_dept d
where u.DEPT_ID = d.DEPT_ID
一般我们常用直接使用where
关键词查询连接条件这样更方便简单
外连接outer join#
左(外)连接 left join#
定义:
- 左(外)连接,
左表
的记录将会全部
表示出来,而右表
只会显示符合搜索条件
的记录。右表
记录不足的地方均为NULL
,如下图所示:
- 语法
LEFT JOIN ON
LEFT OUTER JOIN ON
left join
是 left outer join
的简写,它的全称是左外连接,是外连接中的一种。
如下sql查询语句
查询所有员工信息(包含部门信息)
select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME
from t_user u left outer join
t_dept d
on u.DEPT_ID = d.DEPT_ID
等价于
select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME
from t_user u left join
t_dept d
on u.DEPT_ID = d.DEPT_ID
如下图我们可以看到,左外连接 t_user 表里面 USERNAME 为 kenx 的记录,其 DEPT_ID 为 15,但 DEPT_ID 为 15 的记录在 t_dept 表里面是不存在的,此时,我们用的是左外连接,因此,可以查出该条记录,但 t_dept 表里面的字段的值都是 NULL。
右(外)连接 right join#
定义:
- 右(外)连接,
右表
的记录将会全部表示出来,而左表
只会显示符合搜索条件
的记录。左表
记录不足的地方均为NULL
,如下图所示:
- 语法
RIGHT JOIN ON
RIGHT OUTER JOIN ON
right join
是 right outer join
的简写,它的全称是右外连接,是外连接中的一种。
如下查询sql 语句
select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME
from t_user u right join
t_dept d
on u.DEPT_ID = d.DEPT_ID
等价于
select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME
from t_user u right outer join
t_dept d
on u.DEPT_ID = d.DEPT_ID
如下图 与
左外连接
刚好相反 查询出了所有部门信息,不符合条件的用户信息字段都为NULL
总结#
-
内连接
:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。 -
外连接
:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。 -
左外连接
:左边表数据行全部保留,右边表保留符合连接条件的行。 -
右外连接
:右边表数据行全部保留,左边表保留符合连接条件的行。 -
全外连接
:左外连接 union 右外连接,Mysql 中暂不支持。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)