where 1=1這個條件始終爲True,可以動態組SQL語句。
在不定數量查詢條件情況下,
1=1可以很方便的規範語句
where 1=0這個條件始終爲False,只傳回SELECT結果的表格結構。
1=0結果不會返回任何數據,只有表結果,可用於快速建表
where 1=1
用於動態構造SQL語句,解決在多條件查詢中的困擾。
where 1=1這個條件始終爲True,在不定數量查詢條件情況下,1=1可以很方便的規範語句。
以下這兩個SQL語句一樣,都會返回所有的數據:
1
2
select * from customer
select * from customer where 1=1 --where 1=1為true,所以能正確執行,能返回所有數據
由於where 1=1 是爲True的語句,因此,該條語句語法正確,能夠被正確執行,它的作用相當於 select * from customer,即返回表中所有數據。
where 1=1的應用(動態組SQL字串)
例如,動態組SQL字串,如果想要做多條件查詢頁面,依據畫面上的使用者輸入值下SQL查詢語法,程式碼大體如下:
1
2
3
4
5
6
7
8
9
10
//1.先下可以撈全部資料的SQL語法
StringBuilder sql = new StringBuilder("select * from customer where 1=1 ");
//2.篩選條件(動態組SQL字串)
if(age > 0) {
sql.append($"or age ={age}");
}
if(keyword != null) {
sql.Append($"or keyword like '%{keyword}%'");
}
動態組SQL字串會輸出:
1
select * from customer where 1=1 or age =20 or keyword like '%test123%'
如果使用者在多條件查詢頁面中,不選擇任何選項,沒有輸入任何關鍵詞,SQL語句為select * from customer where 1=1 該SQL語句語法正確,能夠被正確執行,它的作用相當於:sql = select * from customer返回表中所有數據。
反之,如果沒有加上1=1,在多條件查詢中SQL語句select * from customer where,由於 where後面沒有任何條件,這條SQL語句就是一條錯誤的語句,肯定不能被執行,就會報錯。
其實,
where 1=1的應用,不是什麼高級的應用,也不是所謂的智能化的構造,僅僅只是爲了滿足多條件查詢頁面中不確定的各種因素而採用的一種構造、一條正確能運行的動態SQL語句的一種方法。
where 1=0
where 1=0 這個條件始終爲false,只傳回SELECT結果的表格結構,不會返回任何數據,只有表結構,可用於快速建表。
範例1:用在Select語句(只讀取表結構)
只讀取表結構:
1
select * from customer where 1=0
該select語句主要用於讀取表的結構而不考慮表中的數據,這樣節省了內存,因爲可以不用保存結果集。
範例2:用在Select Into(只複製表結構)
複製資料表結構到新的資料表:
1
2
3
SELECT *
INTO customer_backup
FROM customer WHERE 0=1 -- where 1=0只複製表結構
範例3:用在Create Table As Select(只複製表結構)
創建一個新表,而新表的結構與查詢的表的結構是一樣的。
1
2
3
4
5
create table customer_backup
as
select *
from customer_backup
where 1=0