SQL中 OR 关键字优先级问题
今天群里哥们偶尔问道一个问题,顺便查查找到了答案,记录一下。
问题
问题大致如下:
SQL1
1 |
|
SQL2
1 |
|
两条SQL,第一条返回全表结果集,第二条返回 NAME='ZHANGSAN'
或者 AGE=10
的结果集;问两条SQL为何会这样。
原因
以前一直没留意过,搜了下资料,大致原因如下:
在 SQL 中,OR
关键字的优先级会比 AND
关键字优先级要高,OR
关键字会将条件切分成前后两部分,大致表现如下:
SQL1
1 |
|
所以在第一个 OR
分割后,后面又进行了二次分割;此时后面由于 ('1'='1')
始终为真,则后半部分一直返回为真,此时第一个 OR
分割整体也会返回为真,造成查出整个表的结果集;SQL2同理一样。
SQL中 OR 关键字优先级问题
https://mritd.com/2016/03/14/sql-or-keyword-priority/