在mysql数据库中,主要有三种连表方式,分别是:
外连接 outer join
内连接 inner join
交叉连接 cross join
为了讲解以上三种连接,先于数据中构建好测试数据,涉及到两个表user、article:
user表,有4条数据article表,user_id表示文章所属的user外连接又可以细分为三种:
左外连接
右外连接
完全外连接
左外连接
select * from user left join article on user.id=article.user_id;
无论左表在右表有无匹配,都返回左表的数据,缺失的右表数据为NULL
维恩图形象解析
右外连接
select * from user right join article on user.id=article.user_id;
无论右表在左表有无匹配,都返回右表的数据,缺失的左表数据为NULL
维恩图形象解析
完全外连接
mysql并不支持full join,如果支持,将会像如下sql语句:
select * from user full join article on user.id=article.user_id;
可以通过union all子句,将left join与right join组合在一起,达到类似full join的效果:
无论左右表有无匹配,都返回两者的数据,缺失的数据为NULL
维恩图形象解析
内连接相对于外链接,就是内连接只要左右表都匹配的数据,也就是交集
select * from user inner join article on user.id=article.user_id;
维恩图形象解析
交叉连接相当于求左右两表的笛卡尔积
什么是笛卡尔积?
比如我有两组数据,a(1, 2, 3) 与 b(4, 5 6),求它们的笛卡尔积的结果就是:
3×3 = 9 组数据
select * from user cross join article;
4×7=28 组数据
总结:
你可以通过连表实现更复杂的查询