組合Where子句
為了進行更強的過濾控制赦抖,MySQL允許給出多個WHERE子句。這些子句可以兩種方式使用:以AND子句的方式或OR子句的方式使用
操作符
AND操作符
可使用AND操作符給WHERE子句附加條件赋除,AND 用在WHERE子句中的關(guān)鍵字欲账,用來指示檢索滿足所有給定條件的行。
舉例:查詢年齡在13到18之間數(shù)據(jù)
輸入:
SELECT * FROM Test.student s WHERE s.age <18 AND s.age >13
輸出:
OR 操作符
OR操作符與AND操作符不同剪芍,它指示MySQL檢索匹配任一條件的行
舉例:查詢滿足 大于18和小于15的值
輸入:
SELECT * FROM Test.student s WHERE s.age >18 OR s.age <15
輸出:
計算次序
基礎(chǔ)數(shù)據(jù):
-
舉例:查詢數(shù)值小于等于15且姓名叫“王一”
輸出:
輸入:SELECT * FROM Test.student s WHERE s.age >15 or s.age =15 AND s.name ='王一'
image.png
分析:上面的結(jié)果返劲,查詢出的信息中存在姓名不等于“王一”的玲昧,過濾未生效,原因在于計算次序篮绿,SQL語句在處理“OR”操作符前,優(yōu)先處理“AND”語句孵延,上面的語句理解【獲取姓名為王一,且年齡等于15歲亲配,或者 年齡大于15對的所有數(shù)據(jù)】
-
舉例:使用括號尘应,查詢數(shù)值小于等于15且姓名叫“王一”
輸出:
輸入:SELECT * FROM Test.student s WHERE (s.age =15 or s.age >15) AND s.name ='王一'
image.png
分析:這條SELECT語句與前一條的唯一差別是,這條語句中吼虎,前兩個條件用圓括號括了起來犬钢。因為圓括號具有較AND或OR操作符高的計算次序,DBMS首先過濾圓括號內(nèi)的OR條件
IN操作符
圓括號在WHERE子句中還有另外一種用法鲸睛。IN操作符用來指定條件范圍娜饵,范圍中的每個條件都可以進行匹配坡贺。IN取合法值的由逗號分隔的清單官辈,全都括在圓括號中。
-
舉例:
輸出:
輸入1:SELECT * FROM Test.student s WHERE s.age =15 or s.age >20
輸入2:SELECT * FROM Test.student s WHERE s.age IN (15,20)
image.png
分析:上面兩條結(jié)束是相同的遍坟,使用IN優(yōu)點
1.在使用長的合法選項清單時拳亿,IN操作符的語法更清楚且更直觀
2.在使用IN時,計算的次序更容易管理(因為使用的操作符更少
3.IN操作符一般比OR操作符清單執(zhí)行更快
4.IN的最大優(yōu)點是可以包含其他SELECT語句愿伴,使得能夠更動態(tài)地建立WHERE子句
NOT操作符
Where 子句中NOT操作符有且只有一個功能,那就是否定它之后所跟的任何條件
注釋:
MySQL中的NOT MySQL支持使用NOT對IN肺魁、BETWEEN和EXISTS子句取反,這與多數(shù)其他DBMS允許使用NOT對各種條件取反有很大的差別隔节。
-
舉例1:
輸出:
分析:獲取年齡不等于15和10的數(shù)據(jù)
輸入:SELECT * FROM Test.student s WHERE s.age NOT IN (15,20)
image.png
-
舉例2:
輸出:
輸入:SELECT * FROM Test.student s WHERE s.age NOT BETWEEN 15 AND 20
image.png