浅析Sql语句中的where 1=1

在项目开发过程中发现在Dao层的查询SQL语句中出现很多where 1=1,下面从两个方面进行简单的分析:

1、不定查询条件

        首先说一下作用where 1=1用于放在查询条件个数不定的SQL语句中,例如在界面中需要根据部门名称(depart_name)或者时间等查询条件对数据进行筛选如在某个Dao层中:

public Map<String, Object> queryForPaging(Map<String, Object> paraMap) {
       StringBuffer sql=new StringBuffer("select* from 表1 where 1=1");
       //查询条件可以根据需要自由添加或者删除
       Object sql_start=paraMap.get("startDate");//开始时间start
        if(sql_start!=null&&!"".equals(sql_start)){
              sql.append(" and 表1.createdate>='"+sql_start+"'");
         }
       Object sql_end=paraMap.get("endDate");//结束时间end
       if(sql_end!=null&&!"".equals(sql_end)){
              sql.append(" and 表1.createdate<='"+sql_end+"'");
         }
       Map<String,Object>resultMap=queryForMap(sql);
       return resultMap;
}

通过上述的方式可以很方便的对SQL语句进行拼装,从而提高开发效率。

2、查询效率

首先mssql在多个条件下,会自动优化查询,以下两个语句是等效的
sql语句1——where 条件1 and 条件2
sql语句2——where 条件2 and 条件1

此外,本文以4万9千多条数据进行了多次简单的实验对照,发现加入了where 1=1的查询语句效率相当。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值