SQL查zha詢xun語yu句ju在zai數shu據ju庫ku的de操cao作zuo當dang中zhong經jing常chang頻pin繁fan用yong到dao,為wei了le進jin行xing更geng強qiang的de過guo濾lv控kong製zhi,有you時shi簡jian單dan的de過guo濾lv根gen本ben無wu法fa實shi現xian數shu據ju的de篩shai選xuan,這zhe時shi我wo們men需xu要yao用yong到dao高gao級ji過guo濾lvAND和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供應商包含的所有值;