• 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    王五


  • 相关阅读:
    方法级别的抽象
    同事关系处理6个关键点
    面向对象(类与对象)
    初识面向对象
    Python模块学习
    解决ORA-21561: OID generation failed
    Python模块——PrettyTable 模块
    对于python setup.py install安装的包如何卸载
    git问题--Push rejected: Push to origin/master was rejected
    Scrapyd发布爬虫的工具
  • 原文地址:https://www.cnblogs.com/IS2120/p/6745979.html
Copyright © 2020-2023  润新知