zoukankan      html  css  js  c++  java
  • 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;  创建一个新表,而新表的结构与查询的表的结构是一样的。

  • 相关阅读:
    angular2 + bootstrap +jquery 实例
    How to create a angular2 project process
    icheck 插件
    select2 下面的搜索框 无法输入问题
    datatabels buttons
    datatables 跳转到指定页
    text-overflow:ellipse;
    box-shadow
    CSS强制性换行
    mybatis与hibernate的不同
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6766978.html
Copyright © 2011-2022 走看看