SQLite IN運算子


SQLite IN運算子用於確定值是否匹配列表或子查詢中的任何值。 IN運算子的語法如下:

expression [NOT] IN (value_list|subquery);

expression可以是任何有效的表示式。 它可以是表中的某一列。

值的列表(value_list)是固定值列表或子查詢返回的一列的結果集。表的返回型別和列表中的值必須相同。

IN運算子根據表示式是否匹配值列表中的任何值,返回truefalse。要查詢非列表中的值匹配,請使用NOT IN運算子。

SQLite IN運算子範例

假設有一個名為STUDENT的表,並具有以下資料:

sqlite> SELECT * FROM STUDENT ;
1|Maxsu|27|Shengzheng|20000.0
2|Minsu|25|Beijing|15000.0
3|Avgsu|23|Shanghai|2000.0
4|Linsu|25|Guangzhou|65000.0
5|Sqlsu|26|Hainan|25000.0
6|Javasu|21|Shengzheng|18000.0
sqlite>

若要查詢ID為135的學生資訊,可參考以下語句 -

SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID IN(1,3,5);

執行上面查詢語句,得到以下結果 -

上面的查詢語句,與下面的OR條件語句效果一樣 -

SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID = 1 OR ID=3 OR ID=5;

IN語句和子查詢

假設有一個名稱為:department的表,記錄每個學生的所在的部門。

sqlite> select id ,dept,emp_id from department;
1|財務部|1
2|技術部|2
3|技術部|3
4|市場部|4
5|市場部|5
sqlite>

其中,emp_id欄位參照student表的ID欄位,現在查詢每個分配了部門的學生的資訊,參考以下語句 -

SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID IN (
    SELECT emp_id FROM  department );

執行上面語句,得到如下結果 -

sqlite> select id ,dept,emp_id from department;
1|財務部|1
2|技術部|2
3|技術部|3
4|市場部|4
5|市場部|5
sqlite>
sqlite> SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID IN (
   ...>     SELECT emp_id FROM  department );
1|27|Maxsu|Shengzhen
2|25|Minsu|Beijing
3|23|Avgsu|Shanghai
4|25|Linsu|Guangzhou
5|26|Sqlsu|Haikou
sqlite>

SQLite NOT IN範例

查詢那些ID不是135學生的資訊,參考以下語句 -

SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID NOT IN(1,3,5);

查詢那些未分配部門的學生的資訊,參考以下語句 -

SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID NOT IN (
    SELECT emp_id FROM  department );

執行上面查詢語句,得到以下結果 -