刚刚在项目中遇到这样一个问题,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 )
相关推荐
7. AND运算符:优先级高于OR,意味着在没有括号的情况下,AND条件会先被计算。 8. OR运算符:优先级最低,仅在AND运算符之后进行计算。 注意,使用括号可以改变运算的顺序,以确保表达式的正确性。例如,`SELECT * ...
Oracle SQL中的逻辑运算符优先级为:`NOT` > `AND` > `OR`。这意味着`NOT`运算符优先级最高,其次是`AND`,最后是`OR`。 - **示例**: 考虑以下查询: ```sql SELECT last_name || '' || salary * 1.05 AS ...
- **AND, OR**: 分别表示逻辑“与”和“或”,其中AND的优先级高于OR。 **注意**:空值(NULL)在比较运算中会产生特殊的行为,与任何值比较都会得到未知(NULL)的结果,因此在设计查询时应特别注意处理空值。 ...
在执行包含多个条件的查询时,如同时使用like、or和and,需要特别注意运算符的优先级,并用括号来明确条件的组合顺序。 关于Oracle数据类型,文档中介绍了多种数据类型,包括字符型、数值型、日期型、以及二进制型...
需要注意的是,在Oracle SQL中,`AND`运算符的优先级高于`OR`运算符。这意味着如果没有使用括号来指定计算顺序的话,系统会先计算`AND`再计算`OR`。例如: ```sql SELECT * FROM table_name WHERE column1 = value1...
`NOT`的优先级最高,然后是`AND`,最后是`OR`。注意括号的使用可以改变运算顺序。 3. **ORDER BY** 用于对查询结果进行排序,`ASC`表示升序,`DESC`表示降序。可以使用列的别名或多字段进行排序。 4. **日期和时间...
- Oracle SQL的操作符优先级遵循特定的规则,从高到低依次是:算术操作符、连接操作符、比较操作符、NOT逻辑操作符、AND逻辑操作符、OR逻辑操作符。 3. **创建存储过程**: - `CREATE PROCEDURE`语句用于创建存储...
2. OR:双值运算符,只要左右两侧的条件有一个为真,结果就为真。 3. NOT:单值运算符,用于反转条件的真假。如果原始条件为真,NOT后的结果为假;如果原始条件为假,结果为真。 例如,如果我们想查询颜值为'漂亮'...
本文将深入探讨Oracle中的一些常用SQL语法,包括SELECT、WHERE、AND及OR等关键概念。 首先,我们关注的是SELECT语句,它是SQL中最基本也最重要的部分,用于从数据库中获取数据。基本的SELECT语法如下: ```sql ...
- **逻辑条件**:使用逻辑运算符(AND、OR、NOT)来组合多个条件。 - **优先规则**:SQL中的条件优先级遵循一般的数学运算规则。 - **排序** - **降序排序**:使用ORDER BY 子句后跟DESC关键字实现。 - **用列...
- **AND与OR混合使用**:需要使用括号来调整运算优先级,如`SELECT * FROM t_owners WHERE (name LIKE '%刘%' OR housenumber LIKE '%5%') AND addressid=3`。 2. **范围查询**: - 使用`BETWEEN`关键字可方便地...
=`, `, `, `>`, `>=` 进行比较,以及 `AND`, `OR`, `NOT` 进行逻辑操作。例如:`SELECT * FROM emp WHERE deptno = 20 AND sal > 2000;` - **去除重复行**: 使用 `DISTINCT` 关键字去除查询结果中的重复行。例如:`...
逻辑运算符有AND、OR和NOT,用于组合多个条件。范围查询可以用BETWEEN,例如`BETWEEN 最小值 AND 最大值`,而IN和NOT IN则用于指定值的集合查询。NULL值的处理很重要,可以使用`IS NULL`或`IS NOT NULL`进行判断。 ...
9. **逻辑条件**:可以使用`AND`、`OR`和`NOT`等逻辑运算符来组合条件。 10. **优先规则**:在复杂的查询条件中,需要注意运算符的优先级。 ##### 2.3 排序 1. **降序排序**:使用`ORDER BY 列 DESC`对结果进行...
- `OR`:逻辑或 - `NOT`:逻辑非 - `BETWEEN AND`:指定范围 - `IN`:指定列表 - `NOT IN`:指定不在列表中 - `LIKE`:模糊匹配 **列取别名:** ```sql SELECT 列 AS 别名 FROM 表名; ``` - 别名可以简化列的显示...
- 在复合条件下,逻辑运算符的优先级顺序是NOT、AND、OR。 **2.3 排序** - **2.3.1 降序排序** - 使用ORDER BY 列 DESC; 来按降序排序。 - **2.3.2 用列别名排序** - 可以使用ORDER BY 别名 ASC/DESC; 来根据...
算术运算符具有最高的优先级,接着是连接运算符,然后是比较运算符,逻辑运算符中NOT优先于AND,AND优先于OR。 4. **SQL*Plus函数**: - SQL*Plus函数是一类用于处理和转换数据的内置函数,它们接受一个或多个参数...