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