目录
前言
朕在数据访问层(DAL)的代码中经常能见到的查询语句,在后面加约束条件的时候都有带上where 1=1。那么它的作用 是什么呢?查阅资料后,朕决定片面总结一下。
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from(select * from cxk where 1=1");
一、where条件语句永远为真
在不需要加条件的时候,加不加where 1=1 的语句作用是一样的,虽然加上where1=1条件,但是因为where1=1作用使条件语句永远为真,那实际上和不加约束条件是一模一样的。
select * from cxk where 1=1;
//上面的语句where条件永远为真,相当于不加约束条件,两条语句结果是一样的。
select * from cxk;
二、拼接多个约束条件的语句(常用)
当需要用到多个约束条件的时候,where1=1 就派上用场了。
- 首先是不加where1=1 的时候,后面需要拼接约束条件语句时,可能会出现SQL语句语法错误↓
StringBuilder strSql = new StringBuilder(); strSql.Append("select * from CXK where "); if (!string.IsNullOrWhiteSpace(hair)) { strSql.Append("and HAIR='"); strSql.Append(hair); strSql.Append("'"); }
比如这样得到的语句:(假设参数hair的值为中分)"select * from CXK where and HAIR='中分'";
得到的SQL语句在语法上有错误。
- 那么在上述的条件语句拼写时,加上where 1=1,即可连接语句且不会有语法错误。
代码如下:
strSql.Append("select * from CXK where 1=1"); if (!string.IsNullOrWhiteSpace(hair)) { strSql.Append("and HAIR='"); strSql.Append(hair); strSql.Append("'"); }
输出语句为:"select * from CXK where 1=1 and HAIR='中分'";
所以,这里1=1的作用就是为了方便拼接SQL语句,特别是在需要拼接多个约束条件的时候,作用更明显。
总结
还有一些常见的数据库小知识,朕也总结一下
- 如下,在表名后加t后,可用t指代表TABLE。
- LIKE 和 % 用于模糊查询
"select t.* from TABLE t where t.num like '%"+number+"%'";
3.倒(降)序排列,在条件后加上 order by 列名 desc
升序排列:order by 列名 asc
select * from RECORD t where 1=1 order by t.id desc