sql中and和or多个连着怎么理解,比如: select * from table where tj1 and tj2 and tj3 or tj4 or tj5

2024-12-17 13:23:07
推荐回答(3个)
回答1:

不是。是可优先级比较高的and先执行,同级别的就从左往右执行。。 我用括号给你标出执行顺序,你看下就明白了。
select * from table where ((((tj1 and tj2) and tj3) or tj4) or tj5)

看明白了吗?最里面的括号先执行,然后是外面一层的括号。
如果你把and和or的位置变换一下,那么执行顺序也会发生改变。比如:
select * from table where ((tj1 or (tj2 and tj3) )or (tj4 and tj5))

不知道你看明白没有。。 不明白的可以问我。

回答2:

你的理解是对的。
A OR B 只要有一个是false就是false,所以当or和and相遇时,如果没括号,那就相当于or两侧的条件和每一个and条件进行组合。

回答3:

SQL Server

级别 运算符
1 ~(位非)
2 *(乘)、/(除)、%(取模)
3 +(正)、-(负)、+(加)、(+ 连接)、-(减)、&(位与)
4 =, >、<、>=、<=、<>、!=、!>、!<(比较运算符)
5 ^(位异或)、|(位或)
6 NOT
7 AND
8 ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
9 =(赋值)

注意到了么?

AND 排在第7位。
OR 排在第8位。

也就是如果不加括号, 那么先 AND 完了, 再 OR