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

          where 1=1; 這個條件始終為True,在不定數量查詢條件情況下,1=1可以很方便的規范語句。

          一、不用where  1=1  在多條件查詢中的困擾

            舉個例子,如果您做查詢頁面,并且,可查詢的選項有多個,同時,還讓用戶自行選擇并輸入查詢關鍵詞,那么,按平時的查詢語句的動態構造,代碼大體如下:

            string MySqlStr=”select * from table where”;

            if(Age.Text.Lenght>0)
            {
              MySqlStr=MySqlStr+“Age=“+“'Age.Text'“;
            }

            if(Address.Text.Lenght>0)
            {
              MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“;
            }

            ①種假設

            如果上述的兩個IF判斷語句,均為True,即用戶都輸入了查詢詞,那么,最終的MySqlStr動態構造語句變為:

            MySqlStr=”select * from table where Age='18'  and Address='云南省文山州廣南縣小波嗎村'”

            可以看得出來,這是一條完整的正確的SQL查詢語句,能夠正確的被執行,并根據數據庫是否存在記錄,返回數據。

            ②種假設

            如果上述的兩個IF判斷語句不成立,那么,最終的MySqlStr動態構造語句變為:

            MySqlStr=”select * from table where“

            現在,我們來看一下這條語句,由于where關鍵詞后面需要使用條件,但是這條語句根本就不存在條件,所以,該語句就是一條錯誤的語句,肯定不能被執行,不僅報錯,同時還不會查詢到任何數據。

            上述的兩種假設,代表了現實的應用,說明,語句的構造存在問題,不足以應付靈活多變的查詢條件。

            二、使用 where  1=1  的好處

            假如我們將上述的語句改為:

            string MySqlStr=”select * from table where  1=1 ”;

            if(Age.Text.Lenght>0)
            {
              MySqlStr=MySqlStr+“and Age=“+“'Age.Text'“;
            }

            if(Address.Text.Lenght>0)
            {
              MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“;
            }

            現在,也存在兩種假設

            ①種假設

            如果兩個IF都成立,那么,語句變為:

            MySqlStr=”select * from table where  1=1 and Age='18'  and Address='云南省文山州廣南縣小波嗎村'”,很明顯,該語句是一條正確的語句,能夠正確執行,如果數據庫有記錄,肯定會被查詢到。

            ②種假設

            如果兩個IF都不成立,那么,語句變為:

            MySqlStr=”select * from table where 1=1”,現在,我們來看這條語句,由于where 1=1 是為True的語句,因此,該條語句語法正確,能夠被正確執行,它的作用相當于:MySqlStr=”select * from table”,即返回表中所有數據。

            言下之意就是:如果用戶在多條件查詢頁面中,不選擇任何字段、不輸入任何關鍵詞,那么,必將返回表中所有數據;如果用戶在頁面中,選擇了部分字段并且輸入了部分查詢關鍵詞,那么,就按用戶設置的條件進行查詢。

            說到這里,不知道您是否已明白,其實,where 1=1的應用,不是什么高級的應用,也不是所謂的智能化的構造,僅僅只是為了滿足多條件查詢頁面中不確定的各種因素而采用的一種構造一條正確能運行的動態SQL語句的一種方法。

          where 1=0; 這個條件始終為false,結果不會返回任何數據,只有表結構,可用于快速建表

          "SELECT * FROM strName WHERE 1 = 0"; 該select語句主要用于讀取表的結構而不考慮表中的數據,這樣節省了內存,因為可以不用保存結果集。  

          create table newtable as select * from oldtable where 1=0;  創建一個新表,而新表的結構與查詢的表的結構是一樣的.

          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,但是不要table_ori 里的數據。(除了表結構,其它結

          構也同理)

          posted on 2011-08-18 18:50 SkyDream 閱讀(259) 評論(0)  編輯  收藏 所屬分類: SQL語句

          <2011年8月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 香格里拉县| 类乌齐县| 滨州市| 荆门市| 藁城市| 鹤庆县| 凤庆县| 高州市| 乐至县| 余干县| 三河市| 忻城县| 长春市| 疏附县| 弋阳县| 石景山区| 瑞昌市| 温泉县| 抚州市| 彰化县| 溧水县| 卢氏县| 澎湖县| 交城县| 新乡县| 兴山县| 邵东县| 东源县| 乐山市| 威远县| 应城市| 陆丰市| 开封市| 哈尔滨市| 池州市| 崇文区| 云龙县| 绥化市| 达日县| 青阳县| 永寿县|