[关闭]
@mritd 2016-03-14T13:48:46.000000Z 字数 482 阅读 1650

SQL中 OR 关键字优先级问题

Java


今天群里哥们偶尔问道一个问题,顺便查查找到了答案,记录一下。

问题

问题大致如下:

SQL1

  1. SELECT * FROM TABLE WHERE NAME='ZHANGSAN' OR 1=1 OR '1'='1' AND AGE=10;

SQL2

  1. SELECT * FROM TABLE WHERE NAME='ZAHNGSAN' OR 1=1 AND AGE=10;

两条SQL,第一条返回全表结果集,第二条返回 NAME='ZHANGSAN' 或者 AGE=10 的结果集;问两条SQL为何会这样。

原因

以前一直没留意过,搜了下资料,大致原因如下:

在 SQL 中,OR 关键字的优先级会比 AND 关键字优先级要高,OR关键字会将条件切分成前后两部分,大致表现如下:

SQL1

  1. SELECT * FROM TABLE WHERE (NAME='ZHANGSAN') OR ((1=1) OR ('1'='1' AND AGE=10));

所以在第一个 OR 分割后,后面又进行了二次分割;此时后面由于 ('1'='1') 始终为真,则后半部分一直返回为真,此时第一个 OR 分割整体也会返回为真,造成查出整个表的结果集;SQL2同理一样。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注