一、左连接
-- 左连接
select t1.a,t2.b from
(select 1 a from DUAL
union ALL
select 1 a from DUAL
union ALL
select 2 a from DUAL
union ALL
select 2 a from DUAL
union ALL
select 3 a from DUAL)t1 LEFT JOIN
(select 1 b from DUAL
union ALL
select 2 b from DUAL
union ALL
select 2 b from DUAL
union ALL
select 4 b from DUAL)t2 on t1.a=t2.b;
特点:
1、以左边表为基础,左边表数据全部展示。
2、将右边表中符合连接条件的数据关联过来。
3、左边表中有数据的右边表没有数据的,关联后右边表的字段展示为空。
二、右连接
-- 右连接
select t1.a,t2.b from
(select 1 a from DUAL
union ALL
select 1 a from DUAL
union ALL
select 2 a from DUAL
union ALL
select 2 a from DUAL
union ALL
select 3 a from DUAL)t1 RIGHT JOIN
(select 1 b from DUAL
union ALL
select 2 b from DUAL
union ALL
select 2 b from DUAL
union ALL
select 4 b from DUAL)t2 on t1.a=t2.b;
特点:
1、以右边表为基础,右边表数据全部展示。
2、将左边表中符合连接条件的数据关联过来。
3、右边表中有数据的左边表没有数据的,关联后左边表的字段展示为空。
三、内连接
-- 内连接
select t1.a,t2.b from
(select 1 a from DUAL
union ALL
select 1 a from DUAL
union ALL
select 2 a from DUAL
union ALL
select 2 a from DUAL
union ALL
select 3 a from DUAL)t1 INNER JOIN
(select 1 b from DUAL
union ALL
select 2 b from DUAL
union ALL
select 2 b from DUAL
union ALL
select 4 b from DUAL)t2 on t1.a=t2.b;
特点:
1、将左边表右边表中符合连接条件的数据关联起来展示。
2、左边表中有数据的右边表没有数据的,那么左边表中的数据不会展示。
3、右边表中有数据的左边表没有数据的,那么右边表中的数据不会展示。
4、笛卡尔积
-- 迪卡尔积
select count(1) from
(
select t1.a,t2.b from
(select 1 a from DUAL
union ALL
select 1 a from DUAL
union ALL
select 2 a from DUAL
union ALL
select 2 a from DUAL
union ALL
select 3 a from DUAL)t1,
(select 1 b from DUAL
union ALL
select 2 b from DUAL
union ALL
select 2 b from DUAL
union ALL
select 4 b from DUAL)t2
)t;
特点:不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行 一 一 匹配。
5、扩展
Mysql中的七种常用查询连接详解