(left join, right join, inner join, cross join)
-
声明:
1.左连接 left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种,两种写法的效果一样。
2.右连接 right join是right outer join的简写,它的全称是右外连接,是外连接中的一种,两种写法的效果一样。
3.mysql不支持全外链接 FULL OUTER JOIN,Oracle支持FULL OUTER JOIN全外链接。
-
左连接left join
left join是以左表为基础,左表(l_table)的记录将会全部表示出来,而右表(r_table)只会显示符合搜索条件的记录,右表记录不足的地方均为NULL。
select * from l_table a
left join r_table b on a.aID = b.bID
-
右连接right join
right join和left join的结果刚好相反,这次是以右表(r_table)为基础的,左表不足的地方用NULL填充。
select * from l_table a
right join r_table b on a.aID = b.bID
-
内连接inner join
inner join只显示符合条件的数据,并不以哪个表为基础。
select * from l_table a
inner join r_table b on a.aID = b.bID
等价于
select * from l_table a, r_table b
where a.aID = b.bID
-
交叉连接cross join
交叉连接生成笛卡尔积(纯关系代数的乘运算),它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配。比如l_table有3条记录,r_table表中有7条记录,则cross join会产生21条数据。交叉连接中没有on条件子句。
select * from l_table a
cross join r_table b
-
mysql如何实现全外连接full outer join
包含两个数据集合中的全部行,不管另外一边的表中是否存在与它们匹配的行。
相当于将两个数据集合分别进行左外连接和右外连接,然后再使用并操作将上述两个结果集合并为一个结果集(消去重复行)。
根据功能上的描述,虽然mysql不支持全外连接,但我们可以使用“左外 UNION 右外”来实现全外连接。
select * from l_table a
left join r_table b on a.aID = b.bID
union
select * from l_table a
right join r_table b on a.aID = b.bID