程序员在编程过程中,经常会在代码中使用到“where 1=1”,这是为什么呢?
这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如:
String sql="select * from t_order where 1=1";
if( conditon 1 != null) {
sql=sql+" and order_no =value1";
}
if(conditon 2 != null ) {
sql=sql+" and price=value2";
}
where 1=1 是为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误。
如果有几个动态条件,但都不确定哪一个一定会出现,那么如果直接拼接and的话,就直接报无法错误了。
where后面总要有语句,加上了1=1后就可以保证语法不会出错,因为后面不管拼接哪个and条件都不会报错了。
select * from t_order where 1=1
因为table中根本就没有名称为1的字段,所以该SQL等效于select * from t_order;
这个SQL语句很明显是全表扫描,需要大量的IO操作,数据量越大越慢,
建议查询时增加必输项,即where 1=1后面追加一些常用的必选条件,并且将这些必选条件建立适当的索引,效率会大大提高