zoukankan      html  css  js  c++  java
  • SQL之left join、right join、inner join的区别以及适用场景

    转载:

    https://blog.csdn.net/fashion2014/article/details/78826299

    left join(左连接) 返回包括左表中的所有记录和右表中连接字段相等的记录 

    Table A

    id name

    01 abc

    02 ab

    Table B

    id   cnt

    01   3

    03   4

    Select A.id,A.name,B.cnt A leftjoin B on A.id=B.id

    结果

    id name cnt

    01 abc   3

    02 ab    null

    特别地,也有记录条数大于左边表的时候,例如:

    Table A

    id name

    01 abc

    02 ab

    Table B

    id   cnt

    01   3

    01   5

    03   4

    Select A.id,A.name,B.cnt A left join B on A.id=B.id

    结果

    id name cnt

    01 abc   3

    01 abc   5

    02 ab    null

    结果是3条记录,比左连接左边的表table A的记录条数2还要多。

    连接字段即两表的id字段

    right join(右连接) 返回包括右表中的所有记录和左表中连接字段相等的记录

    Table B

    id   cnt

    01   3

    03   4


    Table A

    id name

    01 abc

    02 ab

    Select A.id,A.name,B.cnt B right join A on A.id=B.id

    结果

    id name cnt

    01 abc   3

    02 ab    null


    左连接和右连接很相似,只是左右表位置的不同罢了。适用场景,如:员工表中有个字段是详细地址信息表的主键id,这两个表相关联时,就可以用左连接或右连接,因为在详细地址信息表中找不到某员工的地址信息也要将员工这条记录显示出来,相应的详细地址信息字段为空即可,而不能因为地址没有存在数据库里,这个员工就没了(简单理解成不重要的信息不影响整条记录的显示)

    inner join(等值连接、内连接) 只返回两个表中连接字段相等的行

    Table A

    id name

    01 abc

    02 ab

    Table B

    id   cnt

    01   3

    03   4

    Select A.id,A.name,B.cnt A inner join B on A.id=B.id

    结果

    id name cnt

    01 abc   3

    内连接的适用场景:相连接的两个表中必须在某个字段上有相等的值才可以将整条记录显示出来,如一条服务单记录在了两个表中,A表中记录了该服务单的服务时间、坐席名称和录音地址等基本信息,B表中记录了该服务单的业务详情,如保险单号,车牌号,保单日期等,当显示该服务单时,要将A表与B表做内连接,因为少这两表任何一个表,该服务单都不算完整,缺失的信息会使业务上没法继续。

    总结:可以将可使用左连接和右连接的两个表理解成其中一个表的信息明显比另外一个表的信息重要得多;使用内连接的两个表理解成重要程度区别不太大的两个表。

    注意:看“重要”与否的标准要对于查询结果的显示而言。

    转载:

    https://blog.csdn.net/fashion2014/article/details/78826299

  • 相关阅读:
    [转]MFC与Qt的内存管理
    [转]QT项目生成流程例图
    [转]vc中nmake.exe cl.exe 的使用
    android_layout_linearlayout(二)
    android_layout_relativelayout(一)
    android_layout_linearlayout(一)
    android_layout_relativelayout(二)
    android_activity_研究(一)
    两个线程解决一个线程卡之路
    android_layout_framelayout
  • 原文地址:https://www.cnblogs.com/yaoze2018/p/12194180.html
Copyright © 2011-2022 走看看