深入理解SQL語句中常出現的where 1=1

本文主要參考   http://bbs.csdn.net/topics/310082591 和 http://www.jb51.net/article/38062.htm

現在進入正題:

加入where 1=1,既是where 的條件成立,爲永真,得到的結果就是未加約束條件的。爲了動態SQL中連接and條件。

where後面總要有語句,加上了1=1後就可以保證語法不會出錯! 
假如後面確定有條件語句,就可以不用1=1; 不能確定where後面是否有語句的時候就要加上1=1了,當沒有其他條件語句時候,還有1=1,就不會輸錯了 。 


例1: SQL="SELECT * FROM TABLE WHERE 1=1 "&WHERE_STR  
WHERE_STR是根據前面填入的得到的一個串.這樣就不用管是否爲空,都不會出現錯誤.就這點技巧了。 

就是說:1=1永真條件,一般用於構造動態SQL語句,"SELECT ... FROM ... WHERE 1=1 "+動態構造條件子句。

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

if(!name.equals("")){
sql=sql+"name='"+name+"'";
}
if(!age.equals("")){
sql=sql+"age'"+age+"'";
}
if(!height.equals("")){
sql=sql+"height='"+height+"'";
}
if(!weight.equals("")){
sql=sql+"weight='"+weight+"'";
}

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


例2:打個比方有三個參數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;


例3:

String sql = "select * from " + DB_TABLENAME + " where 1=1 and (name like '%" + condition + "%' " +
"or mobilephone like '%" + condition + "%' or familyphone like '%" + condition + "%' " +
"or officephone like '%" + condition + "%')" + strSelection;

加上where 1=1 之後,就可以直接使用and 和or 語句了,不怕出現語法錯誤了~~~

2016.1.19晴,冷,心情little down~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章