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
因为系统仅会读取结构信息,而不会将具体的表记录读入内存中,这无疑节省了系统开销。

posted on 2019-12-20 16:19  obge  阅读(4141)  评论(0编辑  收藏  举报