仓酷云

标题: SqlServer中or和and的优先级剖析 [打印本页]

作者: 飘灵儿    时间: 2015-1-16 14:07
标题: SqlServer中or和and的优先级剖析
EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。本来一向都没有弄分明sqlserver中and和or的优先级干系,觉得他们的优先级都是一样,在实行的时分按呈现的按次从左到右实行。但明天我在写一个束缚,以下:
(number>0andprenumber>0)or(number<0andprenumber<0)
保留后体系老是主动将我的束缚修正以下:
number>0andprenumber>0ornumber<0andprenumber<0
就是往失落了我的括号,我想,怎样会如许呢?如许不就改动了我的语意了吗?呵呵,查询材料后得知,本来,下面两个束缚的意义是一样的。

缘故原由:在SqlServer中,and的优先级比or的优先级要高。地点,在下面的束缚中,会先实行or双方的and前提,再实行or前提。

上面,我们能够做一个测试。
创立表及数据以下:
if(object_id(table1)isnotnull)
begin
droptabletable1
end
go

createtabletable1
(
IDintidentity(1,1)primarykey,
num1intnotnull,
num2intnotnull
)

insertintotable1(num1,num2)
select-1,-1
unionall
select-1,2
unionall
select1,2
unionall
select0,0


然后我们实行sql
select*fromtable1wherenum1>0ornum2>0andnum1<0

假如or与and的优先级是一样的话,那末应当只能查出一条数据,即
IDnum1num2
2-12

但实践上,我们实行后发明,这有查出两条数据了,
IDnum1num2
2-12
312
这是由于它先实行了and的前提,再实行or的前提,即同等以下:
select*fromtable1wherenum1>0or(num2>0andnum1<0)

那末,假如我们必定要sql先实行or前提,就要利用()来改动前提的实行按次了。仍是下面的sql,假如我们要先实行or前提,能够修正sql以下:
select*fromtable1where(num1>0ornum2>0)andnum1<0
导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。
作者: 乐观    时间: 2015-1-18 12:03
对于微软系列的工具除了一遍遍尝试还真没有太好的办法
作者: 只想知道    时间: 2015-1-25 10:53
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
作者: 谁可相欹    时间: 2015-2-2 21:54
也可谈一下你是怎么优化存储过程的?
作者: admin    时间: 2015-2-8 08:09
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
作者: 若相依    时间: 2015-2-25 05:05
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
作者: 因胸联盟    时间: 2015-3-7 17:33
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
作者: 分手快乐    时间: 2015-3-15 11:37
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
作者: 若天明    时间: 2015-3-22 01:09
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
作者: 爱飞    时间: 2015-3-22 01:09
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!




欢迎光临 仓酷云 (http://www.ckuyun.com/) Powered by Discuz! X3.2