当前位置: 首页 > news >正文

数据库的左连接,右连接,全外连接,自连接,内连接的区别

从语法层面上看,

全外连接full outer join

左连接是left outer join

右连接是right outer join

内连接是inner join

自连接是自身表与自身表进行的左右连接,需要注意的是并没有左内连接和右内连接。

左外连接

select * from A left outer join B on A.id = B.id;

左外连接是把左边作为基表,在右表中找到和左表匹配的数据组合在一块,如果没找到的话就是空,总之左表的数据会全部展示出来。

结果是返回左右表交集和左表全数据。

右外连接

select * from C right outer join D on C.id = D.id;

右外连接则刚好和左外连接相反,是把右表作为基表。在实际开发中实际上用到的右连接基本上可以改写成左连接的形式,比如下列的左右连接其实效果是一致的。

select * from A left outer join B on A.id = B.id;

select * from B right outer join A on A.id = B.id;

结果是返回左右表交集和右表全数据。

全外连接

select * from A full outer join B on A.id=B.id;

全外连接是会把左外连接和右外连接的结果整合到一起并去重。

另外,有的数据库关于外连接的outer关键字可以省略不写,但有的不能省略,如下

select * from A left join B on A.id = B.id;

select * from A right join B on A.id = B.id;

select * from A full join B on A.id = B.id;

结果是返回左右表并集。

内连接

内连接的具体语法如下,

select * from A inner join B on A.id=B.id;

顾名思义,内连接只会返回同时在A和B中满足条件,在这里也就是id在A和B中都存在并且id相同的数据,这里的inner有时候也可省略。

结果是返回左右表交集。

自连接

自连接并不是一种连接结构,而是一种逻辑上的称呼,自连接可以使用外连接也可以使用内连接。比如对表A和A自身进行内连接或者外连接筛选出想要的数据。一般大多数情况都是表A和A以外的表,但一些业务情况下可能会出现与本表连接的情况。常见的例子比如员工表,如下,张三是公司老大没有领导,李四和王五的manager_id 是1,代表张三是李四和王五的直属领导,而李四是赵六的领导,王五是甲七的领导。

+------+------+------------+
| id   | name | manager_id |
+------+------+------------+
|    1 | 张三 |          0 |
|    2 | 李四 |          1 |
|    3 | 王五 |          1 |
|    4 | 赵六 |          2 |
|    5 | 甲七 |          3 |
+------+------+------------+

此时可能就会有需求,比如查询赵六的领导是谁?就会用到自连接,语法示例如下

select B.name from emp A join emp B on A.manager_id=B.id where A.name='赵六';

查出来结果如下

+------+
| name |
+------+
| 李四 |
+------+

总结表格

连接类型语法结果特点
内连接SELECT * FROM A INNER JOIN B左右表交集只返回匹配的行
左外连接SELECT * FROM A LEFT JOIN B左表全数据 + 左右表交集左表为主,右表无匹配时用 NULL
右外连接SELECT * FROM A RIGHT JOIN B右表全数据 + 左右表交集右表为主,左表无匹配时用 NULL
全外连接SELECT * FROM A FULL JOIN B左表全数据 + 右表全数据 - 重复行左表和右表的并集
自连接SELECT * FROM A A1 JOIN A A2表内关联数据同一张表与自身连接

相关文章:

  • 2953. 统计完全子字符串(将题目中给的信息进行分组循环)
  • FRP多协议支持与高级功能解析
  • 新能源汽车充换站如何实现光储充一体化管理?
  • 可靠消息投递demo
  • 对接SaToken @SaCheckEL 鉴权注解
  • Linux-顺序队列练习-链式队列-树
  • cocos:从@ccclass装饰器到组件化开发
  • 大模型在舌癌预测及治疗方案制定中的应用研究
  • 软考中级网络工程师第六章网互联与互联网
  • VectorBT:Python量化交易策略开发与回测评估详解
  • sklearn基础教程
  • 【AVRCP】蓝牙链路控制器(LC)与AVRCP互操作性要求深度解析
  • 希尔排序中的Hibbard序列
  • AI大白话(四):自然语言处理——AI是如何理解和生成人类语言的?
  • 自动化测试框架详解
  • 车载软件架构 --- AUTOSAR AP/CP中诊断的区别
  • Python functools 模块的 @lru_cache 装饰器介绍
  • wps字符很分散
  • 【STM32】SPI通信协议W25Q64Flash存储器芯片(学习笔记)
  • OSS Browser2.0安装使用(阿里云对象存储OSS 图形化界面工具2.0版本)
  • 气候多米诺:厄尔尼诺与东南亚跨境害虫或威胁中国粮食安全
  • “80后”德州市接待事务中心副主任刘巍“拟进一步使用”
  • 京东CEO许冉:外卖日单量接近2000万单,看到外卖对平台拉动和转化效应
  • 宝通科技:与宇树合作已签约,四足机器人在工业场景落地是重点商业化项目
  • 持续8年仍难终了的纠纷:败诉方因拒执罪被立案,胜诉方银行账户遭冻结
  • 筑牢安全防线、提升应急避难能力水平,5项国家标准发布