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和 0=1 的作用(多条件查询错误的问题)

时间: 2024-08-07 12:31:12

sql where 1=1和 0=1 的作用(多条件查询错误的问题)的相关文章

sql where 1=1和 0=1 的作用

sql where 1=1和 0=1 的作用 摘自: http://www.cnblogs.com/junyuz/archive/2011/03/10/1979646.html where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句. 一.不用where  1=1  在多条件查询中的困扰 举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码大体如下: string MySq

[转]sql where 1=1和 0=1 的作用

sql where 1=1和 0=1 的作用 原文地址:http://www.cnblogs.com/junyuz/archive/2011/03/10/1979646.html where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句. 一.不用where  1=1  在多条件查询中的困扰 举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码大体如下: string MyS

Yii2.0中文开发向导——Where条件查询全解析

在Yii的Model里进行查询的时候 where是必不可少的.Where方法声明为 static where( $condition ) 其中参数 $condition类型为字符串或者数组 1.字符串字符串是最简单的,直接按sql中的where条件写就可以,如 $condition = 'name=\'zhidemy.com\' and age>10'; 2.数组如果是数组的情况下,有两种格式的写法. name-value格式的字典数组:['column1' => value1, 'colum

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

C# SQL数据库助手类2.0(自用)

1 using System; 2 using System.Collections.Generic; 3 using System.Configuration; 4 using System.Data; 5 using System.Data.SqlClient; 6 using System.Text; 7 8 namespace YcTools 9 { 10 /// <summary>C# SQL数据库助手类2.0</summary> 11 public class YSql

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

SQL Server温故系列(0):导航目录

SQL Server温故系列(0):导航目录 SQL Server温故系列(1):SQL 数据操作 CRUD 之增删改合 SQL Server温故系列(2):SQL 数据操作 CRUD 之简单查询 SQL Server温故系列(3):SQL 子查询 & 公用表表达式 CTE SQL Server温故系列(4):SQL 查询之集合运算 & 聚合函数 SQL Server温故系列(5):SQL 查询之分组查询 GROUP BY SQL Server温故系列(6):SQL 查询之 OVER &a

SQL的主键和外键的作用

SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除. (4)更新主键记录时,同样有级联更新和拒绝执行的选择. 简而言之,SQL的主键和外键就是起约束作用. 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,

SQL多条件查询安全高效比较

ALTER PROCEDURE _tmp @ID VARCHAR(50), @PN VARCHAR(50), @Type INT AS BEGIN /********************************** -- 功能:多条件查询性能 _tmp 'K3G8KG6NN94SBBS0','K7F7FF',0 **********************************/ PRINT '测试数据条数500W' set nocount ON DECLARE @time DATETIM