首页 > 编程知识 正文

sql左连接,sql左连接和内连接的区别

时间:2023-05-05 01:49:13 阅读:220512 作者:2601

SQL的连接分为三类: 外连接(包括左连接left join、右连接right join、全连接full join)内连接 inner join自然连接 natural join

       

       

我们来看一个超级简单的例子(下面的地址单词写错了,每个图都要重改太麻烦了):

        现在有两个表,一个是student_name学生姓名,有id和name(姓名)两个属性,一个是student_adress学生地址,有id和adress(地址)两个属性。两个表都有 id 1,2,3,如图:

       

       

左连接 select * from student_name left join student_adress on student_name.id=student_adress.id;

        以id作为连接条件,左连接表示以左边这个表为基准,去匹配右边这个表,如果右边的表有同样的id,就合成一行。如果没有(比如地址表没有id5,6),缺的字段就会用NULL补齐。

       

       

右连接 select * from student_name right join student_adress on student_name.id=student_adress.id;

        以id作为连接条件,右连接表示以右边这个表为基准,去匹配左边这个表,如果左边的表有同样的id,就合成一行。如果没有(比如姓名表没有id7,8),缺的字段就会用NULL补齐。可以和左连接的图对比着看。

       

       

全连接 select * from student_name full join student_adress ;

        全连接将两个表就主键进行了一个笛卡儿积,比如姓名表id有5个,地址表id有5个,最后就会产生一个5*5行的表。

       

       

内连接 select * from student_name inner join student_adress on student_name.id=student_adress.id;

        内连接可以使用using或on子句来指定连接条件,连接条件中指出某两字段相等(可以不同名)。内连接返回的结果是两个表中都有的字段,这里是id1,2,3。

       

       

自然连接 select * from student_name natural join student_adress ;

        自然连接是通过对表关系中同名的属性对取等来完成的,无须自己添加连接条件(后面不用接on指定以什么字段连接)。自然连接和内连接的结果基本相同,都是返回两表都有的字段,这里是id1,2,3。
        不同的是,看图,内连接返回的是两列id,自然连接返回的是一列id。

       

       

       

内连接和自然连接的区别?

一、

自然连接只能是同名属性的等值连接。内连接可以使用using或on子句来指定连接条件,连接条件中指出某两字段相等(可以不同名)。

        什么意思呢,就是说,如果现在地址表的id属性名改为了sid,而姓名表的id属性名仍然是id。如图,那么仍可以对两表进行内连接,只需要指定连接条件为 on student_name.id=student_adress.sid 就可以了。但是下面这两个表不能进行自然连接了,因为他们没有同名属性(id和sid不同名)。

二、

自然连接返回的同名属性列只有一列。内连接返回两列

       

        如果此时你要进行select操作,注意!!!
        自然连接 select id from student_name natural join student_adress ;可以,因为自然连接的id只有一列。

        但是内连接 select id from student_name inner join student_adress on student_name.id=student_adress.id;会报错,因为内连接返回的id有两列!!!必须指明要选择的是来自哪个表的id。
        改成 select student_name.id from student_name inner join student_adress on student_name.id=student_adress.id;就可以了。

        可以参考SQL语句错误 Error Code: 1052. Column ‘id‘ in field list is ambiguous

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。