mysql中in mysql中in的用法詳解

2021-10-17 06:59:59 字數 1430 閱讀 9369

一、基礎用法

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

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

mysql高階查詢in MySQL高階查詢(一)

in 子查詢 巢狀查詢 重點是思路 為什麼要用in?in 在數值上相當於 但是它可以查詢到更多的符合條件的結果,等於號只可以查詢乙個結果 question 有兩種方法 第一種 使用子查詢替換表連線 使用 inner join 將表與表之間聯動,再將實現條件依次寫出來 第二種 採用子查詢 在where...

mysql 預處理語句 in MySQL預處理語句

預製語句的sql語法基於三個sql語句 prepare stmt name from preparable stmt execute stmt name using var name var name prepare stmt name prepare語句用於預備乙個語句,並賦予它名稱stmt na...

python 中沒有i 或者i

在python中是沒有自增和自減的,但在python中存在 i i 1和 i i 1 的情況。因為python的模型規定,數值物件是不可改變的。i i 1 相當於重新建立了乙個變數 i 而不是改變了 i 中的數值。下面是例子說明 給a賦值10,給b賦值10。雖然變數名不同,但它們本質都是呼叫了10,...