在本教程中,您将学习如何使用MySQL DISTINCT子句与SELECT语句一起组合来消除结果集中的重复行。

1. MySQL DISTINCT子句简介

从表中查询数据时,可能会收到重复的行记录。为了删除这些重复行,可以在SELECT语句中使用DISTINCT子句。

DISTINCT子句的语法如下:

SELECT DISTINCT columns FROM table_name WHERE where_conditions;

2. MySQL DISTINCT示例

下面来看看一个使用DISTINCT子句从employees表中选择员工的唯一姓氏(lastName)的简单示例。

首先,使用SELECT语句从employees表中查询员工的姓氏(lastName),如下所示:

SELECT lastname FROM employees ORDER BY lastname;

执行上面查询语句,得到以下结果 –

mysql> SELECT lastname FROM employees ORDER BY lastname; +-----------+ | lastname | +-----------+ | Bondur | | Bondur | | Bott | | Bow | | Castillo | | Firrelli | | Firrelli | | Fixter | | Gerard | | Hernandez | | Jennings | | Jones | | Kato | | King | | Marsh | | Murphy | | Nishi | | Patterson | | Patterson | | Patterson | | Thompson | | Tseng | | Vanauf | +-----------+ 23 rows in set

可看到上面结果中,有好些结果是重复的,比如:Bondur,Firrelli等,那如何做到相同的结果只显示一个呢?要删除重复的姓氏,请将DISTINCT子句添加到SELECT语句中,如下所示:

SELECT DISTINCT lastname FROM employees ORDER BY lastname;

执行上面查询,得到以下输出结果 –

mysql> SELECT DISTINCT lastname FROM employees ORDER BY lastname; +-----------+ | lastname | +-----------+ | Bondur | | Bott | | Bow | | Castillo | | Firrelli | | Fixter | | Gerard | | Hernandez | | Jennings | | Jones | | Kato | | King | | Marsh | | Murphy | | Nishi | | Patterson | | Thompson | | Tseng | | Vanauf | +-----------+ 19 rows in set

当使用DISTINCT子句时,重复的姓氏(lastname)在结果集中被消除。

3. MySQL DISTINCT和NULL值

如果列具有NULL值,并且对该列使用DISTINCT子句,MySQL将保留一个NULL值,并删除其它的NULL值,因为DISTINCT子句将所有NULL值视为相同的值。

例如,在customers表中,有很多行的州(state)列是NULL值。 当使用DISTINCT子句来查询客户所在的州时,我们将看到唯一的州和NULL值,如下查询所示:

SELECT DISTINCT state FROM customers;

执行上面查询语句后,输出结果如下 –

mysql> SELECT DISTINCT state FROM customers; +---------------+ | state | +---------------+ | NULL | | NV | | Victoria | | CA | | NY | | PA | | CT | | MA | | Osaka | | BC | | Qubec | | Isle of Wight | | NSW | | NJ | | Queensland | | Co. Cork | | Pretoria | | NH | | Tokyo | +---------------+ 19 rows in set

4. MySQL DISTINCT在多列上的使用

可以使用具有多个列的DISTINCT子句。 在这种情况下,MySQL使用所有列的组合来确定结果集中行的唯一性。

例如,要从customers表中获取城市(city)和州(state)的唯一组合,可以使用以下查询:

SELECT DISTINCT state, city FROM customers WHERE state IS NOT NULL ORDER BY state , city;

执行上面查询,得到以下结果 –

mysql> SELECT DISTINCT state, city FROM customers WHERE state IS NOT NULL ORDER BY state ,city; +---------------+----------------+ | state | city | +---------------+----------------+ | BC | Tsawassen | | BC | Vancouver | | CA | Brisbane | | CA | Burbank | | CA | Burlingame | | CA | Glendale | | CA | Los Angeles | | CA | Pasadena | | CA | San Diego | | CA | San Francisco | | CA | San Jose | | CA | San Rafael | | Co. Cork | Cork | | CT | Bridgewater | | CT | Glendale | | CT | New Haven | | Isle of Wight | Cowes | | MA | Boston | | MA | Brickhaven | | MA | Cambridge | | MA | New Bedford | | NH | Nashua | | NJ | Newark | | NSW | Chatswood | | NSW | North Sydney | | NV | Las Vegas | | NY | NYC | | NY | White Plains | | Osaka | Kita-ku | | PA | Allentown | | PA | Philadelphia | | Pretoria | Hatfield | | Qubec | Montral | | Queensland | South Brisbane | | Tokyo | Minato-ku | | Victoria | Glen Waverly | | Victoria | Melbourne | +---------------+----------------+ 37 rows in set

没有DISTINCT子句,将查询获得州(state)和城市(city)的重复组合如下:

SELECT state, city FROM customers WHERE state IS NOT NULL ORDER BY state , city;

执行上面查询,得到以下结果 –

5. DISTINCT子句与GROUP BY子句比较

如果在SELECT语句中使用GROUP BY子句,而不使用聚合函数,则GROUP BY子句的行为与DISTINCT子句类似。

以下语句使用GROUP BY子句来选择customers表中客户的唯一state列的值。

SELECT state FROM customers GROUP BY state;

执行上面查询,得到以下结果 –

mysql> SELECT state FROM customers GROUP BY state; +---------------+ | state | +---------------+ | NULL | | BC | | CA | | Co. Cork | | CT | | Isle of Wight | | MA | | NH | | NJ | | NSW | | NV | | NY | | Osaka | | PA | | Pretoria | | Qubec | | Queensland | | Tokyo | | Victoria | +---------------+ 19 rows in set

可以通过使用DISTINCT子句来实现类似的结果:

mysql> SELECT DISTINCT state FROM customers; +---------------+ | state | +---------------+ | NULL | | NV | | Victoria | | CA | | NY | | PA | | CT | | MA | | Osaka | | BC | | Qubec | | Isle of Wight | | NSW | | NJ | | Queensland | | Co. Cork | | Pretoria | | NH | | Tokyo | +---------------+ 19 rows in set

一般而言,DISTINCT子句是GROUP BY子句的特殊情况。 DISTINCT子句和GROUP BY子句之间的区别是GROUP BY子句可对,而DISTINCT子句不进行排序。

如果将添加到使用DISTINCT子句的语句中,则结果集将被排序,并且与使用GROUP BY子句的语句返回的结果集相同。

SELECT DISTINCT state FROM customers ORDER BY state;

执行上面查询,得到以下结果 –

mysql> SELECT DISTINCT state FROM customers ORDER BY state; +---------------+ | state | +---------------+ | NULL | | BC | | CA | | Co. Cork | | CT | | Isle of Wight | | MA | | NH | | NJ | | NSW | | NV | | NY | | Osaka | | PA | | Pretoria | | Qubec | | Queensland | | Tokyo | | Victoria | +---------------+ 19 rows in set

6. MySQL DISTINCT和聚合函数

可以使用具有(例如,和)的DISTINCT子句中,在MySQL将聚合函数应用于结果集之前删除重复的行。

例如,要计算美国客户的唯一state列的值,可以使用以下查询:

SELECT COUNT(DISTINCT state) FROM customers WHERE country = 'USA';

执行上面查询,得到以下结果 –

mysql> SELECT COUNT(DISTINCT state) FROM customers WHERE country = 'USA'; +-----------------------+ | COUNT(DISTINCT state) | +-----------------------+ | 8 | +-----------------------+ 1 row in set

7. MySQL DISTINCT与LIMIT子句

如果要将DISTINCT子句与一起使用,MySQL会在查找LIMIT子句中指定的唯一行数时立即停止搜索。

以下查询customers表中的前3个非空(NOT NULL)唯一state列的值。

mysql> SELECT DISTINCT state FROM customers WHERE state IS NOT NULL LIMIT 3; +----------+ | state | +----------+ | NV | | Victoria | | CA | +----------+ 3 rows in set

在本教程中,我们学习了使用MySQL DISTINCT子句的各种方法,例如消除重复行和计数非NULL值。

¥ 我要打赏 纠错/补充 收藏

mysql语句distinct_MySQL DISTINCT语句相关推荐

  1. mysql php distinct_mysql distinct用法是什么

    mysql中去重 distinct 用法 在使用mysql时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用disti ...

  2. SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句

    文章目录 1SQL语法 1.1 SELECT 语句 1.1.1SQL SELECT 语句 1.1.2SQL SELECT 语法 1.2DISTINCT 语句 1.2.1 DISTINCT 的作用 1. ...

  3. mysql中distinct走索引吗_MySQL中索引优化distinct语句及distinct的多字段操作

    MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用 ...

  4. MySQL数据库:SQL语句

    MySql数据库系列阅读 MySQL数据库 MySQL数据库:SQL语句 MySQL数据库:完整性约束 MySQL数据库备份与还原 MySQL数据库:编码 1. SQL概述 1.1 什么是SQL SQ ...

  5. mysql 查询 distinct_MYSQL查询数据(二)SELECT | DISTINCT

    MySQL SELECT语句简介 SELECT语句允许您从表或视图获取数据.像电子表格一样,表由行和列组成.通常,您需要查看表中的数据.这时候你可以使用mysql数据库中的select语句进行查询数据 ...

  6. MySQL的一些简单语句

    mysql 统计 表的数量:SELECT COUNT(1) FROM information_schema.TABLES WHERE TABLE_SCHEMA = '你的数据库'; MySQL的一些基 ...

  7. Datawhale MySQL 训练营 Task2 查询语句

    目录 MySQL 管理 MySQL 用户管理 参考 数据库管理 SQ查询语句 1. 导入示例数据库,教程 MySQL导入示例数据库 2. 查询语句 SELECT 3. 筛选语句 WHERE ,过滤 4 ...

  8. SQL(基于MySQL)—— 常用查询语句

    一.查询数值型数据:   SELECT * FROM tb_name WHERE sum > 100;   查询谓词:>,=,<,<>,!=,!>,!<,=& ...

  9. mysql下删改增语句_MySQL增删改查

    以下是MySQL最基本的增删改查语句,很多IT工作者都必须要会的命令,也是IT行业面试最常考的知识点,由于是入门级基础命令,所有所有操作都建立在单表上,未涉及多表操作. 前提:在进行"增删改 ...

最新文章

  1. 使用AD9833谐波发送调频广播
  2. 2007年下半年软考:网络工程师考试试题分析
  3. linux zsh命令行vim命令补齐,Linux使用zsh提高效率的5条建议
  4. 查看Windows系统里的进程已运行的时间
  5. 【论文解读】SIGIR 2020 | 超越用户embedding矩阵:用哈希对大型用户建模
  6. 笔记·mybatis核心对象和全局配置文件
  7. Java方法中的参数太多,第7部分:可变状态
  8. Python3 爬虫学习笔记 C03 【Ajax 数据爬取】
  9. 非关系型数据库--MongoDB
  10. linux 提高代码质量的工具
  11. 2)MFC对话框程序设计
  12. AxureShare太慢?尝试在内网架设Axure共享吧!
  13. 织梦dede仿站模板标签大全(最全)附带仿站工具
  14. 新概念英语第二册课文电子版_新概念英语第二册:课文+音频+教学视频合集(可下载)...
  15. Matlab对圆环进行N等分
  16. windows10磁盘100%解决方法
  17. 翻遍“微信小程序”的所有知乎问答,我们整理了大家最关注几个话题
  18. 值得学习的C/C++开源项目
  19. 解决XAMPP中无法勾选/无服务/modules无反应/Service灰框/无✓X/提供虚拟服务器
  20. 亚马逊国际站获取商品列表

热门文章

  1. Loadrunner11破解详解 .
  2. Android 使用ViewPager实现基本的翻页效果
  3. linux2017期末试卷,LINUX认证考试模拟试题及答案
  4. 常用类库之Math类
  5. [Python中的除法、除法取整、除法取余] [运算符分别为:/、//、%]
  6. 设计模式 - 状态模式
  7. 用glRotatef函数转动对象
  8. oracle数据库启动报错ora-27102
  9. Android Content开头的Uri和文件绝对路径互相转换
  10. c/c++ sprintf sprintf_s