來(lái)源:Coder19960227 發(fā)布時(shí)間:2018-11-24 10:11:25 閱讀量:1095
組合WHERE子句
WHERE子句在過(guò)濾數(shù)據(jù)時(shí)使用的都是單一的條件。為了進(jìn)行更強(qiáng)的過(guò)濾控制, MySQL允許給出多個(gè)WHERE子句。這些子句可以兩種方式使用:以AND子句的方式或OR子句的方式使用。
操作符(operator) 用來(lái)聯(lián)結(jié)或改變WHERE子句中的子句的關(guān)鍵字。也稱為邏輯操作符( logical operator) 。
AND操作符
為了通過(guò)不止一個(gè)列進(jìn)行過(guò)濾,可使用AND操作符給WHERE子句附加條件。
SELECT vend_id,prod_price FROM products WHERE vend_id = ‘DLL01’ AND prod_price = 3.49;
OR操作符
OR操作符與AND操作符不同,它指示MySQL檢索匹配任一條件的行.
分析:此SQL語(yǔ)句檢索由任一個(gè)指定供應(yīng)商制造的所有產(chǎn)品的產(chǎn)品名和價(jià)格。 OR操作符告訴DBMS匹配任一條件而不是同時(shí)匹配兩個(gè)條件。如果這里使用的是AND操作符,則沒有數(shù)據(jù)返回(此時(shí)創(chuàng)建
的WHERE子句不會(huì)檢索到匹配的產(chǎn)品)。
SELECT vend_id FROM products WHERE vend_id = ‘DLL01’ OR vend_id =‘BRS01’;
SELECT vend_id FROM products WHERE vend_id = ‘DLL01’ AND vend_id =‘BRS01’;
計(jì)算次序
WHERE可包含任意數(shù)目的AND和OR操作符。允許兩者結(jié)合以進(jìn)行復(fù)雜和高級(jí)的過(guò)濾。
需要列出價(jià)格為3.49美元(含)以上且由1002或1003制造的所有產(chǎn)品。下面的SELECT語(yǔ)句使用AND和OR操作符的組合建立了一個(gè)WHERE子句:
原因在于計(jì)算的次序。 SQL(像多數(shù)語(yǔ)言一樣)在處理OR操作符前,優(yōu)先處理AND操作符。當(dāng)SQL看到上述WHERE子句時(shí),它理解為由供應(yīng)商DLL01制造的任何價(jià)格為5.99美元(含)以上的產(chǎn)品,或者由供應(yīng)商BRS01制造的任何產(chǎn)品,而不管其價(jià)格如何。換句話說(shuō),由于AND在計(jì)算次序中優(yōu)先級(jí)更高,操作符被錯(cuò)誤地組合了
錯(cuò)誤實(shí)例
SELECT vend_id,prod_name,prod_price FROM products WHERE vend_id = ‘DLL01’ OR vend_id =‘BRS01’ AND prod_price >= 5.99;
解決方法是使用圓括號(hào)明確地分組相應(yīng)的操作符
前兩個(gè)條件用圓括號(hào)括了起來(lái)。因?yàn)閳A括號(hào)具有較AND或OR操作符高的計(jì)算次序, DBMS首先過(guò)濾圓括號(hào)內(nèi)的OR條件。這時(shí), SQL語(yǔ)句變成了選擇由供應(yīng)商DLL01或BRS01制造的且價(jià)格都在5.99美元(含)以上的任何產(chǎn)品
SELECT vend_id,prod_name,prod_price FROM products WHERE (vend_id = ‘DLL01’ OR vend_id =‘BRS01’) AND prod_price >= 5.99;
注意:在WHERE子句中使用圓括號(hào) 任何時(shí)候使用具有AND和OR操作符的WHERE子句,都應(yīng)該使用圓括號(hào)明確地分組操作符。不要過(guò)分依賴默認(rèn)計(jì)算次序,即使它確實(shí)是你想要的東西也是如此。使用圓括號(hào)沒有什么壞處,它能消除歧義。
IN操作符
IN操作符用來(lái)指定條件范圍,范圍中的每個(gè)條件都可以進(jìn)行匹配。 IN取合法值的由逗號(hào)分隔的清單,全都括在圓括號(hào)中。
注意:IN和OR的左右差不多
優(yōu)點(diǎn):
1在使用長(zhǎng)的合法選項(xiàng)清單時(shí), IN操作符的語(yǔ)法更清楚且更直觀。
2 在使用IN時(shí),計(jì)算的次序更容易管理(因?yàn)槭褂玫牟僮鞣伲?/span>
3 IN操作符一般比OR操作符清單執(zhí)行更快。
4 IN的最大優(yōu)點(diǎn)是可以包含其他SELECT語(yǔ)句,使得能夠更動(dòng)態(tài)地建
立WHERE子句。
NOT操作符
WHERE子句中的NOT操作符有且只有一個(gè)功能,那就是否定它之后所跟的任何條件。
MySQL不是匹配DLL01和 BRS01的 vend_id , 而 是 匹 配DLL01和 BRS01之 外 供 應(yīng) 商 的vend_id。
SELECT vend_id,prod_name,prod_price FROM products WHERE vend_id NOT in (‘DLL01’,‘BRS01’) ORDER BY prod_name;
---------------------
在線
客服
服務(wù)時(shí)間:周一至周日 08:30-18:00
選擇下列產(chǎn)品馬上在線溝通:
客服
熱線
7*24小時(shí)客服服務(wù)熱線
關(guān)注
微信
關(guān)注官方微信