前言:
文中以两个表简单为例,讲述内外连接的含义,两个表的建表语句,及数据为:
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。