SQL中为何时常见到 where 1=1?

news/2025/2/13 2:51:30/

图片

你是否曾在 SELECT 查询中看到过 WHERE 1=1 条件。我在许多不同的查询和许多 SQL 引擎中都有看过。这条件显然意味着 WHERE TRUE,所以它只是返回与没有 WHERE 子句时相同的查询结果。此外,由于查询优化器几乎肯定会删除它,因此对查询执行时间没有影响。那么,WHERE 1=1 的作用是什么?这就是我们今天要在这里回答的问题!

WHERE 1=1 会改善查询执行吗?

正如前文中所述,我们预计查询优化器会删除硬编码的 WHERE 1=1 子句,因此我们不应看到查询执行时间减少。为了证实这个假设,让我们在 Navicat 中运行一个有和一个无 WHERE 1=1 子句的 SELECT 查询。

首先,以下是在 Sakila 示例数据库运行的查询,获取从 Lethbridge 商店租借电影的客户:

图片

在信息选项卡的底部可以看到 0.004 秒的运行时间(用红色方框突出显示)。

现在,让我们运行相同的查询,但添加了 WHERE 1=1 子句:

图片

同样,运行时间为 0.004 秒。尽管查询的运行时间可能因许多因素会略有波动,但可以肯定地说 WHERE 1=1 子句对其没有任何影响。

那么,为什么要使用它呢?简单来说,就是...

为方便而设

事实上,WHERE 1=1 子句只是一些开发人员采用的一种惯性做法,以简化静态和动态形式的 SQL 语句的使用。

在静态 SQL 中

向已经具有 WHERE 1=1 的查询添加条件时,此后的所有条件都将包含 AND,因此在注释掉试验查询的条件时更容易。

图片

这类似于另一种在列名之前而不是之后加入逗号的技巧。同样,更容易注释:

图片

在动态 SQL 中

这也是以编程方式构建 SQL 查询时的常见做法。从“WHERE 1=1”开始,然后附加其他条件,例如“ and customer.id=:custId”,具体取决于是否提供了客户 ID。这允许开发人员在查询中附加以“and ...”开头的下一个条件。这是一个假设的例子:

stmt  = "SELECT * "
stmt += "FROM TABLE "
stmt += "WHERE 1=1 "
if user chooses option a then stmt += "and A is not null "
if user chooses option b then stmt += "and B is not null "
if user chooses option b then stmt += "and C is not null "
if user chooses option b then stmt += "

总结

在这篇文章中,我们了解到“WHERE 1=1 的目的是什么?”这个古老问题的答案。它不是一种高级优化技巧,而是一些开发人员所主张的一种风格惯例。


http://www.ppmy.cn/news/940304.html

相关文章

【雕爷学编程】Arduino动手做(22)——8X8 LED点阵MAX7219屏2

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这…

Windows脚本 - Bat批处理命令使用教程

原文url: http://www.x5dj.com/Blog/00534041/00389984.shtml 这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字就能看懂,就能学到知识。写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:…

2015年工作中遇到的问题:41-50

41.Freemarker中的“大于等于”,想当然用了个"ge",结果不行。 应该是“gte”,gt代表大于,e代表等于。 42.报错找不到jquery-1.10.2.min.map解决办法。 我先说一下什么是source map文件。 source map文件是js文件压缩后,…

Java面试宝典-2018

目录(?)[-] Java基础部分 一个java源文件中是否可以包括多个类不是内部类有什么限制Java有没有goto说说和的区别在JAVA中如何跳出当前的多重嵌套循环switch语句能否作用在byte上能否作用在long上能否作用在String上short s1 1 s1 s1 1有什么错 short s1 1 s1 1有什么错char型变…

详解六大QQ病毒特征及清除方法

作为国内第一的即时通讯工具,QQ现在已经成为越来越多病毒进攻的目标,下面笔者就讲解QQ病毒中较出名的六种病毒的清除方法,希望大家能够喜欢! 内容导航 “QQ尾巴”病毒 QQ“缘”病毒 “QQ狩猎者”病毒 “武汉男生”病毒 “爱情森林…

Java面试宝典-2017

Java面试宝典2017版 一. Java基础部分...................................................................................................... 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制&#xf…

推荐系统实践读书笔记-06利用社交网络数据

推荐系统实践读书笔记-06利用社交网络数据 自从搜索引擎谷歌诞生后,大家都在讨论互联网的下一个金矿是什么。现在,几乎所有的人都认为那就是社交网络。根据尼尔森2010年的报告,用户在互联网上22%的时间花费在社交网站和社交媒体上。Facebook…

java --面试题大全

J2EE面试题 文档版本号:V2.0 2016年11月 目 录 1. Java基础部分 8 1.1. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 1.2. Java有没有goto? 8 1.3. 说说&和&&的区别。 8…