MYSQL关联查询(内连接、外连接)

前言:

文中以两个表简单为例,讲述内外连接的含义,两个表的建表语句,及数据为:

CREATE TABLE `a_table` (
  `a_id` int(11) DEFAULT NULL,
  `a_name` varchar(10) DEFAULT NULL,
  `a_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `a_table`(`a_id`,`a_name`,`a_part`) values (19001,'小红','总裁办'),(19002,'小明','研发一部'),(19003,'小张','研发二部'),(19004,'小美','秘书处'),(19005,'小黄','办公室');

CREATE TABLE `b_table` (
  `b_id` int(11) DEFAULT NULL,
  `b_salary` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `b_table`(`b_id`,`b_salary`) values (19001,'20000'),(19002,'10000'),(19004,'15000'),(19009,'8000');

如下:
表a,存储人员部门编号信息;
在这里插入图片描述
表b存储人员薪资;
在这里插入图片描述

一、内连接:

关键字:inner join
含义:将一个表中的行与其他表中的行根据条件进行匹配,并允许从两个表中查询包含列的行记录
范围:只连接匹配的行
场景:
从表中可以看到,表b_table中并没与完全存储表a_table所有人员的薪资,如果想要查询,所有可以查询到薪资的人员薪资情况,这是我们可以使用内连接查询。
所有查询的结果都能够在连接的表中有记录。

以id匹配,返回两个表中id相同的行,拼接结果返回。
根据结果返回,查询结果根据Id匹配a_table和b_table,只返回匹配的行。

SELECT * FROM a_table a INNER JOIN b_table b ON a.a_id = b.b_id 

查询结果:
在这里插入图片描述

二、左外链接:

关键字:left join on / left outer join on
含义: 以左边的表为基准,去匹配右边的表的数据,匹配不到的显示为null
范围: 包含左边全部的行
场景:
我们需要查询所有人员的薪资范围,薪资表中没有人员薪资记录的返回null。

SELECT * FROM a_table a LEFT JOIN b_table b ON a.a_id = b.b_id

结果:
根据结果可以看到,本次查询以a_table 为基准,根据id去匹配b_table中的数据,匹配不到的返回null。
在这里插入图片描述

三、右外连接:

关键字:right join on / right outer join on
含义:以右边的表的数据为基准,去匹配左边所有的行
范围:包含右边所有的行
场景:
我们想要根据薪资表尽可能全的了解员工工资情况,所以以薪资表为基准,查询薪资表记录的所有人员的薪资情况,查询不到的人员为null。

SELECT * FROM a_table a RIGHT JOIN b_table b ON a.a_id = b.b_id 

结果:
根据结果可以看到,本次查询以b_table为基准,根据id去匹配a_table中的数据,匹配不到的返回null。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值