• SQL中 Inner Join(内连),Left Join(左连),Right Join(右连),Full Join(全外连) 之间的区别 zz


    SQL中 Inner Join(内连),Left Join(左连),Right Join(右连),Full Join(全外连) 之间的区别 

    I. 概念

    1. CROSS JOIN(交叉连接)
    如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积。
    例如:
    A:SELECT a.*,b.* FROM table1 a,table2 b WHERE a.id=b.id
    B:SELECT * FROM table1 a CROSS JOIN table2 b WHERE a.id=b.id
    一般不建议使用方法A和B,因为如果有WHERE子句的话,往往会先生成两个表行数乘积的行的数据表然后才根据WHERE条件从中选择。因此,如果两个需要求交集的表太大,将会非常非常慢。

    2. INNER JOIN(内连接)

    两边表同时符合条件的组合。
    例如:
    SELECT * FROM table1 a INNER JOIN table2  b ON a.id=b.id

    如果仅仅使用 SELECT * FROM table1 INNER JOIN table2  内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样,但是不同于笛卡尔积的地方是,没有笛卡尔积那么复杂要先生成行数乘积的数据表,内连接的效率要高于笛卡尔积的交叉连接。

    3. LEFT [OUTER] JOIN(左外连接 )

    显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL
    例如:
    SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column

    4. RIGHT [OUTER] JOIN(右外连接)

    显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL
    例如:
    SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column

    5. FULL [OUTER] JOIN(全外连接)

    显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集。
    例如:
    SELECT * FROM table1 FULL JOIN table2 ON table1.id=table2.id

    II. 辨析

    > Join = Inner Join
    > Left Join = Left Outer Join
    > Right Join = Right Outer Join
    > Full Join = Full Outer Join 
    > A left join B 的连接的记录数与A表的记录数同
    > A right join B 的连接的记录数与B表的记录数同
    > A left join B 等价于 B right join A
    > A inner join B 查询出来是A、B都有的数据
    > A full outer join B 查询出来是A、B所有总共的数据

    III. 示例

    示例表:
    A表(a1,b1,c1)      B表(a2,b2)
    a1   b1   c1       a2    b2
    01   数学 95       01    张三
    02   语文 90       02    李四
    03   英语 80       04    王五

    1. Inner Join
    select A.*,B.* from A
    inner join B on(A.a1=B.a2)
    结果是:
    a1   b1   c1       a2    b2
    01   数学 95       01    张三
    02   语文 90       02    李四

    2. Left Join
    select A.*,B.* from A
    left outer join B on(A.a1=B.a2)
    结果是:
    a1   b1   c1       a2    b2
    01   数学 95       01    张三
    02   语文 90       02    李四
    03   英语 80       NULL  NULL

    3. Right Join
    select A.*,B.* from A
    right outer join B on(A.a1=B.a2)
    结果是:
    a1   b1   c1       a2    b2
    01   数学 95       01    张三
    02   语文 90       02    李四
    NULL NULL NULL     04    王五

    4. Full Join
    select A.*,B.* from A
    full outer join B on(A.a1=B.a2)
    结果是:
    a1   b1   c1       a2    b2
    01   数学 95       01    张三
    02   语文 90       02    李四
    03   英语 80       NULL  NULL
    NULL NULL NULL     04    王五


  • 相关阅读:
    基于kubernetes v1.17部署dashboard:v2.0-beta8
    kubeadm快速部署Kubernetes单节点
    kafka数据可靠性深度解读
    MySql中4种批量更新的方法
    如何分析Mysql慢SQL
    企业级SSD市场接口之争:SATA会被NVMe取代吗?
    强势回归,Linux blk用实力证明自己并不弱!
    影响性能的关键部分-ceph的osd journal写
    文章汇总(包括NVMe SPDK vSAN Ceph xfs等)
    NVMe over Fabrics:概念、应用和实现
  • 原文地址:https://www.cnblogs.com/IS2120/p/6745979.html
Copyright © 2020-2023  润新知