旗下(xià)網站
s

百科知識庫

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

SQL高(gāo)級過濾查詢用(yòng)法

發布日期:2018-01-08    發布者:金菊

SQL查詢語句在數據庫的(de)操作當中經常頻(pín)繁用(yòng)到,爲了(le)進行更強的(de)過濾控制,有時(shí)簡單的(de)過濾根本無法實現數據的(de)篩選,這(zhè)時(shí)我們需要用(yòng)到高(gāo)級過濾AND和(hé)OR、IN和(hé)NOT操作符。今天做(zuò)網站小編就和(hé)大(dà)家討(tǎo)論一下(xià)關于sql高(gāo)級過濾語句的(de)用(yòng)法...

語句:SELECT * FROM dbo.Products WHERE prod_name='king doll' AND prod_price>8;

--檢索dbo.Products表中所有列,過濾條件爲由供應商king doll制造價格大(dà)于8的(de)所有商品;

注意:--後面的(de)字符是這(zhè)條語句的(de)注釋,這(zhè)條語句有兩個(gè)條件,分(fēn)别用(yòng)AND關鍵字聯接在一起,并且過濾結果必須滿足這(zhè)兩個(gè)條件,如果隻滿足其中一個(gè)該數據不會被檢索出來(lái);

例如:已知供應商king doll制造商品對(duì)應的(de)價格是8元,現在把商品價格改成小于8或者供應商改成king add,結論是任何數據都不會被檢索出來(lái),因爲使用(yòng)AND操作符隻滿足一個(gè)條件是不合理(lǐ)的(de)。

OR操作符(或)

語句:SELECT * FROM dbo.Products WHERE prod_name='king doll' OR prod_price>8;

--檢索dbo.Products表中所有列,過濾條件爲由供應商king doll制造價格大(dà)于8的(de)所有商品值;

注意:--這(zhè)裏要說明(míng)的(de)是OR操作符與AND操作符的(de)不同之處是隻要滿足其中一個(gè)條件,數值就會被檢索出來(lái),例如:由供應商king doll制造價格小于8商品或者由供應商king add制造價格大(dà)于8的(de)商品隻要其中一個(gè)條件符合,數據就被檢索出來(lái);

求值順序(AND和(hé)OR混合使用(yòng))

先看個(gè)例子:檢索出價格爲8元以上,且由king doll或者Queen dool制造的(de)所有産品,我們輸入語句:

SELECT * FROM dbo.Products WHERE prod_name='king doll' OR prod_name='Queen dool' AND prod_price>8;

得(de)出結果如下(xià)圖:

現在把prod_price大(dà)于8的(de)值改成大(dà)于10,看看結果如何:

現在檢索出來(lái)的(de)值是1行,接下(xià)來(lái)在prod_name='king doll' OR prod_name='Queen dool'語句加上括号,看看結果如何:

這(zhè)回什(shén)麽都沒了(le)

現在就解釋爲什(shén)麽:其實是操作符被錯誤組合導緻的(de),因爲在數據庫系統中AND求值的(de)順序比OR的(de)求值順序更優先。

第一張圖的(de)順序是:先執行prod_name='Queen dool' AND prod_price>10的(de)數據再執行prod_name='king doll' OR prod_name='Queen dool'的(de)數據,由于第一個(gè)條件和(hé)第2條件符合所以出現兩行數值。

第二張圖的(de)順序也(yě)是:先執行prod_name='Queen dool' AND prod_price>10的(de)數據再執行prod_name='king doll' OR prod_name='Queen dool'的(de)數據,但由于第一條件不符,Queen dool對(duì)應的(de)數值沒有大(dà)于10的(de)值,所以隻出現第2個(gè)條件的(de)數據。

第三張圖的(de)順序是:先執行括号裏面的(de),然後在執行AND prod_price>10,在SQL數據庫中加括号的(de)内容系統會優先執行,由于結果隻滿足括号裏的(de)條件,但并不滿足括号外的(de)條件,因爲prod_price的(de)值是9.49小于10,所以什(shén)麽數據都沒顯示。

IN操作符(指定條件範圍)

語句:SELECT * FROM dbo.Products WHERE prod_name IN ('king doll' ,'Queen dool')

--檢索dbo.Products表中所有列,過濾條件爲由供應商king doll和(hé)Queen dool制造的(de)商品;

注意:它的(de)功能其實和(hé)OR一樣,但是它的(de)執行速度會更快(kuài)并且簡潔,最大(dà)的(de)優點是可(kě)以包含其他(tā)SELECT語句,能夠更動态地建立WHERE字句。

NOT操作符(否定其後跟的(de)任何條件)

語句:SELECT * FROM dbo.Products WHERE NOT prod_name='king doll';

--檢索dbo.Products表中所有列,過濾條件爲否定king doll供應商包含的(de)所有值;

Copyright 大(dà)連網龍科技 版權所有   html - txt -

電話(huà)
客服
目錄auth下(xià)缺少key.txt,請前往官網獲取授權