zoukankan      html  css  js  c++  java
  • SQL语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别

    先上代码:

    declare @tb table (name varchar(10),sex int)

    declare @tb2 table (name varchar(10),age int)

    insert into @tb values('zhangsan',12)
    insert into @tb values('lisi',18)
    insert into @tb values('wangwu',14)

    insert into @tb2 values('zhangsan',12)
    insert into @tb2 values('zhangsan',20)
    insert into @tb2 values('lisi',18)
    insert into @tb2 values('wangwu',14)

    --select * from @tb
    --select * from @tb2

    select A.name,A.sex,B.age from @tb A left join @tb2 B on A.name=B.name -- A.name='zhangsan'

    select A.name,A.sex,B.age from @tb A left join @tb2 B on A.name=B.name AND A.name='zhangsan'

    select A.name,A.sex,B.age from @tb A left join @tb2 B on A.name=B.name WHERE A.name='zhangsan'

    在left join 和right join  或者 full join 操作时,会生成临时表, on  是生成临时表时起作用,临时表生成后就没作用了,where 是生成临时表后对临时表中的数据进行过滤操作

     inner join 会返回左右两表到交集  (相当于 逗号连接的表连接 select * from TableA,TableB where TableA.id=TableB.id)

    left join 会返回左表到全部数据,右表没有数据时用null填补   

    right join 会返回右表到全部数据,左表没有数据时用null填补

    full join 会返回两表到并集 没有数据到一方用null 填补

    结论:

    1. left join, right join, full join 操作时,会生成一个临时表

    2. on 是生成临时表的条件, 一个表中如果没有对应数据用null填补

    3. where 是生成临时表后,对临时表中的数据进行过滤 返回过滤后到数据

    相关链接:

    https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html

    https://www.cnblogs.com/GH0522/p/8579423.html

  • 相关阅读:
    Knowing how all your components work together: distributed tracing with Zipkin
    Java Annotation Processors
    深度剖析JDK动态代理机制
    Java 代理模式(二) Java中的动态代理
    Java 代理模式(一) 静态代理
    CGLib动态代理原理及实现
    Understanding sun.misc.Unsafe
    Finding Memory Leaks with SAP Memory Analyzer
    ubuntu18.04 安装mysql server
    Sqoop+mysql+Hive+ Ozzie数据仓库案例
  • 原文地址:https://www.cnblogs.com/yaoweijun/p/9921314.html
Copyright © 2011-2022 走看看