sql中的join:join,left join,right join,left outer join,right outer join,union,cross join

join (inner join)

内连接INNER JOIN是最常用的连接操作。从数学的角度讲就是求两个表的交集,从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录。

两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积

join不带on条件时返回笛卡尔乘积,与不带join效果一样,例:

select * from t_user, t_address;
或
select * from t_user inner join t_address;

 

left join (left outer join)

左连接LEFT JOIN的含义就是求两个表A表和B表的交集外加左表剩下的数据。依旧从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表A表中剩余的记录

注意:部分博客中表示:left join返回的行数 = 左表行数,这种说法是错误的。(只有在右表与左表匹配项中没有重复匹配时,返回的行数才等于左表行数);同理right join也一样。

right join (right outer join)

同理右连接RIGHT JOIN就是求两个表A和B表的交集外加右表B剩下的数据。再次从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录

 

full outer join 

外连接就是求两个表A和B集合的并集。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录。另外MySQL不支持OUTER JOIN,但是我们可以对左连接和右连接的结果做 UNION 操作来实现。

union

select   t.id userid,t.name, t.department_id, d.department from t_users t
left join t_department d on d.id = t.department_id
UNION
select   t.id userid,t.name, t.department_id, d.department from t_users t
right join t_department d on d.id = t.department_id

 

cross join

CROSS JOIN又称为笛卡尔乘积,实际上是把两个表乘起来。

 

参考博客:https://www.cnblogs.com/wanglijun/p/8916790.html