本文主要是介绍SQL中表之间的连接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1,各种连接之间的区分
笛卡尔积(下面两种写法等价)
select * from t1,t2;
select * from t1 join t2;
自然连接:在笛卡尔积的基础上筛选所有同名称属性相等的行。
select * from t1 natural join t2;
内连接:在笛卡尔积的基础上筛选两表id相等的行,与自然连接等价,并且在此连接中,on后面的and跟where等价。
select * from t1 inner join t2 on t1.id=t2.id
外连接(left,right,full):此连接中on后面的and与where是不等价的。
select * from t1 left join t2 on t1.id=t2.id and t1.name='zhang'
2,各种连接的实质
上述连接中的后三者都是在自然连接的基础上筛选而来,形成的流程如下:
表t1: 表t2:
以最复杂的下面这条连接来说明:
select * from t1 left join t2 on t1.id=t2.id and t1.name='li' where t1.id<>3
流程1:得到笛卡尔积
流程2:根据 t1 . id = t2 . id and t1 . name = 'li' 条件去筛选1中的结果
流程3:根据左连接的特殊性,把t1中没有匹配的行列出来,右边补null就可以了( 注意:此时会把重复的行删掉,比如t2中多一行(3 wa),但最终结果只有一条(3 wang null null))
流程4:如果后面还有where语句的话就在3的基础上刷选就ok了。
这篇关于SQL中表之间的连接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!