Skip to main content

SQLite SELECT DISTINCT-删除结果集中的重复项

SQLite SELECT DISTINCT子句简介

DISTINCT子句是SELECT语句的可选子句。DISTINCT子句允许删除结果集中的重复行。

下面的语句说明了DISTINCT子句的语法:

SELECT DISTINCT select_list
FROM table;

在这种语法中:

SQLite认为空值是重复的。如果将DISTINCT子句用于具有空值的列,SQLite将保留一行空值。

在数据库理论中,如果一列包含空值,这意味着我们没有关于该列特定记录的信息,或者该信息不适用。

例如,如果客户的电话号码为空值,这意味着我们在记录客户信息时没有关于客户电话号码的信息,或者客户可能根本没有电话号码。

SQLite选择不同的例子

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

customers

假设您想知道客户所在的城市,可以使用SELECT语句从customers表的city列获取数据,如下所示:

SELECT city
FROM customers
ORDER BY city;

试试看

SQLite without DISTINCT

它返回59行。几乎没有重复行,如Berlin London和Mountain View要删除这些重复行,请使用DISTINCT子句,如下所示:

SELECT DISTINCT city
FROM customers
ORDER BY city;

试试看

SQLite DISTINCT example

它返回53行,因为DISTINCT子句删除了6个重复行。

SQLite在多个列上选择DISTINCT

以下声明查找所有客户所在的城市和国家/地区。

SELECT
city,
country
FROM
customers
ORDER BY
country;

试试看

SQLite DISTINCT multiple columns

结果集包含重复的城市和国家,如上图所示的巴西圣保罗。

要删除重复的城市和国家,请对城市和国家列应用DISTINCT子句,如以下查询所示:

SELECT  DISTINCT
city,
country
FROM
customers
ORDER BY
country;

以下是部分输出:

SQLite SELECT DISTINCT multiple columns

如前所述,SQLite使用城市和国家的组合来评估副本。

SQLite SELECT DISTINCT带有空示例

此语句从customers表中返回客户的公司名称。

SELECT company
FROM customers;

试试看

它返回59行,其中包含许多空值。

现在,如果对语句应用DISTINCT子句,它将只保留一行NULL值。

见以下声明:

SELECT DISTINCT company
FROM customers;

试试看

SQLite SELECT with DISTINCT NULL values

该语句返回11行,其中一个值为空。

请注意,如果从表中选择列列表,并希望获得某些列的唯一组合,则可以使用GROUP BY子句。

在本教程中,您学习了如何使用SQLite SELECT DISTINCT子句从结果集中删除重复行。