一、基礎用法
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 子句可以被用於強制...