where 1=1 和 count(1) 与 count(*)

探秘MySQL:Count(1)、Count(*)与Count(列名)的奥秘与差异 Count(1)是指使用常量1作为参数来调用Count函数,它的作用是统计满足特定条件的行数。由于1是一个常量,所以在统计行数时不需要进行任何计算操作,因此Count(1)的效率比较高。Count()是指使用通配符作为参数来调用Count函数,它的作用也是统计满足特定条件的行数。与Count(1)相比,Count(*)的效果是一样的,但是在语义上更加直观。Count(列名)是指使用表中的某个列名作为参数来调用Count函数,它的作用是统计满足特定条件的非空值的行数。 阅读详情

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='lala'给强行加上select * from table1 where name='lala' or 1=1这就又变成了无约束的查询了。

最近发现的妙用在于,在不定数量查询条件情况下,1=1可以很方便的规范语句。例如一个查询可能有name,age,height,weight约束,也可能没有,那该如何处理呢?

String sql=select * from table1 where 1=1

为什么要写多余的1=1?马上就知道了。

if(!name.equals("")){
sql=sql+"name='"+name+"'";
}
if(!age.equals("")){
sql=sql+"age'"+age+"'";
}
if(!height.equals("")){
sql=sql+"height='"+height+"'";
}
if(!weight.equals("")){
sql=sql+"weight='"+weight+"'";
}

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

where 1=1的写法是为了检化程序中对条件的检测
打个比方有三个参数a, b, c
@sql=select * from tb'
这三个参数都可能为空
这时你要构造语句的话,一个个检测再写语句就麻烦
比如
if @a is not null
@sql=@sql + " where a=' + @a
if @b is not null
这里你怎么写?要不要加where 或直接用 and ?,你这里还要对@a是否为空进行检测

用上 where 1=1 之后,就不存在这样的问题, 条件是 and 就直接and ,是or就直接接 or

----------------------------------count(1) 与 count(*)

这个要看你自己数据库设计的结构啦
如果你的数据表没有主键,那么count(1)比count(*)快
如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快
如果你的表只有一个字段的话那count(*)就是最快的啦
count(*) count(1) 两者比较。主要还是要count(1)所相对应的数据字段。
如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。
因为count(*),自动会优化指定到那一个字段。所以没必要去count(?),用count(*),sql会帮你完成优化的


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/dingwb/archive/2007/06/15/1653402.aspx

MySql 执行count(1)、count(*) 与 count(列名) 区别 返回语句检索的行中的值不为NULL的数量。结果是一个值。如果查询结果没有命中任何记录,则返回的统计结果中,会包含值为的行数。除了和以外,还可以使用(如)来统计行数。 阅读详情

相关推荐

SQL 迷思解析:WHERE 1=1、性能与 COUNT(*) vs COUNT(1)

Oracle、MySQL、SQL Server、PostgreSQL 等主流数据库的优化器文档都明确说明会进行常量表达式化简和死代码消除。理解数据库优化器的工作原理有助于我们写出既清晰又高效的 SQL,避免被表面语法迷惑。优化为直接返回存储引擎中可用的行数计数(如果引擎支持,如 InnoDB 对二级索引的优化),数据库会采用最高效的方式扫描表或索引来获取总行数(例如,优先选择最小的二级索引)。,且不为 NULL),然后统计这些非 NULL 结果的数量。是动态 SQL 拼接的实用技巧,极大简化代码逻辑。

gpgnz52761的博客 773

两个小问题where 1=1 和 count(1) 与 count(*)

 where 1=1有什么用?在SQL语言中,写这么一句话就跟没写一样。select * from table1 where 1=1与select * from table1完全没有区别,甚至还有其他许多写法,1b,其目的就只有一个,where的条件为永真,得到的结果就是未加约束条件的。在SQL注入时会用到这个,例如select * from table1 where name=

lee576的专栏 2252

SQL 解惑:WHERE 1=1 的作用与性能,COUNT(*) vs COUNT(1) 谁更快?

WHERE 1=1动态 SQL 拼接的利器,简化AND条件的添加逻辑,避免语法错误。现代数据库优化器会移除该恒真条件,不影响性能。放心在需要动态拼接时使用。无需使用。COUNT(*)vsCOUNT(1)两者完全等价,都用于统计查询结果的总行数。在所有主流现代数据库(MySQL, PostgreSQL, SQL Server, Oracle 等)上没有任何性能差异。它们的执行计划相同。优先使用 COUNT(*)。它语义清晰、符合 SQL 标准,是广泛认可的最佳实践。WHERE 1=1。

gpgnz52761的博客 780

SQL中的 where 1= 1?以及select 1 from table?意义!

table表是一个数据表,假设表的行数为10行。 1:select  1 from table       增加临时列,每行的列值是写在select后的数,这条sql语句中是1 2:select count(1)  from table   管count(a)的a值如何变化,得出的值总是table表的行数 3:select sum(1) from table   计算临时列的和

程序领域 3996

C2000 CLA协处理器:嵌入式实时控制性能优化与实战指南

在嵌入式实时控制系统中,主CPU常因高频率、低延迟的控制算法而面临性能瓶颈。为解决此问题,协处理器技术应运而生,它通过硬件并行架构分担计算密集型任务,从而提升系统整体性能。其核心原理在于独立的计算单元与总线设计,能够实现近乎零延迟的响应,这对于电机驱动、数字电源等闭环控制场景具有极高的技术价值。本文聚焦于德州仪器C2000系列微控制器中的控制律加速器(CLA),深入解析其作为独立浮点协处理器如何通过任务调度与消息RAM通信机制,有效实现性能倍增,并提供了从内存配置到代码调试的完整工程实践方案。

weixin_29192211的博客 305

Codex CLI 的多模型切换实战:如何在中转 API 环境下灵活选择最佳模型

本文详细介绍了在Codex CLI中实现多模型切换的实战技巧,重点解析了如何在中转API环境下灵活选择最佳AI模型。通过配置Node.js环境和智能路由策略,开发者可以根据任务类型、编程语言和成本考量,在GPT-5、Claude和DeepSeek等模型间高效切换,提升代码生成、审查和优化的效率。

weixin_29291185的博客 836

select count(1)什么意思_年轻人不讲武德,where 1=1 是什么鬼?

这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如:String sql="select * from table_name where 1=1"; if( conditon 1) { sql=sql+" and var2=value2"; } if(conditon 2) { ...

weixin_33539366的博客 790

从TCGA官网获取新版count数据并精准转换为TPM的实战指南

本文详细介绍了从TCGA官网获取新版count数据并精准转换为TPM的实战指南。通过TCGAbiolinks工具下载原始count数据,结合GENCODE v36注释文件计算基因有效长度,最终实现count到TPM的标准化转换,确保数据完整性和分析可靠性。文章包含完整代码示例和常见问题解决方案,特别适合生物信息学研究人员参考。

weixin_27310417的博客 284

select count(1) from table where ..这句sql语句的作用

作用是计算一共有多少符合条件的行。1并不是表示第一个字段,而是表示一个固定值,count(1)和count(2)效果是一样的 count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。count(字段值),将返回符合条件的非空数量1.查询所有数据,列出7列数据 2.使用count(1)查询结果,返回7 3.使用coun...

weixin_30670925的博客 1万+

保姆级教程:用Cesium的Primitive API实现火箭发射全流程动画(含代码避坑)

本文详细介绍了如何使用Cesium的Primitive API实现火箭发射全流程动画,包括模型控制、关节动画和精细时序管理。通过实战代码示例和性能优化技巧,帮助开发者高效构建高复杂度航天仿真系统,显著提升三维可视化效果与运行效率。

weixin_42565652的博客 213

ESP32之 ESP-IDF + Clion 开发环境搭建(二)—— Linux版

本文介绍了 Linux 下,使用Clion IDE 用官方 ESP-IDF 开发包进行 ESP32 开发的环境搭建

Augtons 的博客 6098

sql count函数做where条件

使用聚合函数count出一个数值作为查询结果的一部分,同时需要在where条件中利用count函数的结果做进一步筛选,需要用到having语句,如果添加到where中会报错 同时group by 和having 顺序不能调换 ...

订书钉qq的博客 2万+

H3C IPsec over GRE VPN 实验

配置 IPsec over GRE VPN 来连通两端内网

M建的博客 2468

where 1 = 1的作用?会影响性能吗?count(*) 和 count(1)哪个快?

双路排序有一个叫 max length for_sort cata参数,默认是4096字节,如果 select列的数据长度超过它,则 MySQL采用row id排序,即把 row id(有主键就是主键)+排序字段放置到 sort bufer 中排序比如现在要执行: select a,b,c from t1 where a='seven’order by b;

SevenCoding的博客 1054

16、树莓派Pico W:蓝牙与Wi-Fi应用指南

本文介绍了树莓派Pico W在蓝牙与Wi-Fi通信方面的应用,涵盖蓝牙配对原理、使用HC-06模块实现手机远程控制LED和传输内部温度,以及通过Wi-Fi进行网络连接、扫描和UDP协议下的设备控制。文章包含详细电路连接、代码实现与测试步骤,并提供拓展建议、常见问题解决方法及开发注意事项,帮助读者快速掌握基于Pico W的无线通信项目开发,适用于物联网入门与实践场景。

sun99的博客 289

Autosar Dcm配置-App到Boot的跳转及1002回复配置及实现-基于ETAS软件

在软件刷写流程中,上位机(诊断仪)发送1002后,APP检查允许跳转boot后,在特定的ram(软复位不清除)写入指定置后通过触发软件复位来跳转到boot的。在APP跳转到Bootloader时,1002的回复有两种方式,一种是APP直接回复,然后跳转,另一种是APP回复NRC78,然后跳转,在Boot中回复。本文介绍这两种方式的实现。如果是在APP中回复,可以少发一个0x78,整体跳转时间可能会少一些。但是如果诊断在收到5002之后立马请求其他的服务,可能出现boot正在初始化而未正常接收到报文。

赞的博客 1557

【mysql】Mysql中where 1=1 和count(0) 使用小技巧总结

1. 数据库语句 where 1=1 的用法和作用 这是一种怎样的查询语句呢?首先说明,1=1不是查询语句中的任何关键词,所以,请您放心,不管你会不会使用 这种语句,都没有任何关系,对于您而言,没有任何损失。 我们先来看看这个语句的结果:select * from table where 1=1,其中where 1=1,由于1=1永远是成立的,返回TRUE,条件为真;所以,这条语句,就相当于select * from table,返回查询表中的所有数据。 1. 1 不用where 1=1 在多条件查询

开发随笔-猫咪酱 669

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SQL语言中,一个有灵魂的数字 :1

SQL语言中,一个有灵魂的数字 :1

大数据求学路 1082

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

实习——对数据库小技巧的总结

count(0) 效率会高,因为不需要全表扫描 使用“%”进行模糊查询时,会导致索引失效 where 1 = 1 可以避免where 后面出错的情况,更规范 oracle树形查询yyds,oracle 若实现limit 需相关子查询,使用oracle隐藏列row_id和rownum实现 继续冲! ...

阳光大男孩!!!的博客 428

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

count(*) count(1)与count(字段)的区别

一、执行结果 count(*) 和count(1) 都是统计行数,而count(col) 是统计col列非null的行数 二、执行计划 MyISAM与InnoDB,正如在不同的存储引擎中,count(*)函数的执行是不同的 在MyISAM存储引擎中,count(*)函数是直接读取数据表保存的行记录数并返回,效率很高,但是如果添加了where条件的话,MyISAM表也不能返回得很快。 在InnoDB存储引擎中,count(*)函数是先从内存中读取表中的数据到内存缓冲区,然后扫描全表获得行记录数。在使用coun

weixin_46200547的博客 6610

mysql下count(*)和count(1)的区别

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33766805的博客 9258

count(*)和count(1)的区别和性能分析

查询记录数时会用到count,于是就有个问题。有的人用的是count() 有的用的是count(1),区别是什么,这两个的使用场景是什么?我这里主要针对的是MySQL,也许可能在别的引擎就不一定,比如别的搜索引擎会不会对count()有优化这个我就不确定。 首先你要你要知道这个count()是一个聚合函数,括号里面不仅仅可以填和1还可以填别的比如说字段什么的。count(1)如果你给的条件是主键是...

FeiChangWuRao的博客 2万+
上一篇: request 生命周期及参数信息
下一篇: js中的相等与不等运算
msg_java2011
博客等级 码龄15年 18粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值