1. 程式人生 > >深入理解SQL語句中常出現的where 1=1

深入理解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
@[email protected] + " 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~

相關推薦

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

本文主要參考   http://bbs.csdn.net/topics/310082591 和 http://www.jb51.net/article/38062.htm 現在進入正題: 加入wher

SQL語句,為什麼where子句不能使用列別名,而order by卻可以?

當select的表示式很長時,我們經常會用as子句為該表示式指定別名,然而卻發現無法在Where條件中直接使用該別名作為判斷條件.  例如下面的SQL語句:  select id, (c1 + c2) as s from t1 where s > 100  執行會

sql語句 having與where區別

HAVING語句通常與GROUP BY語句聯合使用,用來過濾由GROUP BY語句返回的記錄集。 HAVING語句的存在彌補了WHERE關鍵字不能與聚合函式聯合使用的不足。     CREATE TABLE `tp5_student` (  &

深入理解SQL語句執行過程

循環 存儲 files 訪問 complete 不可 要求 arch p s SQL語句執行過程詳解一條sql,plsql的執行到底是怎樣執行的呢?一、SQL語句執行原理:第一步:客戶端把語句發給服務器端執行當我們在客戶端執行 select 語句時,客戶端會把這條 SQL

sql語句where 1=1和 0=1 的作用

代碼 address .com style 語句 reat www new add sql where 1=1和 0=1 的作用 where 1=1; 這個條件始終為True,在不定數量查詢條件情況下,1=1可以很方便的規範語句。 一、不用where 1=1 在

sql語句where 1=11=0的作用

lec 動態sql select語句 link 最終 ble 用戶 作用 並且 一、不用where 1=1 在多條件查詢中的困擾   舉個例子,如果您做查詢頁面,並且,可查詢的選項有多個,同時,還讓用戶自行選擇並輸入查詢關鍵詞,那麽,按平時的查詢語句的動態構造,代碼大體如

深入理解SQL Server 2005 的 COLUMNS_UPDATED函數

clas arch size else 方式 它的 語句 存在 順序 原文:深入理解SQL Server 2005 中的 COLUMNS_UPDATED函數 概述 COLUMNS_UPDATED函數能夠出現在INSERT或UPDATE觸發器中AS關鍵字後的任何位置,用來

sql查詢語句on和where的區別

運算 www span 多表 速度 分享 執行 最終 .com   數據庫在通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給用戶。 在使用left jion時,on和where條件的區別如下: on條件是在生成臨時表時使用的條件,它不管

sql語句where 1=1的作用

where 1=1  最近看到很多sql裡用到where 1=1,原來覺得這沒用嘛,但是又想到如果沒用為什麼要寫呢?於是在網上  查了查,在這裡就淺談一下:  1=1 永真, 1<>1 永假。  1<>1 的用處:  用於只取

SQL語句where 1=1 和0=1

SQL where 1=1 和0=1的作用  where 1=1; 這個條件始終為True,在不定數量查詢條件情況下,1=1可以很方便的規範語句。 舉個例子,如果您做查詢頁面,讓使用者自行選擇並輸入查詢關鍵詞,程式碼大體如下:    string MySqlStr=”s

SQL 語句 where 條件後 寫上1=1  是什麼意思

這段程式碼應該是由程式(例如Java)中生成的,where條件中 1=1 之後的條件是通過 if 塊動態變化的。例如:  String sql="select * from table_name  where 1=1";        if( conditon 1) {  

elasticsearch搜尋中文分詞理解、類似SQL語句的"LIKE”條件的模糊搜尋以及忽略大小寫搜尋

elasticsearch作為一款搜尋引擎,應用於資料庫無法承受前端的搜尋壓力時,採用其進行資料的搜尋。可以大併發架構設計中一種選擇,以下是elasticsearch搜尋引擎的部分規則,在實際應用中可以讓我們快速熟悉和幫助解決一些問題。01》不進行分詞的索引建立URL:es_

oracle sql 語句where條件 1=1 是什麼意思

是為了後面附加and ...方便程式邏輯處理用的, 要不然你就得稍微複雜一點兒處理: 有where條件。。。 沒有where條件。。。 1=1 是永恆成立的,意思無條件的,也就是說在SQL語句裡有沒有這個1=1都可以。 這個1=1常用於應用程式根據使用者選擇項的不

SQL語句單雙引號的理解

 EG:     StrSql="select * from usersheet where loginname=' "+Login1.UserName+" ' and userpass=' "+L

sql語句當條件的數量非常大時where...in條件子句用什麼更好的方法代替?

When you need to pass a list of parameters into a MySQL, there are at least two method to do this: Issue a dynamical query which would fill an IN list wi

Sql語句IN和exists的區別及應用

應用場景 將不 集中 pre 代碼 根據 gif 效率 .cn   表展示     首先,查詢中涉及到的兩個表,一個user和一個order表,具體表的內容如下:     user表:          order表:        in     確定給定的值是否與子查

sql語句left join、right join、inner join的區別

select http img image ner -s style nbsp color left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄; right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄;inner j

深入理解asp.net的 __doPostBack函數

control mar find ros 理解 額外 工具 服務器 們的   前段時間做一個.net網站的時候,用到了模擬前端按鈕刷新updatePanel進行局部刷新的時候,遇見了這個問題,當時沒顧上記下來,查看網上資料,記下來留著以後查看.   很早以前,當我剛接觸a

SQl語句使用占位符的優點

date 註入 了解 運行環境 可讀性 統計信息 浪費 cut val 1.增加SQL代碼可讀性2.占位符可以預先編譯,提高執行效率3.防止SQL註入4用占位符的目的是綁定變量,這樣可以減少數據SQL的硬解析,所以執行效率會提高不少 綁定變量是Oracle解決硬解析的首

在T-SQL語句訪問遠程數據庫

school 本地 customer its date rom rowset update 登陸名 1、啟用Ad Hoc Distributed Queries 在使用openrowset/opendatasource前搜先要啟用Ad Hoc Distributed Que