一、sql 语句之 where 1=1
先说下它的目的,where 1=1
就是为了使该 sql 语句的条件永远为true。
通常用于(多)条件查询,在构造动态sql语句时可以防止sql语句结构不当而出错。
举个例子就加清晰了,比如说现在要根据几个条件查询一张表,也就是常说的多条件查询:
String sql="select * from table where ";
if(age>18){
sql=sql+ "age=" + age;
}
if(sex.equals("男")){
sql=sql + "and sex='"+sex+"'";
}
如果上述的两个 if 判断语句都不成立,那么,最终的 sql 动态构造语句变为:
sql=" select * from table where "
很明显,运行都会报错,更别说查询数据了。
但是加上 where 1=1
之后,即使两个if都不正确,仍然可以正常执行语句。
其实就是为了构造一个恒等式,写成2=2
,1+1=2
,也是可以的,因为1=1
运算开销更小,且容易记忆,所以一般都采用这种形式。
二、sql 语句之 where 1=0
where 1=0
这个条件始终为 false,结果不会返回任何数据,只有表结构,可用于快速建表 。
可以利用
create table newtable as select * from oldtable where 1=0;
创建一个新表,而新表的结构与查询的表(旧的表)的结构是一样的。
举个例子:
这是原始的表::
现在利用 where 1=0 来创建新的表:
可以看到,新的表里面没有数据,但是表的结构与原来的user表是一样的。