51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

mysql join

首先先放张图

今天聊聊mysqljoin连接,其本质是拿主表每条数据取出来和子表每行数据进行循环比较,如果满足则返回,不满足返回null

首先是内连接

两者之间取交集,两边都满足返回,不满足不返回

语法很简单

|-----------------------|-----------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 | hljs mysql SELECT * FROM tb_goods a INNER JOIN tb_goods_desc b WHERE a.id = b.goods_id |

其中,INNER可以省略掉只写个JOIN

然后是左外连接

左外连接,此时可以理解为理解 左表为主表,右表为子表。在条件不满足时,左表数据存在,右表数据为null

简单来说就是结果集包含左表所有行,右表不匹配则为null

|-------------------|----------------------------------------------------------------------------------------------------| | 1 2 3 4 5 | hljs mysql SELECT * FROM sp_user a LEFT OUTER JOIN tb_seller b ON a.seller_id = b.seller_id |

其中,OUTER可省略

反向操作一波就是右外连接

|-----------------------|-------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 | hljs mysql SELECT * FROM tb_seller a RIGHT OUTER JOIN sp_user b ON a.seller_id = b.seller_id WHERE b.seller_id IS NULL |

还有一种是全外连接

全外连接是内联结果和不满足条件的行

mysql不支持全外连接语法,所以我们用UNION实现全外连接

|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 | hljs mysql SELECT * FROM sp_user a LEFT OUTER JOIN tb_seller b ON a.seller_id = b.seller_id UNION SELECT * FROM sp_user a RIGHT OUTER JOIN tb_seller b ON FALSE |

另外,阿里开发规范表示

【强制】超过三个表禁止 join。需要 join 的字段,数据类型必须绝对一致;多表关联查询 时,保证被关联的字段需要有索引。

赞(0)
未经允许不得转载:工具盒子 » mysql join