sql 語句中 where 1 1 的作用?

2021-09-10 04:34:12 字數 1240 閱讀 6813

問題出現場景

最近練習的小的專案中,有乙個模糊查詢的功能。在不選擇任何篩選項的時候,查詢全部的資訊。前端選擇的時候,每增加一項篩選項,查詢的資訊sql就會動態增加乙個where條件,並且從全部的資訊中自動篩選出符合條件的資訊呈現出來。

在這裡,sql語句不是一成不變的。而是隨著前端對於篩選項的選擇而產生變化的。那麼,如何能夠寫出一條動態的sql語句呢?

問題的思考

首先想到的是 if 判定。比如有2個篩選項,就進行4次判定(乙個不選,選了其一,兩個都選)。然後寫4個相對應的完整的sql語句。但是顯然,**量很多,很麻煩。

但是好像 sql 語句只需要在基礎的全部查詢的條件上加入一些條件就成了,能不能判定一下引數,如果有新的篩選引數,就加一些新的條件。否則,就執行最原始的?

但是問題又來了,對於例如 (select * from student where) 這個 sql 句子之後應該怎麼寫呢?寫4個 ? 號嗎 (select * from student where a=? and b=? and c=? and d=?),但是怎麼為這 4個 ?號賦值呢。而且這4個引數不一定同時存在,最少可能乙個都沒有。

是否可以讓 sql 語句停留在(select * from student where)這個樣子,然後通過判定加入 (and x=? )這樣的拼接 sql 語句呢。

嘗試之後發現 (select * from student where)這個 sql 語句跟 (select * from student )在資料庫中並無差別,系統認為這兩者一樣。在拼接 sql 語句的時候,就變成了(select * from student a=?)這種形式。顯然,where 被忽視掉了。那怎麼樣才能讓 where 恆存在呢?

問題的解決

這裡就引入了 1=1這個東西

將上文提到的(select * from student where)改為(select * from student where 1=1)就實現了這樣的效果。倘若不加任何東西,系統會認為這個 sql 語句就是(select * from student )。但是注意,如果你拼接了一些 sql 語句,它呈現給系統的時候 where 是不會消失的,就變成了(select * from student where a=x) 這種。

在進行判定的時候,拼接的 sql 語句可以是 ( and x=y )這樣的形式。這樣,sql 會隨著你拼接的數量而進行更多的篩選。即使沒有任何篩選引數,也會執行最初始的 sql 語句。

通過這樣的方式,就實現了 sql 查詢時候,模糊查詢條件下的 sql 語句拼接的效果

sql語句中的where 1 1

1 1 永真,1 1 永假 1 1 的用處 用於只取結構不取資料的場合 例如 create table table temp tablespace tbs temp as select from table ori where 1 1 建成乙個與table ori 結構相同的表table temp,...

sql語句中where 1 1的作用

where 1 1 最近看到很多sql裡用到where 1 1,原來覺得這沒用嘛,但是又想到如果沒用為什麼要寫呢?於是在網上 查了查,在這裡就 一下 1 1 永真,1 1 永假。1 1 的用處 用於只取結構不取資料的場合 例如 create table table temp tablespace t...

sql語句中where 1 1的作用

where 1 1 最近看到很多sql裡用到where 1 1,原來覺得這沒用嘛,但是又想到如果沒用為什麼要寫呢?於是在網上 查了查,在這裡就 一下 1 1 永真,1 1 永假。1 1 的用處 用於只取結構不取資料的場合 例如 create table table temp tablespace t...