mysql中in的用法詳解

2021-09-23 23:45:58 字數 1617 閱讀 1160

一、基礎用法

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')
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 運算子的。

2.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 子句可以被用於強制...