mysql中in的用法詳解

2021-10-13 13:02:53 字數 1558 閱讀 1141

一、基礎用法

mysql中in常用於where表示式中,其作用是查詢某個範圍內的資料。

select * from where field in (value1,value2,value3,…)

當 in 前面加上 not 運算子時,表示與 in 相反的意思,即不在這些列表項內選擇

select * from where field not in (value1,value2,value3,…)

二、in 子查詢

select * from article where uid in(select uid from user where status=0)

select uid from user where status=0

然後將查詢結果作為 in 的列表項以實現最終的查詢結果,注意在子查詢中返回的結果必須是乙個字段列表項。

在in的子查詢中常常會遇到查詢效率太低問題,解決方法如下:

1、仍使用in子查詢,多查詢一次

select * from basic_zdjbxx where suiji in ( select zdcode from ( select zdcode from basic_h where zdcode != 「」 ) as h )

2、使用left join

select zd.* from ( select distinct zdcode from basic_h where zdcode != 「」 ) as h left join basic_zdjbxx zd on zd.suiji = h.zdcode

三、in 運算子補充說明

in 列表項不僅支援數字,也支援字元甚至時間日期型別等,並且可以將這些不同型別的資料項混合排列而無須跟 column 的型別保持一致:

select * from user where uid in(1,2,『3』,『c』)

乙個 in 只能對乙個字段進行範圍比對,如果要指定更多字段,可以使用 and 或 or 邏輯運算子:

select * from user where uid in(1,2) or username in(『admin』,『manong』)

使用 and 或 or 邏輯運算子後,in 還可以和其他如 like、>=、= 等運算子一起使用。

四、關於 in 運算子的效率問題

如果 in 的列表項是確定的,那麼可以用多個 or 來代替:

select * from user where uid in (2,3,5)

// 等效為:

select * from user where (uid=2 or aid=3 or aid=5)

一般認為:

1、如果是對索引字段進行操作,使用 or 效率高於 in,但對於列表項不確定的時候(如需要子查詢得到結果),就必須使用 in 運算子。另外,對於子查詢表資料小於主查詢的時候,也是適用 in 運算子的。

in或or在字段沒有新增索引的情況下,所連線的字段越多(1 or 2 or 3 or 4 or…),or比in的查詢效率低很多

mysql中in的用法詳解

一 基礎用法 mysql中in常用於where表示式中,其作用是查詢某個範圍內的資料。select from where field in value1,value2,value3,當 in 前面加上 not 運算子時,表示與 in 相反的意思,即不在這些列表項內選擇 select from whe...

Mysql中limit的用法詳解

mysql中limit的用法 在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行資料,這個時候怎麼辦呢?不用擔心,mysql已經為我們提供了這樣乙個功能。select from table limit offset,rows rows offset offset limit 子句可以被用於強制...

Mysql中limit的用法詳解

mysql中limit的用法 在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行資料,這個時候怎麼辦呢?不用擔心,mysql已經為我們提供了這樣乙個功能。select from table limit offset,rows rows offset offset limit 子句可以被用於強制...