本章講授如何組合WHERE子句以創建功能更強的更高級的搜索條件。 咱們還將學習如何使用NOT和IN操做符。學習
上一章介紹的WHERE子句在過濾數據時使用的都是單一條件過濾。事實上爲了數據的準確性咱們還可使用多個條件進行過濾,可使用AND子句或者OR子句的方式來完成。ui
📖 操做符(operator)spa
用來聯結或改變WHERE子句中的子句的關鍵字。也稱爲邏輯運算符。3d
下面的這個例子是使用AND操做符來給WHERE子句附加條件。code
輸入 :blog
SELECT uid, week, minute FROM products WHERE week = 1 AND minute = 22
輸出: 產品
分析:此SQL語句檢索week爲1而且minute爲22數據。搜索
📖 AND 用在WHERE子句中的關鍵字,用來指示檢索知足全部給定的條件的行。語法
上述例子中使用了只包含一個關鍵字AND的語句,把兩個過濾條件組合在一塊兒。==還能夠添加多個過濾條件,每添加一條就要使用一個AND.==方法
OR操做符和AND操做符不一樣,他指示MSQL檢索匹配任一條件的行。 輸入:
SELECT uid, week, minute FROM products WHERE week = 1 OR minute = 22
分析:檢索week爲1或者minute爲22的數據。知足一個條件便可。
SQL在處理OR操做前優先處理AND操做符。 解決方法就是使用()
輸入:
SELECR prod_name,pro_price FROM producets WHERE wend_id = 1002 OR vand_id = 1003 AND prod_price >= 10;
改爲:
SELECR prod_name,pro_price FROM producets WHERE (wend_id = 1002 OR vand_id = 1003) AND prod_price >= 10;
分析:
這條SELECT 語句 與前條的惟一差異是,這條語句中,前兩個條件用圓括號括起來。由於圓括號具備較AND或OR操做符高的計算次序,DBMS首先過濾圓括號內的OR條件。
任什麼時候候使用具備AND和OR操做符的WHERE語句,都應該使用過圓括號明確的分組操做操做符。不要過度依賴默認計算次序,即便它確實是你想要的東西也是如此
IN操做符用來指定條件範圍,範圍中的每一個條件均可以進行匹配。IN取合法值的由逗號分隔的清單,所有在圓括號中。
輸入:
SELECT prod_name , prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name
輸出:
分析:
此SELECT語句檢索供應商1002和1003製造的全部產品。IN操做符後跟又逗號分隔的合法值清單,整個清單必須擴在圓括號內。
⭐️ IN操做符和OR功能相同,但IN操做符比OR操做符執行更快
OR寫法:
SELECT prod_name , prod_price FROM products WHERE vend_id = 1002 OR vend_id =1003 ORDER BY prod_name
在使用長的合法選項清單的時,IN操做符的語法更清楚且更直觀。
在使用 IN時,計算的次序更容易管理(由於使用的操做符更少)。
IN 操做符通常比OR操做符清單執行更快。
IN 的最大的優勢是能夠包含其餘SEKECT語句,使的可以更動態的創建 WHERE 語句。
NOT操做符有且只有一個功能,那就是否認它以後所跟的任何條件。
📖 NOT WHERE子句中用來否認後跟條件的關鍵字。
使用:
列出除1002和1003以外的全部供應商製造的產品。
輸入:
SELECT prod_name , prod_price FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;
分析: 這裏的NOT 否認跟在它以後的條件,所以,MySQL不是匹配1002和1003 的vendi_id,而是匹配 1002和1003 以外供應商的vend_id.
✏️ MySQL 中的NOT
MySQL支持使用 NOT 對 IN 、 BETWEEN 和 EXISTS 子句取反,這與多數其餘DBMS容許使用NOT對各類條件取反有很大的差異。
本章講授如何用AND和OR操做符組合成WHERE子句,並且還講授瞭如 何明確地管理計算的次序,如何使用IN和NOT操做符。