`
woshixushigang
  • 浏览: 562852 次
  • 性别: 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;  创建一个新表,而新表的结构与查询的表的结构是一样的。

 

分享到:
评论

相关推荐

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

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

    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的数据库连接驱动类请自行放到...

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

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

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

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

    vb学生成绩管理系统

    strSQL = strSQL & " Where 课程号='" + Text1.Text + " '" strSQL = strSQL & " and 课程名='" + Text2.Text + "'" ADOrs.Open strSQL '如果关键字重复,则退出 If Not ADOrs.EOF Then MsgBox "该记录已经存在,不...

    下载排行插件 for phpwind7.rar

    1、将SQL文件上传至DATA目录下,后台恢复数据 ... $db->update("UPDATE $table SET aid=".pwEscape($...答:因为安装此插件时将附件表进行升级,所以默认都是0,不存在任何数据,因此是空白或者下载都是0的更新列表情况。

    T-SQL高级查询

    select * from student where id > 2 and sex = 1; --or 或者 select * from student where id = 2 or sex = 1; --between ... and ... 相当于并且 select * from student where id between 2 and 5; select * ...

    软件工程工资管理系统

    数据库课程设计报告 1 1.开发环境和相关技术介绍 5 1.1开发环境 5 1.2相关技术介绍 5 2.需求分析 5 2.1系统需求和功能 5 2.1.2功能需求描述 6 2.1.2.1员工基本信息模块 6 2.1.2.2工资结构设置模块 6 2.1.2.3工资汇总...

    经典SQL语句大全

    select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、说明:显示文章、提交人和最后回复时间 select a.title,a.username,b.adddate from table a,(select max...

    基于数据库的VB课程设计

    MsgBox "员工编号输入错误,或者没有这个员工!", vbOKOnly + vbExclamation, "警告!" Me.AID = "" Me.AID.SetFocus Me.AID.ListIndex = 0 End If rs.Close End Sub 沈 阳 大 学 课程设计说明书 NO.19 Private...

    数据库操作语句大全(sql)

    select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、说明:显示文章、提交人和最后回复时间 select a.title,a.username,b.adddate from table a,(select max...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053) 共2部分:此为第002部分 基本信息 原书名: OCA/OCP Oracle Database 11g All-in-One Exam Guide with CD-ROM: Exams 1Z0-051, 1Z0-052...

    sql经典语句一部分

    select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、说明:显示文章、提交人和最后回复时间 select a.title,a.username,b.adddate from table a,(select max...

    oracle数据库经典题目

    1.在多进程Oracle实例系统中,进程分为用户进程、后台进程和服务进程。 2.标准的SQL语言语句类型可以分为:数据定义语句(DDL)、数据操纵语句(DML)和数据控制语句(DCL)。 3.在需要滤除查询结果中重复的行时,必须...

    基于FMDB数据库操作类PYFMDB.zip

    }PYStructureType PYStructureTypeAutoInc = 0,//主键,int类型,自增 PYStructureTypePrimaryInt = 1,//主键,int类型,自增 PYStructureTypePrimaryText = 2,//主键,text类型 PYStructureTypeNormalInt = 3,/...

    asp连接数据库代码实例

    sql="select top 1 * from class where classname='"&request("classname")&"'" rs.open sql,conn,1,1 do while not rs.eof %> <%=rs("classname")%> rs.movenext i=i+1 loop %> -----------显示现在所在...

    ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN

    快速高效用:SET SQL_SAFE_UPDATES = 0;下面的就不要看了! 今日用MySQL Workbench进行数据库的管理更新时,执行一个更新的语句碰到以下错误提示: 代码如下: Error Code: 1175 You are using safe update mode ...

    MOOC-数据库系统概论-实验操作之多表查询.pdf

    --也想过了如果符合三个条件,但是没选课所以为0学分,或者null(啊西) SELECT student.sno SNO,SUM(Ccredit) CREDITSUM from sc,course,student where sc.cno = course.cno and student.sno = sc.sno and student...

    eagerflash幻灯片标签

    select top {input(0)} ArticleID,ChannelID,Title,DefaultPicUrl from PE_Article where ChannelID ={input(1)} and Status =3 and Deleted={$PE_False} and DefaultPicUrl like '%.%'order by ArticleID desc ...

Global site tag (gtag.js) - Google Analytics