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