IN 函數 和 and 在where條件中聯合使用的注意事項:

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));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章