下边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
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
解决方案 »
- not exists的困惑,希望有人指点下,谢谢了。
- 用户登陆时,如果成功同时更新用户登陆时间,不知道sql语句怎么写?
- 请问怎样批量替换内容....感谢....
- 比较3字段大小并判断和第4个字段的关系:比较头痛!
- varchar的长度是8000,为什么我只能输入1023个字符,是小写字母?
- 求一个储存过程
- 请问这个代码错在哪了
- 一个数据库中的两个表(access)。在用代码讲数据从一个表导入另外一个表时。出错!!直导入了一部分。。快来快来。。。我是老山!!!!!!
- 有MSN的进来一下。我是新手请大家多帮忙呀!!
- 您觉得抽烟对程序设计有好处吗?抽烟的程序员请进............
- 自己写的数据库软件在其他电脑上不能登陆服务器
- 一条SQL,一个月每天的用量
如果你关心的是内部的查询过程,内部操作是很不同的
具体说比较复杂,打字太多,给你个网址看看好么?
http://wenku.baidu.com/view/787401b765ce050876321308.html
但是on语法关系明了,where语法凌乱
where写法在sql server中会最终体现为on语法,没有本质区别
但是在left join、right join等联接中,是先按照ON子句生成结果集,再按照where子句对结果集进行进一步删选,是完全不一样的步骤。
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的执行顺序。