Skip to main content

SQLite IN:确定一个值与列表中的任何值匹配

SQLite IN操作符简介

SQLite IN运算符确定一个值是否匹配列表或子查询中的任何值。IN运算符的语法如下所示:

expression [NOT] IN (value_list|subquery);

表达式可以是任何有效的表达式或表的列。

值列表是固定值列表或子查询返回的单个列的结果集。返回的表达式类型和列表中的值必须相同。

IN运算符返回true或false,具体取决于表达式是否匹配值列表中的任何值。要对值列表求反,请使用NOT IN运算符。

操作符示例中的SQLite

我们将使用示例数据库中的Tracks表进行演示。

下面的语句使用IN运算符查询媒体类型id为1或2的曲目。

SELECT
TrackId,
Name,
Mediatypeid
FROM
Tracks
WHERE
MediaTypeId IN (1, 2)
ORDER BY
Name ASC;

试试看

SQLite IN Operator

此查询使用OR运算符而不是IN运算符返回与上述查询相同的结果集:

SELECT
TrackId,
Name,
MediaTypeId
FROM
Tracks
WHERE
MediaTypeId = 1 OR MediaTypeId = 2
ORDER BY
Name ASC;

试试看

从查询中可以看出,使用IN运算符要短得多。

如果你有一个使用很多或操作符的查询,你可以考虑使用IN运算符来让查询更可读。

SQLite IN运算符和子查询示例

以下查询返回艺术家id 12的唱片集id列表:

SELECT albumid
FROM albums
WHERE artistid = 12;

试试看

SQLite IN with subquery example

要获取属于艺术家id 12的曲目,可以将IN运算符与子查询组合,如下所示:

SELECT
TrackId,
Name,
AlbumId
FROM
Tracks
WHERE
AlbumId IN (
SELECT
AlbumId
FROM
Albums
WHERE
ArtistId = 12
);

试试看

SQLite IN subquery example

在本例中:

SQLite不在示例中

下面的语句返回流派id不在(1,2,3)列表中的曲目列表。

SELECT
trackid,
name,
genreid
FROM
tracks
WHERE
genreid NOT IN (1, 2,3);

试试看

SQLite NOT IN example

在本教程中,您学习了如何使用SQLite In运算符将值与值列表或子查询匹配。