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
因為系統僅會讀取結構信息,而不會將具體的表記錄讀入內存中,這無疑節省了系統開銷。