報道公司事件 · 傳播行業動態
SQL查詢語句在數據庫的操作當中經常頻繁用到,為了進行更強的過濾控制,有時簡單的過濾根本無法實現數據的篩選,這時我們需要用到高級過濾AND和OR、IN和NOT操作符。今天做網站小編就和大家討論一下關于sql高級過濾語句的用法...
語句:SELECT * FROM dbo.Products WHERE prod_name='king doll' AND prod_price>8;
--檢索dbo.Products表中所有列,過濾條件為由供應商king doll制造價格大于8的所有商品;
注意:--后面的字符是這條語句的注釋,這條語句有兩個條件,分別用AND關鍵字聯接在一起,并且過濾結果必須滿足這兩個條件,如果只滿足其中一個該數據不會被檢索出來;
例如:已知供應商king doll制造商品對應的價格是8元,現在把商品價格改成小于8或者供應商改成king add,結論是任何數據都不會被檢索出來,因為使用AND操作符只滿足一個條件是不合理的。
OR操作符(或)
語句:SELECT * FROM dbo.Products WHERE prod_name='king doll' OR prod_price>8;
--檢索dbo.Products表中所有列,過濾條件為由供應商king doll制造價格大于8的所有商品值;
注意:--這里要說明的是OR操作符與AND操作符的不同之處是只要滿足其中一個條件,數值就會被檢索出來,例如:由供應商king doll制造價格小于8商品或者由供應商king add制造價格大于8的商品只要其中一個條件符合,數據就被檢索出來;
求值順序(AND和OR混合使用)
先看個例子:檢索出價格為8元以上,且由king doll或者Queen dool制造的所有產品,我們輸入語句:
SELECT * FROM dbo.Products WHERE prod_name='king doll' OR prod_name='Queen dool' AND prod_price>8;
得出結果如下圖:
現在把prod_price大于8的值改成大于10,看看結果如何:
現在檢索出來的值是1行,接下來在prod_name='king doll' OR prod_name='Queen dool'語句加上括號,看看結果如何:
這回什么都沒了
現在就解釋為什么:其實是操作符被錯誤組合導致的,因為在數據庫系統中AND求值的順序比OR的求值順序更優先。
第一張圖的順序是:先執行prod_name='Queen dool' AND prod_price>10的數據再執行prod_name='king doll' OR prod_name='Queen dool'的數據,由于第一個條件和第2條件符合所以出現兩行數值。
第二張圖的順序也是:先執行prod_name='Queen dool' AND prod_price>10的數據再執行prod_name='king doll' OR prod_name='Queen dool'的數據,但由于第一條件不符,Queen dool對應的數值沒有大于10的值,所以只出現第2個條件的數據。
第三張圖的順序是:先執行括號里面的,然后在執行AND prod_price>10,在SQL數據庫中加括號的內容系統會優先執行,由于結果只滿足括號里的條件,但并不滿足括號外的條件,因為prod_price的值是9.49小于10,所以什么數據都沒顯示。
IN操作符(指定條件范圍)
語句:SELECT * FROM dbo.Products WHERE prod_name IN ('king doll' ,'Queen dool')
--檢索dbo.Products表中所有列,過濾條件為由供應商king doll和Queen dool制造的商品;
注意:它的功能其實和OR一樣,但是它的執行速度會更快并且簡潔,最大的優點是可以包含其他SELECT語句,能夠更動態地建立WHERE字句。
NOT操作符(否定其后跟的任何條件)
語句:SELECT * FROM dbo.Products WHERE NOT prod_name='king doll';
--檢索dbo.Products表中所有列,過濾條件為否定king doll供應商包含的所有值;