日期:2014-05-18  浏览次数:20641 次

今天被伤到了,问个问题
mssql 中 where 后面的条件是按从左向右执行还是从右向左执行?

我回答说这个不定,要看执行计划。面试官直接一句,谁说不定的?
我只好回家,如果有顺序,可能是从左住右吧。
面试官又是一句,谁说是从左往右。
我说应该是不定,要看计划,如果中间一列是有索引的,边上的列没有索引,不可能先执行两边的啊?
面试官说谁说的?
我擦,我火了,我说这个实验就知道了。
擦,老子就直接走了。

说实话,好多东西都是想得不是很定的,所以我想问问高手,where后面的到底有没有顺序?我反正觉得没有。

------解决方案--------------------
SQL code
--我认为是从左到右执行

declare @t table (col1 int,col2 int,col3 int,col4 int)
insert into @t select 1,2,3,4

select * from @t 
where col4>'d' and col1>'a' and col2>'b' and col3>'c'
/*
Conversion failed when converting the varchar value 'd' to data type int.
*/

------解决方案--------------------
语法解释和语句的执行不是一个逻辑。

逻辑运算符的优先顺序是 NOT(最高),然后是 AND,最后是 OR。不过,可以在搜索条件内使用括号来表示优于此优先顺序的运算符。根据查询优化器所做的选择,逻辑运算符的求值顺序可能有所不同。

详见:T-SQL 搜索条件

------解决方案--------------------
没有顺序,无需纠结。
------解决方案--------------------
面试官这么问,要么他不懂,要么就是故意看你到底懂不懂,你要坚定,他就动摇,你要犹豫,首先说明你不太懂。
------解决方案--------------------
感觉没顺序的说。。。楼主被纠结了。
------解决方案--------------------

------解决方案--------------------
难道ORACLE中和SQL SERVER 中不一样:

http://wenku.baidu.com/view/90fbcd00de80d4d8d15a4fa8.html
------解决方案--------------------