我的编程空间,编程开发者的网络收藏夹
学习永远不晚

where 1=1

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

where 1=1


文章转载自「开发者圆桌」一个关于开发者入门、进阶、踩坑的微信公众号
where 1=1
where 1=1有什么用?在SQL语言中,写这么一句话就跟没写一样,干嘛要出力不讨好呢。


select * from table1 where 1=1与select * from table1完全没有区别,甚至还有其他许多变种的写法如1<>2,'a'='a','a'<>'b'等,其目的就只有一个,where 的条件为永真,得到的结果就是未加约束条件的。


在SQL注入时会用到这个,例如select * from table1 where name='test'给强行加上select * from table1 where name='test' or 1=1这就又变成了无约束的查询了。


然而where 1=1的妙处不仅如此,这些使用方法在书本中可能看不到,它们多数来自实际项目。


多条件查询


在不定数量查询条件情况下,where 1=1可以很方便的规范语句。例如一个查询可能有name,age,phone查询条件,也可能没有,那该如何处理呢?


注意,这里写了一个多余的where 1=1。

String sql="select * from table1 where 1=1";

StringBuffer buffer = new StringBuffer();

buffer.append(sql);

if (null != name && !"".equals(name)) {

 buffer.append(" and name = " + name);

}

if (null != age && !"".equals(age)) {

 buffer.append(" and age = " + age);

}

if (null != phone && !"".equals(phone)) {

 buffer.append(" and phone like '%" + phone + "%'");

}

如果不写1=1呢,那么在每一个不为空的查询条件面前,都必须判断有没有where子句,然后在第一个出现的地方加上where。


当然,一般情况下是多表关联查询,如果SQL中已经出现过where子句,那么就没必要添加where 1=1了,例如:String sql=select * from table1,table2 where table1.id=table2.id


如果你正在使用Hibernate、Mybatis等ORM框架的话,这样的问题不需要担心,这些ORM框架都进行了良好的处理。下面是Mybatis的一个配置样例:

<select id="findContact" parameterType="Map" resultMap="ContactResult">

select * from table1

<where>

<if test="cusId!=null and cusId!=' ' ">

and cusId = #{cusId}

</if>

</where>

</select>


表拷贝


所谓表的拷贝就是以一个表为源表,拷贝出一个数据和结构都一样的表,以Oracle为例,其他数据库语法自行参考,基本上大同小异。


拷贝表(where 1=1永为true,拷贝表结构和数据)

create   table_name   as   select   *   from   source_table   where   1=1;


复制表结构(where 1<>1永为false,不拷贝数据,仅复制表结构)

create   table_name   as   select   *   from   source_table   where 1<>1;


有很多技术书籍,并没有使用where 1=1而是采用比较复杂的判断逻辑,从这一点也可以看出书本知识与实践的不同,在实践中,开发者会不断使用省事省力的方法,而不是拘泥于书本。


where 1=1可能还有其他方面的应用案例,大家不妨留言告知,精选出来,让更多人学会使用1=1这个小的技巧。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

where 1=1

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2024-04-02

MySQL 中的“where 1=1”语句是什么?

在 MySQL 中,“Where 1=1”会生成表中的所有行,因为该语句始终为真。一个为了更好地理解该语句,给出的示例如下 -首先,在 create 命令的帮助下创建一个表。给出如下 -mysql> CREATE table WhereC
2023-10-22

MySQL中where 1=1方法怎么使用

这篇文章主要介绍了MySQL中where 1=1方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL中where 1=1方法怎么使用文章都会有所收获,下面我们一起来看看吧。where 1=1的作
2023-06-30

MyBatis中不建议使用where 1=1的原因是什么

这篇文章主要介绍了MyBatis中不建议使用where 1=1的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis中不建议使用where 1=1的原因是什么文章都会有所收获,下面我们一起来看
2023-07-02

深入探究MySQL中使用where 1=1是否存在性能影响

本篇文章探讨了在MySQL查询中使用WHERE1=1对性能的影响。在简单情况下,WHERE1=1不会影响性能,但随着查询复杂性的增加,它可能导致性能下降,原因是额外的计算开销和索引失效。替代方案包括使用显式条件、别名和索引优化。最佳实践是避免使用WHERE1=1,优化索引,并分析查询计划以识别性能问题。
深入探究MySQL中使用where 1=1是否存在性能影响
2024-04-02

如何使用np.where()[0] 和 np.where()[1]

如何使用np.where()[0] 和 np.where()[1]?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体如下:import numpy as np a = np.a
2023-06-08

求s=1+1(1+2)+1(1+2+3)

求s=1+1/(1+2)+1/(1+2+3)….+1/(1+2+3….+n)的值#include float fun(int n){int i,s1=0;float s=0.0;for(i=1;i<=n;i++){s1=
2023-01-31

编程热搜

目录