sql join的使用

mysql的join使用的一直比较少,毕竟在如今的互联网架构中,mysql越来越不推荐使用连表查询,毕竟查询的效率是一个现在分布式大数据等应用场景中是一个极重要因子,但在比较小的互联网项目中依然会是一个很方便的数据的聚合方法。

JOIN:如果表中有至少一个匹配,则返回行。
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行。
RIGHT JOIN:即使左表中没有匹配,也从右表中返回所有的行。
FULL JOIN:只要其中一个表中存在匹配,就返回行。

现在我们建两张表,分别是用户表(user)和订单表(order),来实践一下4种join的表现及用法:
sql join的使用_第1张图片
sql join的使用_第2张图片
可以看出,user表里有一个用户是没有买商品的,order表里也有一个订单对应的用户是不存在的,下面我们看看这两条特殊数据在各种join查询里会有什么表现。
以前一直不怎么使用join,基本都是使用引用两张表的方式,如下:
sql join的使用_第3张图片
查询出了两张表有关联关系的数据,没有关联到的记录都没有展示。其实这种方式与JOIN或INNER JOIN(内连接)表现是一致的。
sql join的使用_第4张图片
还有LEFT JOIN(左连接),会展示出所有用户,包括没有订单的用户,如下:
sql join的使用_第5张图片
某些数据库会把LEFT JOIN也称为LEFT OUTER JOIN,两者并没有区别。
右连接RIGHT(OUTER)JOIN也一样,会展示所有订单表的数据,包括没有关联的用户
sql join的使用_第6张图片
对于FULL JOIN(全连接),将会查询出所有user记录与所有order记录,包括没有关联的部分,不过mysql不支持full join,我用了union连接左连接查询与右连接查询实现这样的效果
sql join的使用_第7张图片

你可能感兴趣的:(mysql)