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

你是否曾在 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 的目的是什么?”这个古老问题的答案。它不是一种高级优化技巧,而是一些开发人员所主张的一种风格惯例。
相关文章:
SQL中为何时常见到 where 1=1?
你是否曾在 SELECT 查询中看到过 WHERE 11 条件。我在许多不同的查询和许多 SQL 引擎中都有看过。这条件显然意味着 WHERE TRUE,所以它只是返回与没有 WHERE 子句时相同的查询结果。此外,由于查询优化器几乎肯定会删除它,因此对查询执行时间没…...
React AntDesign表批量操作时的selectedRowKeys回显选中
不知道大家是不是在AntDesign的某一个列表想要做一个批量导出或者操作的时候,发现只要选择下一页,即使选中的ids 都有记录下面,但是就是不回显 后来问了chatGPT,对方的回答是: 在Ant Design的DataTable组件中…...
anydesk远程控制,主动连接。
目标 远程控制目标电脑,且无需对方同意,并且可以控制目标电脑开关机。 实现 目标电脑和己方电脑均安装anydesk。目标电脑取消开机密码。打开目标电脑的anydesk在设置安全设置中打开为自主访问设置密码。 额外设置 为了让笔记本电脑合盖后仍能被控制…...
Spring Data Redis操作Redis
在Spring Boot项目中,可以使用Spring Data Redis来简化Redis操作,maven的依赖坐标: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></…...
sqlite触发器1
SQLite 的触发器(Trigger)可以指定在特定的数据库表发生 DELETE、INSERT 或 UPDATE 时触发,或在一个或多个指定表的列发生更新时触发。 SQLite 只支持 FOR EACH ROW 触发器(Trigger),没有 FOR EACH STATEM…...
python中——requests爬虫【中文乱码】的3种解决方法
requests是一个较为简单易用的HTTP请求库,是python中编写爬虫程序最基础常用的一个库。 而【中文乱码】问题,是最常遇到的问题,对于初学者来说,是很困恼的。 本文将详细说明,python中使用requests库编写爬虫程序时&…...
E. Nastya and Potions(DFS+记忆化搜索)
炼金术士纳斯蒂亚喜欢混合药剂。一共有n种药剂,ci硬币可以买到一种 i 型药剂。 任何一种药剂都只能通过一种方式获得,即混合其他几种药剂。混合过程中使用的药剂将被消耗掉。此外,任何药剂都不能通过一个或多个混合过程从自身获得。 作为一名…...
什么是tcp rst以及什么时候产生?
rst包是仅在header control bits设置rst的空payload包,用于强制关闭tcp连接。常在以下场景发送 远程主机没有监听该端口 远程主机强迫关闭了一个现有连接。比如服务端进程崩溃后重启会向之前连接发送rst 相比于四次挥手的fin,rst是在异常情况下的无条…...
Visual Studio Code配置免密远程开发环境
VSCode安装插件 要是想连接远程服务器,先在本地安装下面的插件(红色圈起来的需要装) 连接远程服务器 配置服务器信息 保存然后再连接,输入密码,如果能连接上说明是没问题的,下面开始免密登录 免密配置 客…...
flutter android Webview 打开网页错误ERR_CLEARTEXT_NOT_PERMITTED 、 net:ERR_CACHE_MISS
当你在Flutter应用中尝试打开一个非安全连接的网页(例如HTTP连接而不是HTTPS连接)时,可能会遇到"ERR_CLEARTEXT_NOT_PERMITTED"错误。这是因为默认情况下,Android 9及更高版本禁止应用程序通过非安全的明文HTTP连接进行…...
ARP协议(地址解析协议)
文章目录 ARP协议(地址解析协议)MAC地址ARP协议ARP具体实现同一链路不同链路 ARP 缓存缓存查询 APR请求/响应报文 ARP协议(地址解析协议) MAC地址 MAC 地址的全称是 Media Access Control Address,即媒体访问控制地址…...
【贪心算法】334. 递增的三元子序列
334. 递增的三元子序列 解题思路 找到的递增序列 不一定是连续的固定第一个数first 然后开始向后找第二个数second要求second 大于 first 找到之后 向后找第三个数third 找到 返回true如果third < first 那么更新first third 重新找如果只是third > first 更新second …...
react实现路由跳转动画
下载插件 npm i react-transition-group 配置路由 import { createBrowserRouter as ReactRouter,Navigate } from "react-router-dom";import App from ../App.js import Login from "../view/login.js"; import Home from "../home.js"; co…...
(二)RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】
Lison <dreamlison163.com>, v1.0.0, 2023.06.22 RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】 文章目录 RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】**安装Erlang**安装RabbitMQ账户管理管控台Docker安装RabbitM…...
springboot mybatis-plus 多数据源配置(HikariCP)
1.导入依赖jar <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgres…...
跃焱邵隼网站demo
xdm 网站的代码开源了。 今年迷上摄影和剪辑了,所以很少投入到网站的维护。 然后经过群友的一些反馈,所以决定 将网站上demo开源放出来了。 后面有机会再出一些好玩的东西。 哦 对了 3d 编辑器我已经融入地图了 年底搞一些好玩的东西出来。 可以关注…...
3. Spring 更简单的读取和存储对象(五大类注解 方法注解)
目录 1. 存储 Bean 对象 1.1 配置扫描路径 1.2 添加注解存储 Bean 对象 1.2.1 Controller(控制器存储) 1.2.2 Service(服务存储) 1.2.3 Repository(仓库存储) 1.2.4 Component(组件存储&…...
TypeScript基础篇 - 泛型
目录 泛型的概念 接口是对方面的描述(Aspect),继承其中几个方法。重定义方法 泛型是对共性的提取 泛型(Generics) 泛型的例子 泛型类 推荐写法 泛型约束 keyof操作符 泛型的特化(实例化ÿ…...
C++ 常量
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。 常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。 常量就像是常规的变量,只不过常量的值在定义后不能进行修改。 整数常量…...
智安网络|实现数据安全:探索数据动态脱敏的落地策略
在当今数字化时代,数据安全成为企业和组织管理中的头等大事。然而,数据共享和数据大规模处理的需求也日益增长,这就需要在数据传输和存储过程中采取措施来保护用户的隐私。数据动态脱敏技术应运而生,为解决数据隐私和保护的问题提…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
