MySQL |IN 操作符(13)
綜合:本章介紹如何通過 in 操作符來實現批量匹配功能,匹配形式可以是list 或者子查詢。
MySQL IN 操作符
查詢某值是否在範圍內的,與excel中的vlookup功能相同,有了此技能,你的數據能力算是到了R平方那麼多了,語法如下:
SELECT ncolumn1,column2,...nFROMntable_namenWHERE n(expr|column_1) IN (value1,value2,...);n
詳解:
- 在where語句中,可以用列名或者表達式來作為篩選元素
- 表中的值與值之間用逗號分隔
- 與where相同的使用環境 INSERT, UPDATE, DELETE, etc.
若篩選值在list中,則返回1,,否則返回0
一旦篩選值在list中,都計數:
- 首先,進行計算篩選值,一列或者表達式.
- 第二步,排序.
- 第三步,通過二進位的方式,篩選出需要的結果,因此,搜索的過程非常迅速.
若篩選值不在list中,則in操作符返回NULL
類似的,可以用not與in聯合使用,找到篩選值不在list中的情況。
實例:nSELECT nofficeCode, city, phone, countrynFROMnofficesnWHEREncountry IN (USA , France);n
1.國家是usa和france的
SELECT nofficeCode, city, phonenFROMnofficesnWHEREncountry = USA OR country = France;n
2.用OR來代替,如果list非常多呢,寫n個or,在此方面 in 比or優勢的方面。
SELECT nofficeCode, city, phonenFROMnofficesnWHEREncountry NOT IN (USA , France);n
3.不是usa和france
SELECT norderNumber, customerNumber, status, shippedDatenFROMnordersnWHEREnorderNumber IN (SELECT norderNumbernFROMnorderDetailsnGROUP BY orderNumbernHAVING SUM(quantityOrdered * priceEach) > 60000);n
4.子查詢
如上代碼可以拆分如下兩個步驟:
SELECT norderNumbernFROMnorderDetailsnGROUP BY orderNumbernHAVING SUM(quantityOrdered * priceEach) > 60000;n
收入大於60000的ordernumber,為主查詢提供in語法中的list。
SELECT norderNumber, customerNumber, status, shippedDatenFROMnordersnWHEREnorderNumber IN (10165,10287,10310);n
推薦閱讀:
※全球MySQL資料庫淪為新一輪勒索軟體攻擊目標
※MySQL中的 MyISAM 讀的效率高,InnoDB 寫的效率高,原理是什麼?(只針對這兩種存儲引擎的對比)
※PHP高並發下的數據同步的解決方法?
※用MySQL WHERE進行過濾
※pandas數據保存至Mysql資料庫