仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 902|回复: 9
打印 上一主题 下一主题

[学习教程] SqlServer中or和and的优先级剖析

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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:24 | 只看该作者
对于微软系列的工具除了一遍遍尝试还真没有太好的办法
只想知道 该用户已被删除
板凳
发表于 2015-1-25 10:53:50 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
谁可相欹 该用户已被删除
地板
发表于 2015-2-2 21:54:41 | 只看该作者
也可谈一下你是怎么优化存储过程的?
admin 该用户已被删除
5#
发表于 2015-2-8 08:09:14 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
若相依 该用户已被删除
6#
发表于 2015-2-25 05:05:16 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
因胸联盟 该用户已被删除
7#
发表于 2015-3-7 17:33:06 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
分手快乐 该用户已被删除
8#
发表于 2015-3-15 11:37:44 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
若天明 该用户已被删除
9#
发表于 2015-3-22 01:09:26 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
爱飞 该用户已被删除
10#
发表于 2015-3-22 01:09:26 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 18:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表