DISTINCT简介
DISTINCT 的作用是消除结果集中的重复行,语法如下:
SELECT DISTINCT
columns
FROM
table_name
WHERE
where_conditions;
需要注意的是,如果字段中有NULL值并且要对该列使用DISTINCT 子句,则MySQL仅保留一个NULL值,因为DISTINCT 子句将所有NULL值视为相同的值。
DISTINCT 多列
当DISTINCT作用在多个字段的时候,它只会将所有字段值都相同的记录“去重”掉。
DISTINCT语句与GROUP BY 语句
如果在不使用聚合函数的情况下在SELECT语句中使用GROUP BY子句,则GROUP BY子句的行为与DISTINCT 子句类似。
以下语句使用GROUP BY子句从customers表中选择客户的唯一状态。
customers表的字段:
+------------------------+
| customers |
+------------------------+
| customerNumber |
| customerName |
| contactLastName |
| contactFirstName |
| phone |
| addressLine1 |
| addressLine2 |
| city |
| state |
| postalCode |
| country |
| salesRepEmployeeNumber |
| creditLimit |
+------------------------+
> SELECT state
FROM
customers
GROUP BY state;
+---------------+
| state |
+---------------+
| NULL |
| BC |
| CA |
| Co. Cork |
| CT |
| Isle of Wight |
...
使用以下DISTINCT子句将获得同样的结果:
> SELECT DISTINCT
state
FROM
customers;
+---------------+
| state |
+---------------+
| NULL |
| NV |
| Victoria |
| CA |
| NY |
| PA |
| CT |
| MA |
...
如果将ORDER BY子句添加到使用DISTINCT子句的语句中 ,则结果集将进行排序,并且与使用GROUP BY子句的语句返回的结果集相同。
> SELECT DISTINCT
state
FROM
customers
ORDER BY state;
+---------------+
| state |
+---------------+
| NULL |
| BC |
| CA |
| Co. Cork |
| CT |
| Isle of Wight |
| MA |
...
DISTINCT 和 LIMIT子句
如果将DISTINCT 子句与LIMIT子句一起使用,MySQL会在找到LIMIT子句中指定的唯一行数时立即停止搜索。
以下是在 customers表中查询选择前五个非null唯一州。
> SELECT DISTINCT
state
FROM
customers
WHERE
state IS NOT NULL LIMIT 5;
+----------+
| state |
+----------+
| NV |
| Victoria |
| CA |
| NY |
| PA |
+----------+
更多相关文献参考《oracle distinct用法》 |