SQL WHERE高級數據過濾

1.講解WHERE子句建立功能更強、更高級的搜索條件,將學習NOT和IN操作符
上面我們將WHERE子句在過濾數據時使用的都是單元的條件,爲了更強的過濾控制,SQL允許給出多個WHERE子句,這些自己有兩種使用方式,即AND子句或OR子句使用方式.

操作符(operator)
用來聯結或改變WHERE子句中的子句關鍵字,也稱邏輯操作符.

2.AND操作符
用來檢索滿足條件的行
要通過不止一個列進行過濾,可以使用AND操作符給WHERE子句附加條件,下面代碼給出一個列子:
SQL語句檢索有產品名字和折扣價格滿足條件的輸出.
在這裏插入圖片描述
3.OR操作符
用來表示檢索匹配任一給定的條件的行.
OR操作符與AND操作符正好相反,它指示DBMS檢索匹配任何一條件的行,事實上,許多DBMS在OR WHERE子句的第一個條件得到滿足的情況下,就不在計算第二個條件了(在第一個條件滿足時,不管第二個條件是否滿足,相應的行都將被檢索出來).

OR操作符告訴DBMS匹配任意條件而不是同時匹配兩個條件,如果這裏使用的是AND操作符,則沒有數據返回(因爲會創建沒有匹配行的WHERE子句).
在這裏插入圖片描述

4.求值順序
WHERE子句可以包含任意數目的AND和OR操作符,允許兩者結合以進行復雜、高級過濾.
我們可以看到有問題,顯然行沒有按預期的進行過濾,爲什麼?原因在於求值的順序,SQL(像多數語言一樣)在處理OR操作符前,優先處理AND操作符,當SQL看到WHERE子句時,10252價格爲30以上,以及10248的所有產品ID,而不管其價格如何,換句話說,由於AND在求值過程中優先級更高,操作符被錯誤地組合了.
在這裏插入圖片描述
我們採用圓括號對操作符進行明確分組,看下面SELECT語句及輸出:因爲AND具有比OR操作符更高的求值順序,所以DBMS首先過濾括號內的OR條件,這時,SQL語句變成了選擇由價格在30以上的所以ID.
在這裏插入圖片描述

在WHERE子句使用圓括號
任何時候使用具有AND和OR操作符的WHERE子句,都應該使用圓括號明確地分組操作,不要過分依賴默認求值順序,即使它確實如你希望的那樣.使用圓括號沒有壞處,它能消除歧義.

5.IN操作符
WHERE子句中用來指定要匹配的清單關鍵字,功能與OR相當.
IN操作符用來指定條件範圍,範圍中的每個條件都可以進行匹配,IN取一組都會分隔、括在圓括號的合法值.下面介紹這個操作符.
此SELECT語句檢索查出產品OrderID,IN操作符後跟由逗號分隔的合法值,這些值必須在括號中.

在這裏插入圖片描述
爲什麼使用IN操作符呢,其優點爲:
在有很多合法選項時,IN操作符的語法更清楚,更直觀.
在與其他AND和OR操作符組合使用IN時,求值順序更易管理.
IN操作符一般比一組OR操作符執行得更快
IN的最大優點是可以包含其他SELECT語句,能更動態地建立WHERE子句.

6.NOT操作符
WHERE子句中的NOT操作符有且只有一個功能,那就是否定其後所跟的任何條件,因爲NOT從不單獨使用(它總是與其他操作符一起使用),所以它的語法與其他操作符有所不同,NOT關鍵字可以用在要過濾的數據.

NOT
WHER子句中用來否定其後的關鍵字
列出了產品爲Chai之外的所有產品.
在這裏插入圖片描述
這裏的NOT否定跟在其後的條件,因此,DBMS不是匹配ProductName=‘Chai’,而是匹配Chai之外的所有東西.

也可以使用<>操作符來完成.
在這裏插入圖片描述
爲什麼使用NOT?這裏簡單WHERE子句,使用NOT確實沒有什麼優勢,在更復雜句子中,NOT是非常有用的,例如,在聯合IN操作符聯合使用時,NOT可以非常簡單地找出與條件列表不匹配的行.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章