SQL中 and or优先级问题
2016-06-22 09:43
701 查看
转自:点击打开链接
SQL中 and or优先级问题
刚刚在项目中遇到这样一个问题,SQL语句如下:
select * from LOAN_BACK_LIBRARY where LIBRARY_ID=1 or LIB_ID=1 and STATUS=3
我想要的结果的条件是:1. LIBRARY_ID=1 或者 LIB_ID=1
2.STATUS=3
但是结果并非如此,出现了STATUS!=3的结果,但是却匹配了 LIBRARY_ID=1 or LIB_ID=1
为什么呢
原来这个SQL的执行是这样的:
select * from LOAN_BACK_LIBRARY where LIBRARY_ID=1 or LIB_ID=1 and STATUS=3
修改为:
select * from LOAN_BACK_LIBRARY where STATUS=3 and LIBRARY_ID=1 or LIB_ID=1 依然不正确
呵呵,发现问题了:
where 后面如果有and,or的条件,则or自动会把左右的查询条件分开,即先执行and,再执行or。原因就是:and的执行优先级最高!
关系型运算符优先级高到低为:not and or
问题的解决办法是:
用()来改变执行顺序!!!!
上面我所需要的SQL语句是这样的
select * from LOAN_BACK_LIBRARY where STATUS=3 and (LIBRARY_ID=1 or LIB_ID=1 )
这样就是完美的答案了!!!!
优先级:NOT > AND > OR
SQL中 and or优先级问题
刚刚在项目中遇到这样一个问题,SQL语句如下:
select * from LOAN_BACK_LIBRARY where LIBRARY_ID=1 or LIB_ID=1 and STATUS=3
我想要的结果的条件是:1. LIBRARY_ID=1 或者 LIB_ID=1
2.STATUS=3
但是结果并非如此,出现了STATUS!=3的结果,但是却匹配了 LIBRARY_ID=1 or LIB_ID=1
为什么呢
原来这个SQL的执行是这样的:
select * from LOAN_BACK_LIBRARY where LIBRARY_ID=1 or LIB_ID=1 and STATUS=3
修改为:
select * from LOAN_BACK_LIBRARY where STATUS=3 and LIBRARY_ID=1 or LIB_ID=1 依然不正确
呵呵,发现问题了:
where 后面如果有and,or的条件,则or自动会把左右的查询条件分开,即先执行and,再执行or。原因就是:and的执行优先级最高!
关系型运算符优先级高到低为:not and or
问题的解决办法是:
用()来改变执行顺序!!!!
上面我所需要的SQL语句是这样的
select * from LOAN_BACK_LIBRARY where STATUS=3 and (LIBRARY_ID=1 or LIB_ID=1 )
这样就是完美的答案了!!!!
优先级:NOT > AND > OR
相关文章推荐
- MAC下mysql安装配置方法图文教程
- oracle删除不了用户,提示“无法删除当前已连接的用户”
- jdbc连接mysq之serverTimezone设定
- Ubuntu开启mysql远程访问权限
- Excel导入SQL SERVER,数字和字符会被系统自动置为NULL的解决方法
- Oracle11g Data Guard配置手册
- JDBC 读取数据库中的表信息和字段信息
- PL/SQL优化配置
- SQLite数据库
- MySQL存储引擎中的MyISAM和InnoDB区别详解
- Mysql自学笔记一
- Ubuntu安装Oracle 11g出现INS_RDBMS.MK的'all_no_orcl'错误
- 小心陷阱!MySQL中处理Null时需注意两点
- Ubuntu通过apt-get安装Oracle JDK
- 一次DB2数据库连接失败(SQLSTATE=08001)的解决方法
- oracle imp导入库到指定表空间
- 我需要什么样的数据库访问类?
- mysql5.7.13.zip安装教程(windows)
- xUtils之操作数据库
- java连接操作Oracle