IN 函數一般在 where 條件中使用。使用的方法爲:
SELECT columns
FROM tables
WHERE column1 in (value1, value2, .... value_n);
當where 條件中 IN 函數 和 and 一起使用的時候,需要特別的注意:
先思考一下下列兩個語句的查詢結果是否一樣
SELECT columns FROM tables WHERE column1 in (value1, value2, .... value_n) AND column2 ='column2';
和
SELECT columns FROM tables WHEREcolumn2 ='column2' AND column1 in (value1, value2, .... value_n);
有的人認爲:兩個條件取並集,與條件的先後關係沒有關係,結果應該是一樣的。
這種想法是錯誤的,上面兩個語句的結果是不一樣的。
IN函數的實質是什麼? 一堆OR條件組合的簡略形式。
clumn1 =value1 OR column1=value2 OR…… OR column = value_n 等於 column1 in (value1, value2, .... value_n);
說白了,IN函數只是有助於減少OR條件的複合使用。
當把上述兩個語句還原:
SELECT columns FROM tables
WHERE clumn1 =value1 OR column1=value2 OR…… ORcolumn = value_n AND column2 ='column2';
和
SELECT columns FROM tables
WHERE column2 ='column2' AND clumn1 =value1 OR column1=value2 OR…… OR column = value_n;
根據 OR 和 AND 的執行順序,先執行AND,然後執行OR。
第一個語句先執行column = value_n AND column2 ='column2';獲取的值和前面的條件取或值。
第二個語句先執行column2 ='column2' AND clumn1 =value1;獲取的值和後面的條件取或值。
column2 ='column2' AND clumn1 =value1 和 column2 ='column2' AND clumn1 =value1 獲取的值肯定不同。
所以要實現取 IN函數 和其他條件的並集,只需要在 IN函數 外面添加"()"即可。下面的查詢語句的結果是一樣的。
SELECT columns FROM tables WHERE(column1 in (value1, value2, .... value_n)) AND column2 ='column2';
和
SELECT columns FROM tables WHERE column2 ='column2' AND(column1 in (value1, value2, .... value_n));