SQL- inner outer join
Posted 陈蒙_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL- inner outer join相关的知识,希望对你有一定的参考价值。
以 A 和 B 两个表为例,其中分别有字段 a 和 b,数据为:
A.a | B.b |
---|---|
1 | 3 |
2 | 3 |
3 | 4 |
4 | 5 |
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.a | B.b |
---|---|
3 | 3 |
3 | 3 |
4 | 4 |
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.a | B.b |
---|---|
3 | 3 |
3 | 3 |
1 | null |
2 | null |
4 | 4 |
right join
与 left join 类似,right join 是以右表为基准,把右表中的每个元素逐个与左表中的元素做组合,取出满足 on 条件的组合,不满足 on 条件的则以 null 补充,最后的结果是右表元素全量展示,结果的条数与右表元素的个数相同。
以 select * from A right join B on where A.a = B.b
为例,其结果为:
A.a | B.b |
---|---|
3 | 3 |
3 | 3 |
4 | 4 |
null | 5 |
full join
full join 是将左右表中的每个元素和对方做组合,满足on条件的则取出作为结果,不满足的以null填充。
以 select * from A full join B on A.a = B.b
,其结果为:
A.a | B.b |
---|---|
3 | 3 |
3 | 3 |
1 | 1 |
2 | 2 |
4 | 4 |
3 | 3 |
3 | 3 |
4 | 4 |
null | null |
注意,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的区别)