oralce sql where子句是从右向左结合执行的!!
例如有如下表(表名为:Test):
id | name | age | sex |
---|---|---|---|
1 | t1 | 20 | 女 |
2 | t2 | 21 | 女 |
3 | t3 | 22 | 女 |
4 | t4 | 23 | 女 |
现在需要找到年龄小于21岁和年龄大于22岁的人,并且性别为男的记录。
sql1:
select * from Test t where t.age<21 or t.age>22 and sex='男';
解析:
这条语句将得到id为1的记录。
因为sql是由右向左进行执行的。因此这条语句被解析为
select * from Test t where t.age<21 or (t.age>22 and sex='男');
正确的sql语句为:
select * from Test t where (t.age<21 or t.age>22) and sex='男';
还是要注意加括号啊~