mysql左连接、右连接、内连接(等值连接)、全连接
===================================================================
1.准备表、数据
create table a(id int, nameA varchar(16));
insert into a values(1,'a1');
insert into a values(2,'a2');
create table b(id int, nameB varchar(16));
insert into b values(1,'b1');
insert into b values(3,'b3');
2.内连接、外连接
2.1内连接
----------------------------------------------------------
SELECT * from a inner JOIN b on a.id = b.id; --内连接
1 a1 1 b1
SELECT * from a, b where a.id = b.id; --等值连接 = 内连接
1 a1 1 b1
2.2左连接
----------------------------------------------------------
SELECT * from a LEFT JOIN b on a.id = b.id; --左连接
1 a1 1 b1
2 a2 null null
2.3右连接
----------------------------------------------------------
SELECT * from a right JOIN b on a.id = b.id; --右连接
1 a1 1 b1
null null 3 b3
2.4全连接
----------------------------------------------------------
SELECT * from a FULL JOIN b; --全连接
1 a1 1 b1
2 a2 1 b1
1 a1 3 b3
2 a2 3 b3
这几种连接的区别,大体可以理解为:
左连接以左边为基准,右边可能有空值;
右连接以右边为基准,左边可能有空值;
内连接则保证没有空值,不对应的就不显示了。
===================================================================
1.准备表、数据
create table a(id int, nameA varchar(16));
insert into a values(1,'a1');
insert into a values(2,'a2');
create table b(id int, nameB varchar(16));
insert into b values(1,'b1');
insert into b values(3,'b3');
2.内连接、外连接
2.1内连接
----------------------------------------------------------
SELECT * from a inner JOIN b on a.id = b.id; --内连接
1 a1 1 b1
SELECT * from a, b where a.id = b.id; --等值连接 = 内连接
1 a1 1 b1
2.2左连接
----------------------------------------------------------
SELECT * from a LEFT JOIN b on a.id = b.id; --左连接
1 a1 1 b1
2 a2 null null
2.3右连接
----------------------------------------------------------
SELECT * from a right JOIN b on a.id = b.id; --右连接
1 a1 1 b1
null null 3 b3
2.4全连接
----------------------------------------------------------
SELECT * from a FULL JOIN b; --全连接
1 a1 1 b1
2 a2 1 b1
1 a1 3 b3
2 a2 3 b3
这几种连接的区别,大体可以理解为:
左连接以左边为基准,右边可能有空值;
右连接以右边为基准,左边可能有空值;
内连接则保证没有空值,不对应的就不显示了。