`
woshixushigang
  • 浏览: 576314 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

where 1=1或者 0 =0

 
阅读更多

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中where 1=1 与1=0的作用1

    在SQL查询中,`WHERE 1=1`和`WHERE 1=0`是两种特殊用法,它们在构建动态查询语句时起到关键作用。本文将详细解释这两种条件语句的作用及其应用场景。 首先,`WHERE 1=1`是一个恒为真的条件,无论何时,这个表达式都...

    SQL_where_1=1的用法

    除了作为动态SQL构建的一部分外,`WHERE 1=1` 和 `WHERE 1=0` 也有其他用途: 1. **WHERE 1=0**: - 这个条件始终为假,因此不会返回任何数据。它可以用于某些特殊场合,比如快速创建表结构而不获取数据: ```sql...

    游标嵌套 STATUS 异常 存储过程

    ### 1. 异常处理与事务回滚 在数据库编程中,异常处理是非常重要的一个环节,它可以帮助开发者更好地控制程序的流程,并确保数据的一致性和完整性。在这个示例中,通过使用`TRY...BEGIN TRANSACTION...CATCH`结构来...

    oracle where case when where后面跟case when

    WHERE salary > (CASE WHEN AVG(salary) IS NOT NULL THEN AVG(salary) ELSE 0 END); ``` 在这个例子中,`CASE WHEN`语句检查平均薪资是否为`NULL`,如果不是,则使用平均薪资作为比较值;如果是`NULL`,则使用0。 ...

    修改数据库表名的命令

    在数据库管理中,修改表名是一项常见的操作,尤其是在进行系统升级、数据迁移或者重构时。本文将详细讲解如何使用SQL命令来更改数据库中的表名,以及如何批量修改表名前缀,以适应不同的应用场景。 首先,我们需要...

    Mysql查询优化器[文].pdf

    例如,`WHERE 0=0 AND column1='y'`会被简化为`WHERE column1='y'`,或者`WHERE (0=1 AND s1=5) OR s1=7`会被优化为`WHERE s1=7`。在某些情况下,如果WHERE子句始终为FALSE,整个子句可能会被去除。不过,如果列被...

    0 1 背包问题 分支界限 回溯+剪枝

    物品或者装入背包,或者不装入背包,称之为0/1被包问题 假设xi表示物品i被装入背包的情况,xi = 1表示物品装入背包,xi = 0表示物品没装入背包,根据题目要求,有下列约束函数 SUM(wi*xi) <= C,bestp = MAX(pi*xi) ...

    用分枝界限 回溯+剪枝 动态规划 解决01背包问题

    问题描述:给定一个容量为C的背包及n个重量为wi,价值 ...SUM(wi*xi) <= C,bestp = MAX(pi*xi) where 0 <= i 解决方法:0/1背包问题有多种解决方法,本实验用动态规 划,回溯,分支界限三种方法进行解题

    mysql的sql语句优化方法面试题总结.docx

    1. **避免无意义的查询**:不要编写如`SELECT col1, col2 INTO #t FROM t WHERE 1=0`这样的查询,它们虽然不返回结果,但会消耗系统资源。应直接使用`CREATE TABLE #t(...)`来创建空表。 2. **使用EXISTS替代IN**:...

    java定时执行sql语句

    delete from deviceInfo set ps=1 where status=0 <<-sql->> update deviceInfo set ps=2 where status=2 程序启动类:dzw.Start.java 程序连接sqlserver用的是jtds,mysql和oracle的数据库连接驱动类请自行放到...

    对于 Oracle 的 rownum 问题

    3. 为什么 between 1 and 10 或者 between 0 and 10 能查到结果,而用 between 2 and 10 却得不到结果 原因同上一样,因为 rownum 总是从 1 开始 从上可以看出,任何时候想把 rownum = 1 这条记录抛弃是不对的,...

    数据库实验 数据的查询

    查询语句是`SELECT JNo FROM Supplies GROUP BY JNo HAVING COUNT(*) = 0 OR MAX(CASE WHEN Suppliers.City = '天津' THEN 1 ELSE 0 END) = 0`,这里使用了GROUP BY和HAVING子句。 - (8) 把全部绿色零件的颜色改为...

    sqlserver的存储过程与 where in 多值参数

    DELETE FROM xxx WHERE CHARINDEX(',' + CAST(id AS VARCHAR) + ',', ',' + @idList + ',') > 0 END ``` 这个方法适用于ID为数字的情况。如果ID可能包含非数字字符,记得使用`RTRIM`去除尾部空格。 **方法三:...

    php SQL之where语句生成器

    0 => '1=1', ]; ``` 调用`get_where($conditions)`会生成如下WHERE子句: ```sql id = 123 and name = 'John Doe' and status in ('active', 'pending') and 1=1 ``` 这个WHERE子句可以与SQL查询的其余部分结合...

    第二次上机实验报告1

    UPDATE Grades SET Gmark = 0 WHERE Sno IN (SELECT Sno FROM Student WHERE Clno = '01311') DELETE FROM Grade WHERE Sno IN (SELECT Sno FROM Student WHERE Clno IN ...) DELETE FROM Student WHERE Sname = ...

    SQL.docx

    - `SELECT * FROM user WHERE id=1 UNION ALL SELECT * FROM user WHERE salary=5000` 或者 - `SELECT * FROM user WHERE id=1; SELECT * FROM user WHERE salary=5000` 3. **使用数值类型替换字符串类型** ...

    通用数据库访问类sql server 版本常用方法封装

    return TSQLServer.ExecDr("select * from [tb] where id = @1", values); } 2.返回一个DataTable数据集合调用如下: public static DataTable GetTable(object[] s = null) { return TSQLServer.ExecDt(...

    case when和sum case when 写法及拼接字段

    (SELECT COUNT(1) FROM tableA WHERE orderStatus = 0) AS 'A', (SELECT COUNT(1) FROM tableB WHERE orderStatus = 1) AS 'B', (SELECT COUNT(1) FROM tableC WHERE orderStatus = 2) AS 'C' ``` 为了进一步...

    数据库实验五 视图.docx

    delete from stuview1 where Sclass='0' 知识点7:视图的应用 视图可以应用于各种场景,例如数据分析、数据报表、数据安全等。例如: create view stuview3 as select Student.Sno,Cno,Grade from Sc,Student where...

Global site tag (gtag.js) - Google Analytics