逻辑 与 或 非的优先级(and or not 优先级)
2014-09-01 17:50
323 查看
刚才写一条hql语句,想起来之前上学那会老师的教诲:用到or的时候防止逻辑出错把需要or的条件用括号括起来。在写hql的时候就很注意,把需要or的条件括了起来,然后执行的时候看了下Hibernate执行的sql语句却没有括号,这会犯疑惑了,难道是Hibernate出问题了,通过一番求证,得出如下结论:并不是Hibernate出错了,而是自己基础太差了。下边就这个问题来分析下。
给大家看两条语句
1、select 1 from dual where (1=1 and 2=2) or (3=3 and 4=4) (这里考下大家,是否需要加括号呢?)
2、select 1 from dual where (1=1 or 2=2) and 3=3 (这里考下大家,是否需要加括号呢?)
对于第一条语句如果加上括号是多余的,由于表达式的优先级为(非>与>或)即(not > and > or),可得出就算去掉括号也是无关紧要的。
对于第二条语句如果去掉括号语句就变成了select 1 from dual where 1=1 or (2=2 and 3=3) 为了表达清楚意思故意用括号把2=2 and 3=3 括了起来。这样就跟要表达的意思不一致了。
给大家看两条语句
1、select 1 from dual where (1=1 and 2=2) or (3=3 and 4=4) (这里考下大家,是否需要加括号呢?)
2、select 1 from dual where (1=1 or 2=2) and 3=3 (这里考下大家,是否需要加括号呢?)
对于第一条语句如果加上括号是多余的,由于表达式的优先级为(非>与>或)即(not > and > or),可得出就算去掉括号也是无关紧要的。
对于第二条语句如果去掉括号语句就变成了select 1 from dual where 1=1 or (2=2 and 3=3) 为了表达清楚意思故意用括号把2=2 and 3=3 括了起来。这样就跟要表达的意思不一致了。
相关文章推荐
- 数据运算+-*/,比较运算符==!=,赋值运算,逻辑运算and,or,not,成员运算in,not in,身份运算is is not,位运算&|,运算符的优先级
- 【再回首Python之美】【逻辑运算】七个逻辑运算符:not, or, and, not or, not and, !=, ==
- SQL中not and or优先级问题
- not and or的优先级
- 逻辑操作符---Lua: and,or,not 对比 C++:&&,||,!
- Oracle SQL逻辑操作符and、or与not
- [Python]计算闰年时候出现的and和or优先级的问题以及短路逻辑
- [Python]计算闰年时候出现的and和or优先级的问题以及短路逻辑
- lua 逻辑运算 and, or, not【转】
- 逻辑运算 NOT\AND\OR\XOR\TEST
- Win32 汇编 - 逻辑运算指令: AND、OR、XOR、NOT、TEST
- oracle中逻辑运算符(not,and,or)及其优先级
- 学 Win32 汇编[22] - 逻辑运算指令: AND、OR、XOR、NOT、TEST
- numpy: np.logical_and/or/not (逻辑与/或/非)
- [Python]计算闰年时候出现的and和or优先级的问题以及短路逻辑
- [汇编]逻辑运算 => AND,OR,XOR,NOT
- not and or的优先级
- mysql查询时,and or同时存在时,and的优先级高于or
- Maven经典错误之一:Please ensure you are using JDK 1.4 or above and not a JRE
- UVa 10070 - Leap Year or Not Leap Year and ...