數(shù)據(jù)庫(kù)學(xué)習(xí)筆記——05高級(jí)數(shù)據(jù)過(guò)濾

組合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

and.jpg

OR操作符

OR 用在WHERE子句中的關(guān)鍵字,用來(lái)表示檢索匹配任一給定條件的行

SELECT prod_name,prod_price FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'

or.jpg

求值順序

例子:列出價(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.png

IN操作符與OR的功能相同
SELECT prod_name,prod_price,vend_id FROM products WHERE vend_id ='DLL01' OR vend_id ='BRS01' ORDER BY 1

in_or.jpg

既然兩者功能相同,為什么還要使用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;

not.png

上面的語(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)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。