当前位置: 首页 > news >正文

mysql中使用 where 1=1和 0=1 的作用

操作mysql的时候,经常使用where语句进行查询。当where语句不存在的时候,经常在后面加一个where 1=1

where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句。

 

一、不用where 1=1 在多条件查询中的困扰

  举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码大体如下:

string MySqlStr=”select * from table where”;   if(Age.Text.Lenght>0)   {     MySqlStr=MySqlStr+“Age=“+“'Age.Text'“;   }   if(Address.Text.Lenght>0)   {     MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“; }

第一种种假设

如果上述的两个IF判断语句,均为True,即用户都输入了查询词,那么,最终的MySqlStr动态构造语句变为:

MySqlStr=”select * from table where Age='18' and Address='云南省文山州广南县小波吗村'

可以看得出来,这是一条完整的正确的SQL查询语句,能够正确的被执行,并根据数据库是否存在记录,返回数据。

第二种假设

如果上述的两个IF判断语句不成立,那么,最终的MySqlStr动态构造语句变为:

MySqlStr=”select * from table where

现在,我们来看一下这条语句,由于where关键词后面需要使用条件,但是这条语句根本就不存在条件,所以,该语句就是一条错误的语句,肯定不能被执行,不仅报错,同时还不会查询到任何数据。

上述的两种假设,代表了现实的应用,说明,语句的构造存在问题,不足以应付灵活多变的查询条件。

二、使用 where 1=1 的好处

假如我们将上述的语句改为:

string MySqlStr=”select * from table where 1=1 ”;   if(Age.Text.Lenght>0)   {     MySqlStr=MySqlStr+“and Age=“+“'Age.Text'“;   }   if(Address.Text.Lenght>0)   {     MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“; }

现在,也存在两种假设

第一种假设

如果两个IF都成立,那么,语句变为:

MySqlStr=”select * from table where 1=1 and Age='18' and Address='云南省文山州广南县小波吗村'

很明显,该语句是一条正确的语句,能够正确执行,如果数据库有记录,肯定会被查询到。

第二种假设

如果两个IF都不成立,那么,语句变为:

MySqlStr=”select * from table where 1=1”,

现在,我们来看这条语句,由于where 1=1 是为True的语句,因此,该条语句语法正确,能够被正确执行,它的作用相当于:MySqlStr=”select * from table”,即返回表中所有数据。

言下之意就是:如果用户在多条件查询页面中,不选择任何字段、不输入任何关键词,那么,必将返回表中所有数据;如果用户在页面中,选择了部分字段并且输入了部分查询关键词,那么,就按用户设置的条件进行查询。

说到这里,不知道您是否已明白,其实,where 1=1的应用,不是什么高级的应用,也不是所谓的智能化的构造,仅仅只是为了满足多条件查询页面中不确定的各种因素而采用的一种构造一条正确能运行的动态SQL语句的一种方法。

where 1=0; 这个条件始终为false,结果不会返回任何数据,只有表结构,可用于快速建表

"SELECT * FROM strName WHERE 1 = 0";

该select语句主要用于读取表的结构而不考虑表中的数据,这样节省了内存,因为可以不用保存结果集。

create table newtable as select * from oldtable where 1=0;

创建一个新表,而新表的结构与查询的表的结构是一样的。

相关文章:

  • 括号
  • ssh远程登录讲解
  • Linux系统备份与恢复
  • libcurl
  • Eureka的故事,专注能让你看到别人看不到的事情
  • 锤子科技官方首页的特效
  • 知识获取、管理与知识体系的完善
  • Web Storage相关
  • CSS的垂直居中和水平居中总结
  • Android 复制文本内容到系统剪贴板的最简单实践
  • 9种用户体验设计的状态是必须知道的(二)
  • 用ASCII码显示string.xml中的特殊字符
  • 11.2.0.3 hosts里边的scanip信息删除与否对数据库是否重启探索
  • SpringBoot揭秘:快速构建微服务体系
  • C# 中的多线程(转载)
  • 深入了解以太坊
  • [译]CSS 居中(Center)方法大合集
  • Leetcode 27 Remove Element
  • Solarized Scheme
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue 2.3、2.4 知识点小结
  • 初识 beanstalkd
  • 高程读书笔记 第六章 面向对象程序设计
  • 将回调地狱按在地上摩擦的Promise
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 延迟脚本的方式
  • 应用生命周期终极 DevOps 工具包
  • 如何用纯 CSS 创作一个货车 loader
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​学习一下,什么是预包装食品?​
  • ​一些不规范的GTID使用场景
  • # 数论-逆元
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (笔试题)分解质因式
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)linux下的时间函数使用
  • (转)Sql Server 保留几位小数的两种做法
  • (转)winform之ListView
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 使用配置文件
  • .net分布式压力测试工具(Beetle.DT)
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • @Transactional类内部访问失效原因详解
  • [ SNOI 2013 ] Quare
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [Android] Upload package to device fails #2720
  • [bzoj1912]异象石(set)
  • [CF]Codeforces Round #551 (Div. 2)