您的位置:首页 > 数据库

SQL中表之间的连接

2016-07-13 22:31 423 查看


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了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息