• SQL --- where 1=1 与 1<> 1


    1、Sql 中的查询语句中的where 字句是为了带条件进行查询,那么使用where 1=1  后查询的是什么

    首先:查询表   tb_obge  中的所有字段

    select * from dbo.obgexinzi

    也可以写成

    select * from dbo.obgexinzi where 1=1

    因为  1=1 表示永远为真,不起约束作用查询所有,不会报错

    1=1 只是为了表示永真,你使用  1<2    a='a',也行,为啥使用where 1=1来,因为 1=1 的运算开销更小,所以常用

     2、既然使用where 1=1   和没有使用的效果相同为啥还要用来?

    动态查询的时候可以使用,经常见的查询条件

     列句:

    String sql ="select * from obgexinzi where 1=1"
    if (this.tbsqlUserName.Text.Trim() != string.Empty)//姓名
    {
    strSql += " and Name like '%" + this.tbsqlUserName.Text.Trim() + "%'";
    }
    
    if (this.ddlUserSex.Text.Trim() != string.Empty)//性别
    {
    strSql += " and Sex like '%" + this.ddlUserSex.SelectedValue + "%'";
    }

    如果要是不使用 where  1=1  ,那么就要用程序进行判断什么时候使用   and

    因为这样无疑是错的。

    select * from obgexinzi where and Name like

    而且你也很难判断,用户使用的是那几个查询条件进行组合查询,要不要加where 或直接用 and ,无疑会,提高程序复杂度

    加上后,不管有没有查询条件都不会出错,只要判断条件是不是为空就行,提高运行的效率。

    select * from obgexinzi where 1=1 and Name like

    3、sql 注入,使用 or 1=1  会把表中所有数据查出来,

    查寻没有什么感觉要是使用  删除语句哪

    delete from  obgexinzi where Name = '周瑜' or 1=1
    
    --删除表中所有

    4、 where  1=1  与  1<> 1  之间的关系

    select * from obgexinzi where 1=1
    -- 实际等效于select * from obgexinzi where true;-- 语句将返回t1中所有的记录行
    
    select * from obgexinzi where 1<>1
    -- 实际等效于 select * from obgexinzi where false;-- 语句将返回空记录集
    where 1<>1 的作用

    当我们只需要获取表的字段(结构)信息,而不需要理会实际保存的记录时,可以使用where 1<> 1
    因为系统仅会读取结构信息,而不会将具体的表记录读入内存中,这无疑节省了系统开销。

  • 相关阅读:
    Java 对象的内存布局(HotSpot 实现)
    HDFS 伪分布式环境搭建
    Java 多线程(四):锁(二)
    使用二叉树的递归套路来解决的问题
    乘积小于 K 的子数组
    Netty 学习(三):通信协议和编解码
    HDFS 分布式环境搭建
    Netty 学习(一):服务端启动 & 客户端启动
    累加和为 K 的最长子数组问题
    使用单调栈来解决的一些问题
  • 原文地址:https://www.cnblogs.com/obge/p/12073755.html
Copyright © 2020-2023  润新知