1.表达的含义
WHERE 后面表示过滤的条件,只有满足条件的记录才被选择,一般sql跟多个condition时,使用and作为组合,为了便于书写,条件最后会加入如1=2或者1=1的条件,原理如下所示
- 条件“1=2”为假,其实就是什么都不选择,查询不会返回数据,
- 如果条件是“1=1”就是选择所有记录。
where SequenceTime>=1731912007680000 AND SequenceTime<=1732054806953984 and 1=2//表示无结果
where SequenceTime>=1731912007680000 AND SequenceTime<=1732054806953984 and 1=1//返回根据第一个条件的结果’
2. 工程中的作用
2.1 1=1
where 1=1是为了后面的条件。这个SQL应该是在程序中拼出来的,程序中首先不能肯定后面的条件是否肯定会有,为了程序简单先加上where 1=1,后面的就可以直接拼接。如果不这样处理就需要在拼接后面的每一个条件时都要判断是不是where子句第一个条件,以决定是否要在前面加and
例:
- 如果在不使用where 1=1的情况下
String sql = “select * from table a”;
if(params.containsKey("name")){
String key = params.get("name").toString();
sql+="where a.name='"+key +"'";
}
if(params.containsKey("age")){
String key = params.get("age").toString();
sql+="where a.age='"+key +"'";
}
if(params.containsKey("class ")){
String key = params.get("class ").toString();
sql+="where a.class ='"+key +"'";
}
同时存在两个属性及以上是就会发生冲突,select * from table a where a.name=xxx where a.age=xxxxx 即一个错误的sql
- 如果用where 1=1 的时候
String sql = “select * from table a where 1=1”;
if(params.containsKey("name")){
String key = params.get("name").toString();
sql+=" and a.name='"+key +"'";
}
if(params.containsKey("age")){
String key = params.get("age").toString();
sql+=" and a.age='"+key +"'";
}
if(params.containsKey("class ")){
String key = params.get("class ").toString();
sql+=" and a.class ='"+key +"'";
}
2.2 1=2
where 1=2 是让记录集为空,因为只是用来插入一行,只需要得到表的各属性的数据类型即可。速度较快 因为它不用和表内任何字段比对