关于面试:腾讯一面问我SQL语句中where条件为什么写上11

42次阅读

共计 2056 个字符,预计需要花费 6 分钟才能阅读完成。

在我的项目编写中,常常会在代码中应用到“where 1=1”,这是为什么呢?

目录

  • where 前面加 ”1=1″ 还是不加
  • 不必 where 1=1 在多条件查问的困惑
  • 应用 where 1=1 的益处
  • 应用 where 1=1 的害处

where 前面加 ”1=1″ 还是不加

比方当初有一个场景,DB 数据库中有一张博客表(blog),想把 blog 表中的所有记录查问进去,那么能够有两种形式操作。一种写法是 where 关键词什么也不加,另一种写法是 where 关键词前面加 ”1=1″,写法如下:

  • where 关键词什么也不加
select * from blog;
  • where 关键词前面加 “1=1”
select * from blog where 1 = 1;

这两种 SQL 语句查问所失去的后果齐全没有区别。那 为什么要在 where 关键字前面增加 ”1=1″ 呢?

咱们晓得 1 = 1 示意 true,即永真。如果应用不失当会造 T0 级谬误。例如在编写 SQL 语句时进行 where 条件查问时配合 or 运算符会失去动向不到的后果,后果会让你颤抖。不信,往下看:

例如,当咱们要删除博客 ID 称为“202102111501”的记录,咱们能够这样写:

delete from blog where blogId = "202102111501"

如果这个时候如果在 where 语句前面加上 or 1= 1 会是什么结果?

delete from blog where blogId = "202102111501" or 1 = 1

原本只有博客 ID 称为“202102111501”的记录,后果因为增加了 or 1= 1 的永真条件,会导致整张表里的记录都被删除了。那你可就闯祸了。

不必 where 1=1 在多条件查问的困扰

举个例子,如果你想查看以后博客中某条评论记录时,那么依照平时的查问语句的 动静结构,代码大体如下:

String sql="select * from blog where";
if (condition 1) {sql = sql + "blogID = 202102111501";}
if (condition 2) {sql = sql + "and commentID = 150101";}

如果上述的两个 if 判断语句均为 true 时,那么最终的动静 SQL 语句为:

select * from table_name where blogID = 202102111501 and commentID = 150101;

能够看进去这是一条残缺的正确的 SQL 查问语句,可能正确执行。

如果上述的两个 if 判断语句均为 false 时,那么最终的动静 SQL 语句为:

select * from table_name where;

此时咱们看看这条生成的 SQL 语句,因为 where 关键字前面须要应用条件,然而这条语句基本不存在,所以该语句就是一条谬误语句,不能被执行,不仅报错,同时还查不到任何数据。

应用 where 1=1 的益处

如果咱们在 where 条件后加上 1 =1,看看它的真面目:

String sql="select * from blog where 1=1";
if (condition 1) {sql = sql + "and blogID = 202102111501";}
if (condition 2) {sql = sql + "and commentID = 150101";}

当 condition 1 和 condition 2 都为真时,下面被执行的 SQL 代码为:

select * from blog where 1=1 and blogID = "202102111501" and commentID = 150101;

能够看进去这是一条残缺的正确的 SQL 查问语句,可能正确执行。

如果上述的两个 if 判断语句均为 false 时,那么最终的动静 SQL 语句为:

select * from table_name where 1=1;

当初,咱们来看这条语句,因为 where 1=1 是为 True 的语句,因而,该条语句语法正确,可能被正确执行,它的作用相当于:sql=”select * from table”,即返回表中所有数据。

当在 where 关键字前面增加 1 = 1 时,如果此时查问时不抉择任何字段时,那么必将返回表中的所有数据。如果是依照某个字段进行单条查问时,那么就会此时的条件进行查问。

说到这里,不晓得您是否已明确,其实,where 1= 1 的利用,不是什么高级的利用,也不是所谓的智能化的结构,仅仅只是为了满足多条件查问页面中不确定的各种因素而采纳的一种结构一条正确能运行的动静 SQL 语句的一种办法。

应用 where 1=1 的害处

咱们在写 SQL 时,加上了 1 = 1 后尽管能够保障语法不会出错!

select * from table_name where 1=1;

然而因为 table 中基本就没有名称为 1 的字段,该 SQL 其实等效于 select * from table,这个 SQL 语句很显著是全表扫描,须要大量的 IO 操作,数据量越大越慢。

所以在查问时,where1= 1 的前面须要减少其它条件,并且给这些条件建设适当的索引,效率就会大大提高。

文章也会继续更新,能够微信搜寻「迈莫 coding」第一工夫浏览。每天分享优质文章、大厂教训、大厂面经,助力面试,是每个程序员值得关注的平台。

正文完
 0