MySQL·SQL 语句 where 1=1

作者 : jamin 本文共1128个字,预计阅读时间需要3分钟 发布时间: 2020-10-18 共1110人阅读

SQL 语句 where 1=1

在 mall 项目中,看到这样的 sql 语句:

select * from user where 1=1

其中这个 where 1=1 是有特殊意义的,包含以下两种情境:动态 SQL 拼接查询表结构

动态 SQL 拼接

适合多条件搜索,当要构造动态 sql 语句时为了防止 sql 语句结构不当,所以加上 where 1=1,这样 sql 语句不会报错,例如:

String sql="select * from table_name where 1=1";
if (conditon 1) {
  sql=sql+" and var2=value2";
}
if (conditon 2) {
  sql=sql+" and var3=value3";
}

sql 语句加上 where 1=1,只是为了满足多条件查询页面中不确定的各种因素而采用的一种构造一条正确能运行的动态 SQL 语句的一种方法。

当然,在 mybatis 中有更简单的方式处理 sql 拼接:

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG
  <where>
    <if test="state != null">
         state = #{state}
    </if>
    <if test="title != null">
        AND title like #{title}
    </if>
    <if test="author != null and author.name != null">
        AND author_name like #{author.name}
    </if>
  </where>
</select>

where 元素只会在至少有一个子元素的条件返回 sql 子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。

查询表结构

优点:数据库开销小。

where 1=1 是 sql 语句条件逻辑判断表达式,由于 1=1 成立,恒为真,该表达式 1=1 将始终返回"真",这种写法实际目的是为了获取逻辑值"True"。

-- 例 1
select * from t1 where 1=1;
-- 实际等效于select * from t1 where true;-- 语句将返回t1中所有的记录行

-- 例 2
select * from t1 where 1<>1;
-- 实际等效于 select * from t1 where false;-- 语句将返回空记录集

例 1 实际上等同于不加任何筛选条件,有些画蛇添足,where 1=1 的实际意义不如 where 1<>1或者 where 1=0 来得有用,当我们只需要获取表的字段结构信息,而不需要理会实际保存的记录时,例 2)的写法将是非常可取的,因为系统仅会读取结构信息,而不会将具体的表记录读入内存中,这无疑节省了系统开销。

参考文章:
SQL 语句中 where 1=1 的意义
动态 SQL

本站所提供的部分资源来自于网络,版权争议与本站无关,版权归原创者所有!仅限用于学习和研究目的,不得将上述内容资源用于商业或者非法用途,否则,一切后果请用户自负。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源。如果上述内容资对您的版权或者利益造成损害,请提供相应的资质证明,我们将于3个工作日内予以删除。本站不保证所提供下载的资源的准确性、安全性和完整性,源码仅供下载学习之用!如用于商业或者非法用途,与本站无关,一切后果请用户自负!本站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。如有侵权、不妥之处,请联系站长以便删除!
金点网络 » MySQL·SQL 语句 where 1=1

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
是否提供免费更新服务?
持续更新,永久免费
是否经过安全检测?
安全无毒,放心食用

提供最优质的资源集合

立即加入 友好社区
×