sql 为什么要用where 1=1或者where 1 =0 ?

一、不用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;  创建一个新表,而新表的结构与查询的表的结构是一样的。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java元数据总结:Java注释的使用和定义

元数据从metadata一词译来,就是“关于数据的数据”的意思。越来越的开源框架都提供了“元数据”支持了,其实也就是注释支持。今天系统学习一下Java注释(Java元数据)。本文内容不限于Javadoc的注释。  1.什么是Java元数据,有什么作用?  元…

Emulator Error: Could not load OpenGLES emulati...

为什么80%的码农都做不了架构师?>>> 模拟器提示警告:Emulator Error: Could not load OpenGLES emulation library: Could not load DLL! 亲测可用: 从SDK\tools\lib目录下将一下四个dll文件复制到SDK\tools,重启模…

C++中的模板展开问题

在c中使用模板的目的是:减少代码量,相同功能的代码只写一份,根据传入不同的参数,实现相同的功能。 优点:减少了程序开发者的工作 量,只写一份相同功能的代码 缺点:编译器在展开时,每…

请教设计模式大牛们几点

我在做一个3D场景编辑器,假如所有物体从ObjectX而来,现在在此对象层,不知道如何设计出较好的结构来。问题如下: 1:每个物体都可以被单独的设置各种效果——阴影、多重纹理贴图、反射。 也可以设置一些动画&#xff1…

关于.net的垃圾回收和大对象处理_标记

CLR垃圾回收器根据所占空间大小划分对象。大对象和小对象的处理方式有很大区别。比如内存碎片整理 —— 在内存中移动大对象的成本是昂贵的,让我们研究一下垃圾回收器是如何处理大对象的,大对象对程序性能有哪些潜在的影响。 大对象堆和垃圾回收 在.Net …

TiKV 源码解析系列 - Raft 的优化

这篇文章转载TiDB大牛 唐刘 的博客:https://mp.weixin.qq.com/s?__bizMzI3NDIxNTQyOQ&mid2247484544&idx1&sn7d8e412ecc5aaeb3f9b7cf391bdcf398&chksmeb1623eadc61aafcefcfbdf36b388a5f96d3009d21641eb6ac67c57317d6c397ddeb58fc7d06&scene21#…

IE9 Preview 4的CSS3支持。

1、完美支持了box-shadow,无需前缀。【哈哈说曹操曹操到,还剩下text-shadow未支持了。】 2、有了支持CSS3 Gradient的迹象,但是很神奇的是IE9现在支持的是-webkit-gradient的写法,不过尚不支持color-stop。嗯,相信下个…

三篇文章了解 TiDB 技术内幕——说存储

此文转载了 申砾 PingCAP 的文章:https://mp.weixin.qq.com/s?__bizMzI3NDIxNTQyOQ&mid2247484822&idx1&sn5434362800d8dcc0ca69d2f3f3260173&chksmeb1622fcdc61abea428f74b26a24bc589d524dd3b666d9b124809300f488d00b33a315a87792&scene21#we…

复制数组方法总结

为什么80%的码农都做不了架构师&#xff1f;>>> 在java中&#xff0c;对数组复制有多种 1.通过循环来复制 比如用for循环 int a[]{1,2,3}; int b[]new int[a.length]; for(int i0;i<a.length;i){ b[i]a[i]; } 2.直接复制 int a[]{1,2,3}; int b[]a…

JS/Cs相互调用

js调用cs中函数的方法 在前台js代码里写上<%method();%>举例:cs文件中写的有public void method(){....执行某些操作.}这个函数,然后在前台页面的js里面调用.<script type"text/javascript"><%method();%></script>在cs中调用js函数法一:C…

学习进度_第六周

第六周主要就是针对结对开发项目&#xff0c;又赶上清明节假期&#xff0c;所以学习时间打了些折扣。 编程时间&#xff1a;课上3小时课下5小时。 博客1篇。转载于:https://www.cnblogs.com/flw0322/p/10680226.html

PostgreSQL体系架构

PostgreSQL 使用客户机/服务器&#xff08;C/S&#xff09;的模式提供服务&#xff0c;一个PostgreSQL会话由下列相关的进程&#xff08;程序&#xff09;组成&#xff1a; (1)一个服务器端进程。该进程管理数据库文件&#xff0c;接受客户端与数据库的连接&#xff0c;且代表…

地址运算符:

C语言中的指针&#xff0c;是用来存储变量地址。 int i 34; printf("i %d, address %p",i,&i); i 34, address 0x7fff5fbff85c转载于:https://www.cnblogs.com/sell/archive/2012/12/26/2834174.html

做好一个team leader的几点看法

每年给组员做PR的时候&#xff0c;总会谈及职业规划的问题。也总会被被问到怎样何时才可以做一个lead&#xff0c;为什么自己不能做lead&#xff1f;就从别处收集了一些自己也加了一些作为一个指引。但实际在具体操作时&#xff0c;也是每个manager见仁见智的事情&#xff0c;而…

不要总想着二进制

同事转了一道题&#xff1a; 有 100 支一模一样的瓶子&#xff0c;编号 1-100。其中 99 瓶是水&#xff0c;1 瓶是看起来像水的毒药。 只要老鼠喝下一小口毒药&#xff0c;一天后就会死。 现在你有 7 只老鼠和一天时间&#xff0c;怎么检验出哪个号码的瓶子里是毒药&#xff1f…

C语言打包解包文件程序(简易版)

//测试通过 科嵌电子 #include <stdio.h> #include <string.h> #include <stdlib.h> typedef unsigned int uint; typedef unsigned char byte; // 包文件中最大可容纳的文件个数 #define MAX_FILE_COUNT 10 // 全局包…

突然领悟

突然领悟 用google搜索图标&#xff0c;看桌满屏的图标。突然想到 开源狂热者&#xff0c;想到他们大骂ms的情况。当时是可以认可&#xff0c;但不理解为什么。又突然想到自己对思想古板&#xff0c;守旧的人的痛恨。突然之间全明白了。在软件业自己也不只用微软不。自己其实在…

IPC之九:使用UNIX Domain Socket进行进程间通信的实例

socket 编程是一种用于网络通信的编程方式&#xff0c;在 socket 的协议族中除了常用的 AF_INET、AF_RAW、AF_NETLINK等以外&#xff0c;还有一个专门用于 IPC 的协议族 AF_UNIX&#xff0c;IPC 是 Linux 编程中一个重要的概念&#xff0c;常用的 IPC 方式有管道、消息队列、共…

CH 5102Mobile Service题解

题目&#xff1b; 用动态规划很容易将完成任务量作为dp的阶段&#xff0c;通过指派服务员&#xff0c;从当前i-1个任务转移到i个任务&#xff1b; 我们可以用一个四维数组f[i][x][y][z]来表示在完成当前任务i时&#xff0c;三个机器人分别在x&#xff0c;y&#xff0c;z的位置&…

Postgres主进程文件—postmaster.pid

postmaster内容 使用cat -n 命令可以查看postmaster.pid文件内容&#xff1a; ) 根据每一行进行解释&#xff0c;并给出对应的源代码说明 13795: 代表Postgres主进程的PID/usr/local/pgsql/data: 代表数据目录 1529235109&#xff1a; 代表postmaster文件的创建时间。 54…