zoukankan      html  css  js  c++  java
  • MySql数据查询中 left join 条件位置区别

    /*
    A 和 B 两张表都只有一个 ID 字段

    比如A表的数据为 ID 1,2,3,4,5,6

    B表的数据为 ID 1,2,3


    判断 JOIN 查询时候条件在 ON 和 WHERE 时的区别

    ON 和 WHERE 查询顺序有关
    标准查询关键字执行顺序为 FROM->WHERE->GROUP BY->HAVING->ORDER BY
    LEFT JOIN 是在 FROM 范围内 所以先 ON 条件筛选表,然后两表再做 LEFT JOIN
    而对于 WHERE 来说是在 LEFT JOIN 结果再次筛选
    */


    select A.ID as AID, B.ID as BID
    from A
    left join
    B
    on A.ID = B.ID
    where
    B.ID<3;
    /*
    1.这个语句是先执行 LEFT JOIN 即是:
    select A.ID as AID, B.ID as BID from A left join B on A.ID = B.ID
    2.再将查询结果中的 B.ID < 3 筛选出来
    */

    select A.ID as AID, B.ID as BID
    from A
    left join
    B
    on A.ID = B.ID and B.ID<3;

    /*
    1.这个语句是先安装 ON 条件 B.ID < 3 筛选出来,即是先执行:
    select ID from B where ID < 3;
    2.再将查询结果中的结果与A表做 LEFT JOIN,所以会保留A表所有的数据

    ON与where的使用一定要注意场所:

    (1):ON后面的筛选条件主要是针对的是关联表【而对于主表刷选条件不适用】。

    (2):对于主表的筛选条件应放在where后面,不应该放在ON后面。

    (3):对于关联表我们要区分对待。如果是要条件查询后才连接应该把查询件放置于ON后。

    如果是想在连接完毕后才筛选就应把条件放置于where后面。

    (4): 对于关联表我们其实可以先做子查询再做join


    第二个sql语句等价于
    select A.ID as AID, B1.ID as BID

    from A left join ( select B.ID from B where B.ID < 3 )B1 on A.ID = B1.ID
    */

  • 相关阅读:
    js作用域和作用域链
    js 预编译
    什么是匿名函数?
    js控制台显示[object Object]问题
    Freemarker常用内建函数
    java JSONObject转为map
    jQuery属性相关的操作
    基于jQuery的静态工具方法
    FreeMarker关于导入文件
    json数据的读取操作
  • 原文地址:https://www.cnblogs.com/lzh007blog/p/7656428.html
Copyright © 2011-2022 走看看