SQLite IN
運算子用於確定值是否匹配列表或子查詢中的任何值。 IN
運算子的語法如下:
expression [NOT] IN (value_list|subquery);
expression
可以是任何有效的表示式。 它可以是表中的某一列。
值的列表(value_list
)是固定值列表或子查詢返回的一列的結果集。表的返回型別和列表中的值必須相同。
IN
運算子根據表示式是否匹配值列表中的任何值,返回true
或false
。要查詢非列表中的值匹配,請使用NOT 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為1
,3
,5
的學生資訊,可參考以下語句 -
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
不是1
,3
,5
學生的資訊,參考以下語句 -
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 );
執行上面查詢語句,得到以下結果 -