下边2个语句我都能得到想要的结果,什么时候用where,什么时候用on,我有点混淆了select DeptName,SlaveID DeptID
from DeptPower join DeptList
on SlaveID=DeptList.ID
where masterID=22 
order by DeptName asc
select DeptName,SlaveID DeptID
from DeptPower join DeptList
on SlaveID=DeptList.ID and masterID=22 
order by DeptName asc

解决方案 »

  1.   

    如果你关心的只是结果,以上两写法没区别
    如果你关心的是内部的查询过程,内部操作是很不同的
    具体说比较复杂,打字太多,给你个网址看看好么?
    http://wenku.baidu.com/view/787401b765ce050876321308.html
      

  2.   

    on是在做连接查询使用,where是多表查询使用。内连接跟where后接多表关联条件相似
      

  3.   

    两种写法而已,意义相同!
    但是on语法关系明了,where语法凌乱
    where写法在sql server中会最终体现为on语法,没有本质区别
      

  4.   

    在inner join中,ON和WHERE子句是没有区别的。
    但是在left join、right join等联接中,是先按照ON子句生成结果集,再按照where子句对结果集进行进一步删选,是完全不一样的步骤。
      

  5.   

    SQL的逻辑查询处理执行顺序
    Transact-SQL语言是基于集合(set-based)查询的语言。
    在实践中,查询的实际物理处理可能与逻辑处理有很大不同。
    1、FROM 
    2、ON
    3、JOIN--做笛卡尔乘积
    4、WHERE
    5、GROUP BY
    6、WITH(cube | rollup )
    7、HAVING
    8、SELECT 列表
    9、DISTINCT
    10、ORDER BY
    逻辑查询处理的步骤序号:
    (8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list> 
    (1) FROM <left_table> 
    (3) <join_type> JOIN <right_table> 
    (2) ON <join_condition> 
    (4) WHERE <where_condition> 
    (5) GROUP BY <group_by_list>
    (6) WITH {CUBE | ROLLUP} 
    (7) HAVING <having_condition> 
    (10) ORDER BY <order_by_list>
    可以借鉴下SQL的执行顺序。