SQLite IN運(yùn)算符用于確定值是否匹配列表或子查詢中的任何值。 IN運(yùn)算符的語法如下:
expression [NOT] IN (value_list|subquery);
expression可以是任何有效的表達(dá)式。 它可以是表中的某一列。
值的列表(value_list)是固定值列表或子查詢返回的一列的結(jié)果集。表的返回類型和列表中的值必須相同。
IN運(yùn)算符根據(jù)表達(dá)式是否匹配值列表中的任何值,返回true或false。要查詢非列表中的值匹配,請(qǐng)使用NOT IN運(yùn)算符。
假設(shè)有一個(gè)名為STUDENT的表,并具有以下數(shù)據(jù):
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的學(xué)生信息,可參考以下語句 -
SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID IN(1,3,5);
執(zhí)行上面查詢語句,得到以下結(jié)果 -

上面的查詢語句,與下面的OR條件語句效果一樣 -
SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID = 1 OR ID=3 OR ID=5;
IN語句和子查詢
假設(shè)有一個(gè)名稱為:department的表,記錄每個(gè)學(xué)生的所在的部門。
sqlite> select id ,dept,emp_id from department;
1|財(cái)務(wù)部|1
2|技術(shù)部|2
3|技術(shù)部|3
4|市場(chǎng)部|4
5|市場(chǎng)部|5
sqlite>
其中,emp_id字段引用student表的ID字段,現(xiàn)在查詢每個(gè)分配了部門的學(xué)生的信息,參考以下語句 -
SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID IN (
SELECT emp_id FROM department );
執(zhí)行上面語句,得到如下結(jié)果 -
sqlite> select id ,dept,emp_id from department;
1|財(cái)務(wù)部|1
2|技術(shù)部|2
3|技術(shù)部|3
4|市場(chǎng)部|4
5|市場(chǎng)部|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學(xué)生的信息,參考以下語句 -
SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID NOT IN(1,3,5);
查詢那些未分配部門的學(xué)生的信息,參考以下語句 -
SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID NOT IN (
SELECT emp_id FROM department );
執(zhí)行上面查詢語句,得到以下結(jié)果 -
