sql语句中where 1=1和 0=1 的作用

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

原文出处:http://www.cnblogs.com/junyuz/archive/2011/03/10/1979646.html

时间: 2024-11-05 19:31:01

sql语句中where 1=1和 0=1 的作用的相关文章

sql语句中 where 1=1和 0=1 的作用

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) { MySq

mybatis sql语句中 like in() 长度为0或null的情况

mybatis sql语句中 like in() 长度为0或null的情况 比如: select * from A where colName LIKE IN <foreach collection="moCodeList" item="item" index="index" open="(" close=")" separator=","> #{item} </for

关于SQL语句中SUM函数返回NULL的解决办法

SUM 是SQL语句中的标准求和函数,如果没有符合条件的记录,那么SUM函数会返回NULL. 但多数情况下,我们希望如果没有符合条件记录的情况下,我们希望它返回0,而不是NULL,那么我们可以使用例如下面的方法来处理: SELECT COALESCE(SUM(name),0) FROM person WHERE id > 0   行了,这下就不用费事去处理返回结果是否为NULL的情况了. COALESCE 函数的意思是返回参数列表中第一个为空的值,该方法允许传入多个参数,该函数也是SQL中的标准

SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值. 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL. 如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值. 如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操

SQL点滴35—SQL语句中的exists

原文:SQL点滴35-SQL语句中的exists 比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID FROM Orders o WHERE o.CustomerID=c.CustomerID) 这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定

SQL语句中的select高级用法

为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+-----------+ | id | name | age | height | gender | cls_id | is_delete | +----+-----------+------+--------+--------+--------+-----------+ | 1 | 小明 | 18 | 180.00 | 女

sql 语句中count()有条件的时候为什么要加上or null

参考:https://blog.csdn.net/qq_32719287/article/details/79513164 1.sql 语句中count()有条件的时候为什么要加上or null. 如count(province = '浙江' or NULL) 这部分,为什么要加上or NULL,直接count(province='浙江')有什么问题吗?不就是要找province = '浙江'的数据吗,为什么要计算NULL的数据. 答案:因为当 province不是浙江时 province='浙

回顾sql语句中的各种连接

1. 内连接(Inner Join) 内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接. 下面是ANSI SQL-92标准 select * from    t_institution i inner join t_teller t on i.inst_no = t.inst_no where i.inst_no = "5801" 其中inner可以省略. 等价于早期的连接语法 select * from t_institution i, t_telle

oracle sql语句中使用if逻辑

l在 SQL 语句中使用IF-THEN-ELSE 逻辑 l l使用两种方法: •CASE 表达式:SQL99的语法,类似Basic,比较繁琐 •DECODE 函数:Oracle自己的语法,类似Java,比较简介 1 SQL> select ename,job, sal, case job when 'PRESIDENT' then 1.1*sal 2 2 when 'MANAGER' then 1.2*sal 3 3 when 'CLERK' then 1.3*sal 4 4 else 1.4*