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資料庫

TAG:MySQL | R编程语言 |