【转】sql where 一=1和 0=1 的作用
http://www.cnblogs.com/junyuz/archive/2011/03/10/1979646.html
sql where 1=1和 0=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; 创建一个新表,而新表的结构与查询的表的结构是一样的。
相关推荐
- SQL小知识点总结中(1)——HAVING和WHERE的区别
- python数据处理 1 删除dataframe中有NAN的 2 pandas中对列进行上下平移(shift) 3. 批量读取文件夹中所有文件 4. python tile函数 5.python中**运算符 6 min(0),max(0)的用法 7 分组求平均值(groupby) 8 数据分组和聚合运算 9 统计每个标签出现的次数 10 生成pandas数据 11 fit()函数不能接收string类型数据 12 将两个含有字符串的集合取并集 13 reduce()函数会对参数序列中元素进行累积 14 拉普拉斯平滑和下溢出 15 从txt文件中读取字符串,并将字符串转换为字符列表 16 文本向量化 17 从50个邮件中随机选出40个作为训练集,10个作为测试集 18 sorted排序 19 压缩与解压缩 20 if not 21 Numpy的矩阵索引和array数组索引 22 getA()函数的作用 23 梯度上升算法原理解析 24 Numpy中np.append() 25 np.c_[xx.r
- 计算机基础——硬件 一编程语言的作用及与操作系统和硬件的关系 二、cpu与寄存器,内核态与用户态及如何切换 三、存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池 四、磁盘结构,平均寻道时间,平均延迟时间,虚拟内存与MMU 五、磁带 六、总线 六、操作系统启动流程 七、应用程序启动流程
- 面试题 1. Python是如何进行内存管理的? 2. 什么是lambda函数?它有什么好处? 3. Python里面如何实现tuple和list的转换? 4. 请写出一段Python代码实现删除一个list里面的重复元素 5. 编程用sort进行排序,然后从最后一个元素开始判断 6. Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别) 7. 介绍一下except的用法和作用? 8. Python中pass语句的作用是什么? 9. 介绍一下Python下range()函数的用法? 10. 如何用Python来进行查询和替换一个文本字符串? 11. Python里面match()和search()的区别? 12. 用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别? 13. Python里面如何生成随机数? 1
- Servlet 总结 1.什么是Servlet? 2.为什么要用Servlet? 3.Servlet的作用 4.Servlet的特点 5.Servlet运行流程 6.一个简单的Servlet 7. web.xml 8.Servlet的生命周期 9. HttpServlet 10.HttpServletRequest 11.HttpServletResponse 12.中文乱码问题 13.请求转发和重定向 13.2重定向 14.路径问题(path中的“/”) 15.Cookie 16. session 17.ServletConfig 18.ServletContext 19.作用域对象
- 01 | 基础架构:一条SQL查询语句是如何执行的? 1、数据库内部执行过程 2、Server层和存储引擎两层 3、每个组件的作用
- MySQL基础_基础查询_进阶6_连接查询_SQL99 二、SQL99语法 1) 内连接 1、等值连接 案例1.查询员工名、部门名 案例2.查询名字中包含e的员工名和工种名(添加筛选) 3.查询部门个数>3的城市名和部门个数,(添加分组+筛选) ①查询每个城市的部门个数 ②在①结果上筛选满足条件的 案例4.查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序) ①查询每个部门的员工个数 ②在①的结果上筛选员工个数>3的记录,并排序 5.查询员工名、部门名、工种名,并按部门名降序(添加三表连接) 2)非等值连接 查询员工的工资级别 查询工资级别个数>20的个数,并且按工资级别降序 3)自连接 查询姓名中包含k的员工的名字、上级的名字 二、外连接 引入:查询没有男朋友的女生名 左外连接 右外连接 交叉连接 sql92与sql99对比 一、查询编号>3的女生的男朋友信息,如果有则列出详细,如果没有,用null填充 二、查询哪个城市没有部门 三、查询部门名为sal或it的员工信息
- .NET面试题集锦② 一、前言部分 1.实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。 2.请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。 3.请指出GAC的含义? 4.向服务器发送请求有几种方式? 5.DataReader与Dataset有什么区别? 6.软件开发过程一般有几个阶段?每个阶段的作用? 7.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义? using 指令 和语句 new 创建实例 new 隐藏基类中方法。 8.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话, 仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个. 9.下面这段代码输出什么,为什么? 10.什么叫做SQL注入,如何防止?请举例说明。 11.什么是反射? 12.用Singleton如何写设计模式? 13.什么是Application Pool? 14.什么是虚函
- .NET面试题集锦① 一、前言部分 1.面向对象的思想主要包括什么? 2.什么是ASP.net中的用户控件? 3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载? CTS、CLS和CLR分别作何解释? 4.列举一下你所了解的XML技术及其应用 5.值类型和引用类型的区别? 6.ADO.net中常用的对象有哪些?分别描述一下。 7.如何理解委托? 8.C#中的接口和类有什么异同? 9.UDP连接和TCP连接的异同? 10.ASP.NET的身份验证方式有哪些?分别是什么原理? 11.进程和线程分别怎么理解? 12.什么是code-Behind技术? 13.解释一下UDDI、WSDL的意义及其作用。 14.什么是SOAP,有哪些应用? 15.如何理解.net中的垃圾回收机制。 16.常用的调用webservice方法有哪些? 17. 写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID可能不是连续的。) 1
-
一些常用的vim设置
1. vim的几种模式和按键映射
2. 键盘映射时
的作用是什么? 3. vim与Tab相关的几个参数 4. vim检测文件类型 5. vim自动缩进的几种方式 6. vim粘贴代码格式变乱 7. vim折叠设置 - UTF-8 转 GB2312,该如何解决
- Netty: 几个要害对象生命周期之间的关联