浅谈数据库的内链接与外连接
-------------------------------------------------
a表 id name b表 id job parent_id
1 张三 1 23 1
2 李四 2 34 2
3 王五 3 34 1
--------------------------------------------------
(图一:以下举得例子是以这个数据库表展开的)

(图二:为了更加清晰地表明内外连接所提供的)
1)内连接:内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所 以内连接可能会丢失信息。
简单地说:内连接就是查找表与表中共有的部分,就相当于图二的中间的公共部分
内连接:select a.*,b.* from a inner join b on a.id=b.parent_id;
结果是
1 张三 1 23 1
1 张三 3 34 1
2 李四 2 34 2
2)外连接:外连接分左连接与右连接两种
a)左连接:左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹 配行,则在相关联的结果集行中右表的所有选择列表列均为空值。相当于图二的中间部分,加上左边那部分
关键的sql语句:LEFT JOIN或LEFT OUTER JOIN
例子: select a.* , b.* from a left join b on a.id=b.parent_id;
例子分析,执行上面的语句相当于先查询出a表,然后根据a表的id去与b表的parent_id匹配,不管有多少条匹配,都会一一列出来,就 好比例子中,a表中id为1的,与b表中parent_id为1的,有两条数据匹配,所以两条都会列出来,如果a表中的id没有与b表中的 parent_id有所匹配,则会以null来b表的数据代替。
结果如下:
1 张三 1 23 1
1 张三 3 34 1
2 李四 2 34 2
3 王五 null null null
b)右连接:右连接是与左连接其实是一样的,只是左连接是以左表为标准,而右连接是以右表为准。其它的都是大同小异
select a.*,b.* from a right join b on a.id=b.parent_id
结果是
1 张三 1 23 1
2 李四 2 34 2
1 张三 3 34 1
3) 完全连接 (MySQL不支持全外连接)
FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行, 则整个结果集行包含基表的数据值。
select a.*,b.* from a full join b on a.id=b.parent_id
结果是
1 张3 1 23 1
1 张三 3 34 1
2 李四 2 34 2
3 王武 null null null

浙公网安备 33010602011771号