旗下網站

百科知識庫

報道公司事件 · 傳播行業動態

SQL高級過濾查詢用法

發布日期:2018-01-08    點擊:422

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供應商包含的所有值;

Copyright 大連網龍科技 版權所有 遼ICP備14006349號 sitemapXML  newsXML  全部新聞

遼公網安備 21021702000140號

電話
客服
欧美老妇人色惰网