SQL中 OR 关键字优先级问题 — 漠然

SQL中 OR 关键字优先级问题

2016/03/14 ORACLE

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

问题

问题大致如下:

SQL1

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

SQL2

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

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

原因

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

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

SQL1

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

所以在第一个 OR 分割后,后面又进行了二次分割;此时后面由于 ('1'='1') 始终为真,则后半部分一直返回为真,此时第一个 OR 分割整体也会返回为真,造成查出整个表的结果集;SQL2同理一样。 转载请注明出处,本文采用 CC4.0 协议授权

想留言却没看到评论框?点这里。

Search

    Post Directory