【转载】程序设计过程中SQL语句Where 1=1的作用
在Asp.Net网站或者Java网站的程序设计的过程中,很多时候我们可以看到拼接SQL语句的写法的时候都可以看到最前面有个Where 1=1这个条件,其实Where 1=1这是个恒等式,SQL语句写成Where 1=1的形式可以更好的拼接查询语句条件。
结论:Where 1=1为恒等式,拼接SQL语句使用Where 1=1这个语句段主要是为了后续更好的拼接成完成的SQL语句。
举例,前台页面可能传入参数Name和Code两个参数值,都是对应SQL语句查询条件,但这两个查询条件也可全为空,即不传实际参数,在程序中我们时常会看到下面的写法。
string sql="Select * FRom TableA Where 1=1";
if( string.IsNullOrWhiteSpace(Name))
{
sql=sql+string.Format(" AND Name={0}",Name);
}
if( string.IsNullOrWhiteSpace(Code))
{
sql=sql+string.Format(" AND Code={0}",Code);
}
使用了Where 1=1这个恒等式后,后续只需要判断对应的属性值是否为空,不为空直接加入对应的拼接SQL语句段。如果不加入Where 1=1这个条件,代码可读性就会变得更差,可能出现下列几种情况,读者可自行思考下。
(1)Name和Code的值都为空,则Sql语句是不能带Where的,直接是:Select * FRom TableA
(2)如果Name、Code有一个为空,另一个不为空的时候,Sql语句是不会带有And这个关键字,Sql最终语句要么为Select * FRom TableA Where Name=@Name 要么为Select * FRom TableA Where Code=@Code;
(3)如果Name、Code都不为空的时候,语句中就含有AND这个关键字,但Name条件前不会有AND关键字。可以想象下如果有10个查询条件,是不是还要判断下那个查询条件属性是SQL语句中的第一个查询字段。这样的判断就麻烦多了。
当然如果不用Where 1=1这种写法,还有种稍微容易阅读的方法可采用,就是单独定义个字段sqlFilter用于查询条件的拼接,最后判断下sqlFilter是否为空,如果不为空,则截取掉该sqlFilter字符串的最前面几个字符 AND之后得到最终查询条件,拼接到查询语句Sql中。
备注:原文转载自博主个人技术站点IT技术小趣屋,原文链接程序设计过程中SQL语句Where 1=1的作用_IT技术小趣屋。
博主个人技术交流群:960640092,博主微信公众号如下:

【转载】程序设计过程中SQL语句Where 1=1的作用的更多相关文章
- 转:Oracle中SQL语句执行过程中
Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字 ...
- 跟踪oracle中sql语句运行过程及相关知识拓展
select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这种方 ...
- oracle过程中动态语句实现
oracle过程中动态语句实现 一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DD ...
- oracle 中SQL 语句开发语法 SELECT INTO含义
oracle 中SQL 语句开发语法 SELECT INTO含义 在ORACLE中SELECT INTO是如何使用的,什么意思?和SQL SERVER的不一样? 和sqlserver的不一样sql ...
- Oracle ------ SQLDeveloper中SQL语句格式化快捷键
Oracle SQL Developer中SQL语句格式化快捷键: 每次sql复制到SQL Developer面板的时候,格式老不对,而且看起来很不舒服,所有的sql都挤在一行完成. 这时我们可以全选 ...
- html5 webDatabase 存储中sql语句执行可嵌套使用
html5 webDatabase 存储中sql语句执行可嵌套使用,代码如下: *); data.transaction(function(tx){ tx.executeSql("creat ...
- 详解Java的MyBatis框架中SQL语句映射部分的编写
这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...
- oracle中sql语句的优化
oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info (30000条数据)D ...
- Oracle SQL Developer中SQL语句格式化快捷键
Oracle SQL Developer中SQL语句格式化快捷键 格式化SQL语句:Ctrl+F7
随机推荐
- Python的开源人脸识别库:离线识别率高达99.38%(附源码)
Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073 11.11 智慧上云 ...
- Ionic4 Cordova 调用原生硬件 Api 实现扫码功能
QR Scanner 速度快,样式随心所欲,默认只能扫二维码 https://ionicframework.com/docs/native/qr-scanner/ 安装插件 ionic cordova ...
- flutte的第一个hello world程序
用命令行创建项目: flutter create flutterdemo VSCode或者AS连接手机后 输入 flutter run 编译后就可以将默认的代码显示在手机上了 开始写hello wor ...
- 算法习题---5-3卡牌游戏(UVa10935)
一:题目 给定n张卡片,按照1-n的顺序编号,然后拿出一张卡片扔掉,拿出一张卡片放到最后,重复该操作直到只剩1张卡片. 求扔掉的卡片序列和最后剩的卡片的编号. (一)样例输入 7 //卡牌编号从1到7 ...
- Python初级 4 数据的类型
一.数据类型 1.整数: int a = 3 b = 5 2.浮点数: float a = 3.0 b = 5.2 3.字符串: str a = "3.0" b = "3 ...
- Linux的桌面虚拟化技术KVM(三)——KVM虚拟机克隆和快照
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 Linux的桌面虚拟化技术KVM(二)——远程桌面管理 (1).KVM虚拟机克隆 KVM虚拟克隆命令virt-clone [选项] 常用选项 ...
- C#中,子线程与主线程之间的通信是如何实现(转)
注: 项目中按照这个方法调试成功: 通常我们会有这种需求: 一个支持慢速设备的处理类,如网络通信.串口通信.打印等 此时经常需要将线程封装在类里面,让类支持异步处理,然后发布事件或者回调委托通知主线程 ...
- Linq中demo,用力看看吧
本文导读:LINQ to SQL全称基于关系数据的.NET语言集成查询,用于以对象形式管理关系数据,并提供了丰富的查询功能.Linq中where查询与SQL命令中的Where作用相似,都是起到范围限定 ...
- 【ARTS】01_44_左耳听风-201900909~201900915
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【GStreamer开发】GStreamer基础教程04——时间管理
目标 本教程主要讲述一些和时间相关的内容.主要包括: 1. 如何问pipeline查询到流的总时间和当前播放的时间 2. 如何在流内部实现跳转功能 介绍 GstQuery是向一个element或者pa ...