zoukankan      html  css  js  c++  java
  • Left Join ,On Where

    SQL语句如下:

    SELECT *
    FROM 表1
    LEFT JOIN 表2 ON 表1.id = 表2.id AND 表2.Name != 'ff'
    WHERE 表1.NAME != 'aa'

    步骤1:返回笛卡尔积(SELECT * FROM 表1 CROSS JOIN 表2)

    步骤2:应用ON筛选器(当前的条件为 表1.id = 表2.id AND 表2.Name != 'ff')

    步骤3:添加外部行

    这一步只对OUTER JOIN起作用,如果是LEFT JOIN会以左边的表为保留表,如果是RIGHT JOIN会以右边的表为保留表。所谓外部行是指,保留表中的行。即使第二步的ON过滤掉了一些行,在这一步,会根据保留表添加第二步过滤掉的行。当前的例子,不存在这种情况。

    步骤4.应用WHERE筛选器(当前是Name != ‘aa’)过滤前三步所生成虚拟表的数据。

    总结:如果SQL用的是Left Join ,On后面的条件对Left的表没有作用,只对Right的表有过滤作用,Where语句可以对Left的表有过滤作用
    如果SQL用的是Right Join ,On后面的条件对Right的表没有作用,只对Left的表有过滤作用,Where语句可以对Right的表有过滤作用

  • 相关阅读:
    如何将Python项目发布到PyPI
    hashlib的md5计算
    使用hexo和coding建立静态博客站点
    mysql 使用记录
    linux QA
    linux 使用记录
    转载-linux内核长什么样
    mysql 更改默认字符集
    Say goodbye
    SSH proxycommand 不在同一局域网的机器ssh直连
  • 原文地址:https://www.cnblogs.com/chenmfly/p/5940990.html
Copyright © 2011-2022 走看看