旗下網站(zhàn)
s

百科知識庫

報道(dào)公司事件 · 傳播行(xíng)業動态

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

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

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

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

--檢索dbo.Products表中所有(yǒu)列,過濾條件為(wèi)由供應商king doll制(zhì)造價格大(dà)于8的所有(yǒu)商品;

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

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

OR操作(zuò)符(或)

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

--檢索dbo.Products表中所有(yǒu)列,過濾條件為(wèi)由供應商king doll制(zhì)造價格大(dà)于8的所有(yǒu)商品值;

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

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

先看個(gè)例子:檢索出價格為(wèi)8元以上(shàng),且由king doll或者Queen dool制(zhì)造的所有(yǒu)産品,我們輸入語句:

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

得(de)出結果如下圖:

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

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

這回什麽都沒了

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

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

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

第三張圖的順序是:先執行(xíng)括号裏面的,然後在執行(xíng)AND prod_price>10,在SQL數(shù)據庫中加括号的內(nèi)容系統會(huì)優先執行(xíng),由于結果隻滿足括号裏的條件,但(dàn)并不滿足括号外的條件,因為(wèi)prod_price的值是9.49小(xiǎo)于10,所以什麽數(shù)據都沒顯示。

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

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

--檢索dbo.Products表中所有(yǒu)列,過濾條件為(wèi)由供應商king doll和(hé)Queen dool制(zhì)造的商品;

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

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

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

--檢索dbo.Products表中所有(yǒu)列,過濾條件為(wèi)否定king doll供應商包含的所有(yǒu)值;

Copyright 大(dà)連網龍科技(jì) 版權所有(yǒu)   html - txt -

電(diàn)話(huà)
客服