組合WHERE子句
AND操作符
AND 用在WHERE子句中的關(guān)鍵字,用來(lái)指示檢索滿足所有給定條件的行
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id='DLL01' AND prod_price<=4
OR操作符
OR 用在WHERE子句中的關(guān)鍵字,用來(lái)表示檢索匹配任一給定條件的行
SELECT prod_name,prod_price FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
求值順序
例子:列出價(jià)格為10美元及以上,且由DLL01或BRS01制造的產(chǎn)品。
SELECT prod_name,prod_price,vend_id FROM products WHERE vend_id='ddl01' OR vend_id='brs01' AND prod_price>=10
SQL在處理OR操作符錢(qián),優(yōu)先處理AND操作符(在MySQL中是按從前到后的順序執(zhí)行的)。
任何時(shí)候使用具有AND和OR操作符的WHERE子句,都應(yīng)該使用圓括號(hào)明確的分組操作符。
所以規(guī)范的sql語(yǔ)句為:
SELECT prod_name,prod_price,vend_id FROM products WHERE (vend_id='ddl01' OR vend_id='brs01') AND prod_price>=10;
IN操作符
IN操作符用來(lái)指定條件范圍,范圍中的每個(gè)條件都可以進(jìn)行匹配。IN取一組由逗號(hào)分隔、括在圓括號(hào)中的合法值
SELECT prod_name,prod_price FROM products WHERE vend_id IN ('DLL01','BRS01') ORDER BY prod_name
IN操作符與OR的功能相同
SELECT prod_name,prod_price,vend_id FROM products WHERE vend_id ='DLL01' OR vend_id ='BRS01' ORDER BY 1
既然兩者功能相同,為什么還要使用IN操作符呢?其優(yōu)點(diǎn)如下:
- 在有很多合法選項(xiàng)時(shí),IN操作符的語(yǔ)法更清楚,更直觀
- 在與其他AND和OR操作符組合使用IN時(shí),求值順序更容易管理
- IN操作符一般比一組OR操作符執(zhí)行得更快
- IN的最大優(yōu)點(diǎn)是可以包含其他SELECT語(yǔ)句,能夠更動(dòng)態(tài)的建立WHERE子句
NOT操作符
NOT是WHERE子句中用來(lái)否定其后條件的關(guān)鍵字
SELECT prod_name,vend_id FROM products WHERE NOT vend_id='DLL01' ORDER BY prod_name;
上面的語(yǔ)句也可以用 <>操作符來(lái)完成:
SELECT prod_name,vend_id FROM products WHERE vend_id <> 'DLL01' ORDER BY prod_name;
SELECT prod_name,vend_id FROM products WHERE vend_id != 'DLL01' ORDER BY prod_name;
NOT在復(fù)雜的子句中會(huì)更好的體現(xiàn)。