SQL- inner outer join

Posted 陈蒙_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL- inner outer join相关的知识,希望对你有一定的参考价值。

以 A 和 B 两个表为例,其中分别有字段 a 和 b,数据为:

A.aB.b
13
23
34
45

inner

inner join 是对 A 和 B 做笛卡尔积,取出满足 on 条件的组合,
select * from A inner join B on A.a = B.b 为例,其等价于 select * from A, B where A.a = B.b
结果是:

A.aB.b
33
33
44

outer

outer join 分为 left outer join 和 right outer join 和 full outer join,其中 outer 关键字可以省略。

left join

left join 是以左表为全量基准,把左表中的每个元素逐个右表中的元素做组合,取出满足 on 条件的组合,不满足 on 条件的则以 null 补充,最后的结果是左表元素要全量展示。
select * from A left join B where A.a = B.b 为例,其结果为:

A.aB.b
33
33
1null
2null
44

right join

与 left join 类似,right join 是以右表为基准,把右表中的每个元素逐个与左表中的元素做组合,取出满足 on 条件的组合,不满足 on 条件的则以 null 补充,最后的结果是右表元素全量展示,结果的条数与右表元素的个数相同。
select * from A right join B on where A.a = B.b 为例,其结果为:

A.aB.b
33
33
44
null5

full join

full join 是将左右表中的每个元素和对方做组合,满足on条件的则取出作为结果,不满足的以null填充。
select * from A full join B on A.a = B.b,其结果为:

A.aB.b
33
33
11
22
44
33
33
44
nullnull

注意,mysql 不支持 full join,可以用 union all 代替:

SELECT  *
   FROM A
   LEFT JOIN B
   ON A.a = B.b
UNION ALL
   SELECT *
   FROM A
   RIGHT JOIN B
   ON A.a = B.b

以上内容基于 sqlfiddle ,mock 数据如下:

CREATE TABLE IF NOT EXISTS `a` (
  `id` int(6) unsigned NOT NULL,
  `rev` int(3) unsigned NOT NULL,
  `content` varchar(200) NOT NULL,
  PRIMARY KEY (`id`,`rev`)
) DEFAULT CHARSET=utf8;
INSERT INTO `a` (`id`, `rev`, `content`) VALUES
  ('1', '1', 'The earth is flat'),
  ('2', '2', 'One hundred angels can dance on the head of a pin'),
  ('3', '3', 'The earth is flat and rests on a bull\\'s horn'),
  ('4', '4', 'The earth is like a ball.');
  
  CREATE TABLE IF NOT EXISTS `b` (
  `id` int(6) unsigned NOT NULL,
  `rev` int(3) unsigned NOT NULL,
  `content` varchar(200) NOT NULL,
  PRIMARY KEY (`id`,`rev`)
) DEFAULT CHARSET=utf8;
INSERT INTO `b` (`id`, `rev`, `content`) VALUES
  ('1', '3', 'The earth is flat'),
  ('2', '3', 'One hundred angels can dance on the head of a pin'),
  ('3', '4', 'The earth is flat and rests on a bull\\'s horn'),
  ('4', '5', 'The earth is like a ball.');


``

以上是关于SQL- inner outer join的主要内容,如果未能解决你的问题,请参考以下文章

SQL中inner join,outer join和cross join的区别

SQL中inner join,outer join和cross join的区别

SQL中的left outer join,inner join,right outer join用法详解

SQL----Inner Join Outer JoinCross Join理解

SQL的JOIN语法解析(inner join, left join, right join, full outer join的区别)

SQL中inner join,outer join和cross join的区别