為什么SQL語句加 1=1
這個就是為了方便sql條件的拼接,在“where”和“and”的地方方便處理(這里以“and”關鍵字舉例)
假如有如下5列條件可以任意組合:
a='a'; b='b'; c='c'; d='d'; e='e'
第一種方案:
如果初始sql為: select * from t1
我們在生成最終的sql時就需要分情況判斷
1。一個條件也不帶,sql保持不變
2。如果至少有一個條件,我們就需要在sql后面加一個“where”來連接條件
3。如果至少有二個條件,“where”后面的第一個條件前面是不需要“and”的,因為5列條件可以任意組合,我們就需要判斷哪一列會是緊跟在“where”后面的,這時候又需要代碼來判斷
第二種方案:
如果初始sql是這樣:select * from t1 where 1=1
現在對于第一種方案里面的任何一種情況,我們都只需要直接在sql后面加上“and + 對應的條件”就行了,不用另外寫代碼判斷
比如:
sql = sql + ' and ' + a='a' --->select * from t1 where 1=1 and a='a'
sql = sql + ' and ' + b='b' --->select * from t1 where 1=1 and b='b'
sql = sql + ' and ' + c='c' + " and " + d='d' --->select * from t1 where 1=1 and c='c' and d='d'
特別是當條件很多,程序中又能循環動態的添加條件的時候很方便
下面用偽代碼舉例:
sql = select * from t1 where 1=1;
for (int i = 0; i {
sql = sql + " and " + column[i].Name + "='" + column[i].Value + "'";
}
最終生成的sql就類似如下的:
select * from t1 where 1=1 and a='a' and b='b' and c='c' and d='d' and e='e'
為什么SQL語句加 1=1
這個就是為了方便sql條件的拼接,在“where”和“and”的地方方便處理(這里以“and”關鍵字舉例)假如有如下5列條件可以任意組合:a='a'; b='b'; c='c'; d='d'; e='e'第一種方案:如果初始sql為: select * from t1我們在生成最終的sql時就需要分情況判斷1。
一個條件也不帶,sql保持不變2。如果至少有一個條件,我們就需要在sql后面加一個“where”來連接條件3。
如果至少有二個條件,“where”后面的第一個條件前面是不需要“and”的,因為5列條件可以任意組合,我們就需要判斷哪一列會是緊跟在“where”后面的,這時候又需要代碼來判斷第二種方案:如果初始sql是這樣:select * from t1 where 1=1現在對于第一種方案里面的任何一種情況,我們都只需要直接在sql后面加上“and + 對應的條件”就行了,不用另外寫代碼判斷比如:sql = sql + ' and ' + a='a' ---> select * from t1 where 1=1 and a='a'sql = sql + ' and ' + b='b' ---> select * from t1 where 1=1 and b='b'sql = sql + ' and ' + c='c' + " and " + d='d' ---> select * from t1 where 1=1 and c='c' and d='d'特別是當條件很多,程序中又能循環動態的添加條件的時候很方便下面用偽代碼舉例:sql = select * from t1 where 1=1;for (int i = 0; i < *; i++){sql = sql + " and " + column[i].Name + "='" + column[i].Value + "'";}最終生成的sql就類似如下的:select * from t1 where 1=1 and a='a' and b='b' and c='c' and d='d' and e='e'。
sql語句中where 1=1是什么意思
這段代碼應該是由程序(例如Java)中生成的,where條件中 1=1 之后的條件是通過 if 塊動態變化的。例如:
String sql="select * from table_name where 1=1";
if( conditon 1) {
sql=sql+" and var2=value2";
}
if(conditon 2) {
sql=sql+" and var3=value3";
}
where 1=1 是為了避免where 關鍵字后面的第一個詞直接就是 “and”而導致語法錯誤。
基本說明:
1、這個SQL語句很明顯是全表掃描,需要大量的IO操作,數據量越大越慢,建議查詢時增加必輸項,即where 1=1后面追加一些常用的必選條件,并且將這些必選條件建立適當的索引,效率會大大提高;
2、主要是一些程序員的為了拼湊動態的sql語句,如果使用不好會起到副作用的,是根據個人的一些習慣,是為了避免where 關鍵字后面的第一個詞直接就是“and”而導致語法錯誤,是為了后面附加and方便程序邏輯處理用的。
sql語句中where 1=1是什么意思
這段代碼應該是由程序(例如Java)中生成的,where條件中 1=1 之后的條件是通過 if 塊動態變化的。
例如: String sql="select * from table_name where 1=1"; if( conditon 1) { sql=sql+" and var2=value2"; } if(conditon 2) { sql=sql+" and var3=value3"; } where 1=1 是為了避免where 關鍵字后面的第一個詞直接就是 “and”而導致語法錯誤。