zoukankan      html  css  js  c++  java
  • SQL关联查询中on与where

    微信公众号:刺刺刺猬的优雅

    前段时间,做一个查询,打算用left join查询存在于A表但不存在于B表记录,但怎么查都不对,原因是把所有filter全部放在了where语句中,因此回头看了资料,记录一下。


    on 条件是在join之前生效,因此无论后面是什么条件都会返回左表所有记录。

    where 条件是在完成join后再生效。


    下面进行测试:

    表t1描述学生姓名和年龄:

    表t2描述学生姓名和分数:

    ****************************SQL1*******************************

    select t1.*,'*******' as "华丽分割",t2.*

    from sherry.t1 t1

    left join sherry.t2 t2 on t1.st_name = t2.st_name and t1.st_name = 'emma';

    ****************************SQL2*******************************

    select t1.*,'*******' as "华丽分割",t2.*

    from sherry.t1 t1

    left join sherry.t2 t2 on t1.st_name = t2.st_name and t2.st_name = 'sharon';

    ****************************SQL3*******************************

    select t1.*,'*******' as "华丽分割",t2.*

    from sherry.t1 t1

    left join sherry.t2 t2 on t1.st_name = t2.st_name

    where t1.st_name = 'emma';

    ****************************SQL4*******************************

    select t1.*,'*******' as "华丽分割",t2.*

    from sherry.t1 t1

    left join sherry.t2 t2 on t1.st_name = t2.st_name 

    where t2.st_name = 'sharon';


    总结:

    不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。但是建议无论是哪种关联方式,都安装严格的格式来写。

  • 相关阅读:
    APIO dispatching
    奶牛抗议
    擦弹
    逃跑
    [Hnoi2016]网络
    [Ahoi2005]LANE 航线规划
    素数密度_NOI导刊2011提高(04)
    P2939 [USACO09FEB]改造路Revamping Trails(分层图最短路)
    洛谷P3396 哈希冲突(分块)
    洛谷P4332 [SHOI2014]三叉神经树(LCT)
  • 原文地址:https://www.cnblogs.com/guoxueyuan/p/9084389.html
Copyright © 2011-2022 走看看