SQL语句Left join 中On和Where的用法区别
2014-04-13 11:10
113 查看
原文地址:点击打开链接
SQL语句如下:
步骤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的表有过滤作用。
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的表有过滤作用。
相关文章推荐
- SQL语句Left join 中On和Where的用法区别
- SQL语句Left join 中On和Where的用法区别
- SQL语句Left join 中On和Where的用法区别
- SQL语句Left join 中On和Where的用法区别
- SQL语句Left join 中On和Where的用法区别
- SQL语句Left join 中On和Where的用法区别 .
- SQL语句Left join 中On和Where的用法区别
- SQL语句Left join 中On和Where的用法区别
- JOIN关联表中ON,WHERE后面跟条件的区别
- (转)Oracle的left join中on和where的区别
- 深入Oracle的left join中on和where的区别详解
- 关于数据库中使用 left join on ...and ...和 left join on ....where ...区别,和使用group by 要注意的情况
- SQL中on条件与where条件的区别
- on和where条件的区别
- mysql中join后on、where的区别
- left join on and与left join on where的区别
- oninput,onpropertychange,onchange的用法和区别
- 解析sql语句中left_join、inner_join中的on与where的区别
- SQL having与where用法区别
- jQuery中delegate和on的用法与区别详细解析