近日,在执行sql时,同时使用了and 与 or,并没有输出预期想要的结果,影响了数据的准确性,经过排查、原因是:
关系型运算符优先级高到低为:not and or。
1、逻辑与操作:AND
语法:A AND B
操作类型:boolean
说明:如果 A 和 B 均为 TRUE,则为 TRUE;否则为 FALSE。
select 1 where 1 = 1 and 2 = 2; 结果为1
2、逻辑与操作:OR
语法:A OR B
操作类型:boolean
说明:如果 A 或 B 有一个为 TRUE,则为 TRUE;否则为 FALSE。
select 1 where 1 = 2 or 2 = 2; 结果1
3.AND 与OR 连用,注意加括号。
例:
“Websites” 表中选取 alexa 排名大于 “15” 且国家为 “CN” 或 “USA” 的所有网站:
SELECT * FROM Websites WHERE alexa > 15 AND (country=‘CN’ OR country=‘USA’);
如果不加括号:执行的是满足alexa > 15 AND country=‘CN’ 与或者满足 country='USA’的数据,与预想的不一样。
再例:
数据源:
1,22
1,21
2,22
1,20
select * from id_age where (id=1 or id =2) and age=22;
表示:
查询id=1,同时age=22或者id=2,同时age=22的数据,数据只要id=1或者id=2都要加age=22这个条件
即id=1 and age=22/id=2 and age=22
显示结果:
1,22
2,22
select * from id_age where id=1 or id =2 and age=22;
仿佛and前后的条件类似于(小括号)的意思
表示:
查询id=1或者id=2同时age=22的数据,or前是一个查询条件,or后是一个查询条件,
即id=1/id=2 and age=22
显示结果:
1 20
1 21
1 22
2 22
不加小括号,会按照运算符的优先级,先执行and,id =2 and age=22 再去执行or。