MySQL Distinct 语句用于从 SELECT 语句中指定的列中检索唯一行(通过删除重复的行)。
Select Distinct 在 MySQL 中的基本语法可写如下。
SELECT DISTINCT [Columns] FROM Source WHERE Conditions -- This is Optional
- DISTINCT:此关键字返回唯一列。
- Columns:它允许我们选择要从表中使用的列数。可以是一列或多列。
- Source:它可以是数据库中的一个或多个表。使用 Joins 来组合多个表。
我们将使用下面显示的数据来通过示例解释 Select Distinct。

MySQL Select Distinct 单列
在此 Distinct 单列示例中,我们将从 Education 列中选择唯一记录。在获取唯一记录之前,我将选择 education 列中的所有记录。
USE company; SELECT Education FROM customerdetails;

现在,我将在 SELECT 语句中使用此关键字。
USE company; SELECT DISTINCT Education FROM customerdetails;

MySQL Select Distinct 多列
当我们在多列上使用 Distinct 时,SELECT 语句将写出多列的唯一组合,而不是唯一的单个记录。
在此 MySQL 示例中,我们将选择 Education 列和 Profession 列中存在的唯一记录。
USE company; SELECT DISTINCT Education, Profession FROM customerdetails ORDER BY Education, Profession;

尽管我们在 SELECT 语句中使用了 Distinct 关键字。从上面的屏幕截图可以看出,它返回了重复项,因为
- Bachelors 和 Developer 是唯一的组合。
- Bachelors 和 Programming 是唯一的组合,依此类推。
Distinct WHERE 子句示例
在此示例中,我们将展示如何将此语句与 WHERE 子句一起使用。以下语句从年收入大于或等于 85000 的 customers 表中返回唯一的 Education、Profession。
USE company; SELECT DISTINCT Education, Profession FROM customerdetails WHERE Yearly_Income > 85000;

尽管 Education 和 Professional 列组合有 13 条唯一记录。有 10 条记录不符合 WHERE 子句中的条件。这就是为什么下面的屏幕截图显示 5 条记录。
注意:它将 NULL 记录视为有效的唯一记录。因此,请使用任何 Not Null 函数来删除 NULLS。
MySQL Distinct 与 Group By 的区别
Select Distinct 的行为继承自 Group By。如果您在没有任何聚合函数的情况下使用 Group By 子句,那么它的作用就像 Distinct 关键字。它们之间唯一的区别是
- Group By 先对数据进行排序,然后执行分组。
- 此关键字不执行任何排序。
如果将此关键字与 Order By 一起使用,那么它的结果与 Group By 相同。以下语句从客户详细信息中返回唯一的 Profession 值。
USE company; SELECT DISTINCT Profession FROM customerdetails;

让我删除关键字并使用 Group By 子句
USE company; SELECT Profession FROM customerdetails GROUP BY Profession;
可以看到,它们返回相同的结果,但顺序不同。

这次,我将此关键字与 Order By 一起使用。
USE company; SELECT DISTINCT Profession FROM customerdetails ORDER BY Profession ASC;
可以看到,它返回的结果与 Group By 相同。

使用 Order By 子句选择唯一行
让我向您展示如何在命令提示符中使用 Order By 子句选择不同的记录。在这里,我们从 customer 详细信息列中选择不同的 Education 和 profession 记录。
USE company; SELECT DISTINCT Education, Profession FROM customerdetails ORDER BY Education ASC, Profession ASC;
