深入理解where 1 1的用處

2021-08-09 06:55:01 字數 1220 閱讀 8671

where 1=1有什麼用?在sql語言中,寫這麼一句話就跟沒寫一樣。

select * from table1 where 1=1與select * from table1完全沒有區別,甚至還有其他許多寫法,1<>2,'a'='a','a'<>'b',其目的就只有乙個,where 的條件為永真,得到的結果就是未加約束條件的。

在sql注入時會用到這個,例如select * from table1 where name='lala'給強行加上select * from table1 where name='lala' or 1=1這就又變成了無約束的查詢了。

最近發現的妙用在於,在不定數量查詢條件情況下,1=1可以很方便的規範語句。例如乙個查詢可能有name,age,height,weight約束,也可能沒有,那該如何處理呢?

string sql=select * from table1 where 1=1

為什麼要寫多餘的1=1?馬上就知道了。

if(!name.equals(""))

if(!age.equals(""))

if(!height.equals(""))

if(!weight.equals(""))

如果不寫1=1呢,那麼在每乙個不為空的查詢條件面前,都必須判斷有沒有where字句,否則要在第乙個出現的地方加where

where 1=1的寫法是為了檢化程式中對條件的檢測

打個比方有三個引數a, b, c

@sql=select * from tb'

這三個引數都可能為空

這時你要構造語句的話,乙個個檢測再寫語句就麻煩

比如if @a is not null

@sql=@sql + " where a=' + @a

if @b is not null

這裡你怎麼寫?要不要加where 或直接用 and ?,你這裡還要對@a是否為空進行檢測

用上 where 1=1 之後,就不存在這樣的問題, 條件是 and 就直接and ,是or就直接接 or

拷貝表 

create   table_name   as   select   *   from   source_table   where   1=1;

複製表結構 

create   table_name   as   select   *   from   source_table   where   1 <> 1;

深入理解where 1 1的用處

本文主要參考 和 現在進入正題 加入where 1 1,既是where 的條件成立,為永真,得到的結果就是未加約束條件的。為了動態sql中連線and條件。where後面總要有語句,加上了1 1後就可以保證語法不會出錯 假如後面確定有條件語句,就可以不用1 1 不能確定where後面是否有語句的時候就...

T SQL中WHERE 1 1的作用

1 1或者 a a 等等恒等式是t sql中表達true的方法。因為在t sql中沒有true這樣的關鍵字或值,所以需要借助這些恒等式來表達true的概念。相對的,同樣可以使用1 1或者1 2等來表達false。在應用程式的安全性方面,使用這些式子是sql注入的基本原理,所以在拼接sql語句的時候要...

SQL中WHERE 1 1的作用

個人認為這篇文章寫的非常好,用例子把道理說的非常明白,所以轉了,希望對大家有所幫助。1 1或者 a a 等等恒等式是t sql中表達true的方法。因為在t sql中沒有true這樣的關鍵字或值,所以需要借助這些恒等式來表達true的概念。相對的,同樣可以使用1 1或者1 2等來表達false。在應...