SQL 语句中 WHERE 1=1 的作用

这篇具有很好参考价值的文章主要介绍了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 商店租借电影的客户:

SQL 语句中 WHERE 1=1 的作用

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

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

SQL 语句中 WHERE 1=1 的作用

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

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

为方便而设

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

在静态 SQL 中

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

SQL 语句中 WHERE 1=1 的作用

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

SQL 语句中 WHERE 1=1 的作用

在动态 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 += "and D is not null "

总结

在这篇文章中,我们了解到“WHERE 1=1 的目的是什么?”这个古老问题的答案。它不是一种高级优化技巧,而是一些开发人员所主张的一种风格惯例。文章来源地址https://www.toymoban.com/news/detail-457176.html

往期回顾 

  1. 招募 Navicat Monitor 3.0 监控工具体验官 | 好礼相送
  2. 保姆级教程 | Navicat 人工备份和自动备份
  3. Navicat 16 正式支持 OceanBase 全线数据库产品
  4. Navicat 16 即将支持 Redis
  5. 免费试用 Navicat 16
  6. Navicat 20年发展史 | 1999 年成立于中国香港
  7. SQL 语句中 WHERE 1=1 的作用
  8. SQL 中计算总行数的百分比
  9. 互动有礼活动进行中 | 奖品为价值 819 元 Navicat Premium
  10. 假冒网站引发多重安全风险 | 官方严正声明:切勿在非官方渠道购买或下载 Navicat 软件

到了这里,关于SQL 语句中 WHERE 1=1 的作用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql查询语句中,是join先执行还是where先执行?

    在 MySQL 中,WHERE 子句会先于 JOIN 子句执行。 JOIN 子句用于连接两个或多个表,在 JOIN 子句中可以使用 ON 或 USING 子句来指定连接条件。 JOIN 子句会从两个表中返回符合连接条件的行,这些行会被合并成一个结果集。 而 WHERE 子句用于过滤查询结果集中的行,它可以使用各种条

    2024年02月14日
    浏览(41)
  • 在Mybatis中如何在where-if的语句中判断数组或列表的长度是否为0?

    可以使用OGNL表达式来判断列表或数组的长度是否为0。OGNL是Object Graph Navigation Language的缩写。它是一种表达式语言,用于从对象图中进行导航和访问。在Mybatis中,OGNL可用于在动态SQL语句中引用变量和方法。 假设要查询一个列表,查询条件包括一个列表idList,如果该列表或数

    2024年02月14日
    浏览(57)
  • SQL group by、where和having语句用法

    SQL 语句中的 GROUP BY 子句用于将具有相同值的行分组在一起,通常与聚合函数(如 COUNT、SUM、AVG 等)一起使用。WHERE 子句用于筛选符合条件的行。HAVING 子句则在分组后对分组结果进行进一步筛选。 以下是一个使用 SQL 语句中的 GROUP BY、WHERE 和 HAVING 子句的示例: 在这个示例中

    2024年02月07日
    浏览(59)
  • SQL 语句中 where 条件后 写上1=1 是什么意思

    程序员在编程过程中,经常会在代码中使用到“where 1=1”,这是为什么呢? SQL注入 初次看到这种写法的同学肯定很纳闷,加不加where 1=1,查询不都一样吗?例如: 查询出来的结果完全没有区别呀。 是的,上面的查询结果是没有区别,但是这并不是我们要添加它的目的。我们

    2024年01月21日
    浏览(38)
  • 北京地区MySQL培训课程:深度解析查询语句中的WHERE条件设置

    MySQL如果在查询时想要获取满足的条件的记录,就需要使用WHERE子句,WHERE子句用于在 MySQL 中过滤查询结果,只返回满足条件的数据记录。 语法格式: SELECT column1, column2, ...FROM table_name WHERE condition; SELECT 列名, ...FROM 那个表 WHERE 条件; 下图为示例表格 示例1:查询等级是“A”的

    2024年02月19日
    浏览(55)
  • SQL 语句中 left join 后用 on 还是 where,区别大了!

    目录 情况 小结 举例         前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。         后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显示。         不

    2024年02月14日
    浏览(38)
  • 【MySQL】——Select查询语句(其二)

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年02月08日
    浏览(51)
  • 简明SQL条件查询指南:掌握WHERE实现数据筛选

    条件查询是用于从数据库中根据特定条件筛选数据行的一种方式,它避免了检索整个表中的数据。通常,使用 WHERE 子句来定义过滤条件,只有符合这些条件的数据行才会被返回。 SQL中的运算符有:=、!=、、 等,用于进行条件判断。 在逻辑运算中,常见的运算符包括: and:

    2024年02月09日
    浏览(70)
  • DQL语句(一) -----简单select查询

    select 列名*N from 表名 where 查询条件1 and/or 查询条件2 group by 列 Having 分组条件 Order by 排序 sql在书写时 除了查询条件 外,大小写都可以 select * from user where uname=\\\'zs\\\'; SELECT *FROM USER WHERE UNAME=\\\'zs\\\'; 要是在公司要 看其他员工 sql是大写还是小写 -- 属于sql语句的注释 所有查询条件为字

    2024年02月05日
    浏览(39)
  • 数据库 实验四 select查询语句

    实验四 一、实验目的 (1) 掌握SELECT语句在多表查询中的应用。 (2) 掌握多表连接的几种连接方式及应用。 二、实验要求 1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容; 3、1~2人为1小组,实验过程中独立操作、相互学

    2023年04月20日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包