MySQL中distinct的使用方法

一、基本使用

distinct一般是用来去除查询结果中的重复记录的,而且这个语句在selectinsertdeleteupdate中只可以在select中使用,具体的语法如下:

select distinct expression[,expression...] from tables [where conditions];
  • 1

这里的expressions可以是多个字段。本文的所有操作都是针对如下示例表的:

CREATE TABLE `NewTable` (
    `id`  int(11) NOT NULL AUTO_INCREMENT ,
    `name`  varchar(30) NULL DEFAULT NULL ,
    `country`  varchar(50) NULL DEFAULT NULL ,
    `province`  varchar(30) NULL DEFAULT NULL ,
    `city`  varchar(30) NULL DEFAULT NULL ,
    PRIMARY KEY (`id`)
)ENGINE=InnoDB
;

1.1 只对一列操作

这种操作是最常见和简单的,如下:

select distinct country from person
  • 1

结果如下: 

1.2 对多列进行操作

select distinct country, province from person
  • 1

结果如下: 

从上例中可以发现,当distinct应用到多个字段的时候,其应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段,而且distinct只能放到所有字段的前面,如下语句是错误的:

SELECT country, distinct province from person; // 该语句是错误的
  • 1

抛出错误如下:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘DISTINCT province from person’ at line 1

1.3 针对NULL的处理

从1.1和1.2中都可以看出,distinctNULL是不进行过滤的,即返回的结果中是包含NULL值的。

1.4 与ALL不能同时使用

默认情况下,查询时返回所有的结果,此时使用的就是all语句,这是与distinct相对应的,如下:

select all country, province from person
  • 1

结果如下: 

1.5 与distinctrow同义

select distinctrow expression[,expression...] from tables [where conditions];
  • 1

这个语句与distinct的作用是相同的。

1.6 对*的处理

*代表整列,使用distinct对*操作

sql 
select DISTINCT * from person 

相当于

select DISTINCT id, `name`, country, province, city from person;

原文地址:https://www.cnblogs.com/lbxBlog/p/9383174.html

时间: 2024-10-07 08:50:58

MySQL中distinct的使用方法的相关文章

MySQL中所有表的方法

MySQL删除数据库中所有表的方法: -- 切换到要删除表的数据库 USE REPLACE_WITH_DATABASE_NAME_YOU_WANT_TO_DELETE; -- 删除所有表 SET FOREIGN_KEY_CHECKS = 0; SET GROUP_CONCAT_MAX_LEN=32768; SET @tables = NULL; SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables   FROM information_sc

MySQL中多表删除方法(转载)

如果您是才接触MySQL数据库的新人,那么MySQL中多表删除是您一定需要掌握的,下面就将为详细介绍MySQL中多表删除的方法,供您参考,希望对你学习掌握MySQL中多表删除能有所帮助. 1.从MySQL数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id 2.从MySQL数据表t1里在数据表t2里没有匹配的记录查找出来并

MySQL中多表删除方法

如果您是才接触MySQL数据库的新人,那么MySQL中多表删除是您一定需要掌握的,下面就将为详细介绍MySQL中多表删除的方法,供您参考,希望对你学习掌握MySQL中多表删除能有所帮助. 1.从MySQL数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id 2.从MySQL数据表t1里在数据表t2里没有匹配的记录查找出来并

MySql中distinct的用法

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值.其原因是distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的.所以我花了很多时间来研究这个问题,网上也查不到解决方案,期间把容容拉来帮忙,结果是

mysql中FIND_IN_SET的使用方法

根据表goods的id和site_id查处goods表id对应的网站名称. 表goods数据 表site数据 这种情况下用子查询不好处理,而mysql提供了线程的find_in_set函数再结合group by来实现此功能. SELECT g.*,GROUP_CONCAT(s.name) site_name FROM goods g LEFT JOIN site s ON FIND_IN_SET(s.id,g.site_id) GROUP BY g.id 查询结果

删除mysql中root用户恢复方法

1.# service mysqld stop  #停止mysql数据库服务 2.# service mysqld start --skip-grant-tables #跳过授权表启动mysql数据库服务 3.# mysql -p     #进入mysql数据库添加root用户并授权 mysql> use mysql; mysql> select host,user from user; mysql> update user set password=password("new

Mysql中设置远程访问的方法

这个是windows服务器中啊.我用的是可视化界面 sqlyog ,你们也可以用  navicat  甚至dos界面都可以 用root帐号登录后,在查询页面中写以下代码 GRANT ALL PRIVILEGES ON *.* TO mx @"%" IDENTIFIED BY "123456"; /* 数据库名.表名 如果写成*.*代表授权所有的数据库 */ FLUSH PRIVILEGES; /* 刷新刚才的内容*/ UPDATE db SET HOST = '%'

PHP向mysql中插入数据的方法

1 require "database.php"; 2 3 $po_code = "YMWF2015-6-25-1"; 4 $customer = "youmei"; 5 $confirm_date = "2015-6-25"; 6 $delivery_date = "2015-7-25"; 7 8 $create_order_sql = "INSERT INTO `ld_crm`.`order`

MySQL中数学公式的详细方法 —— 【常用于人数、个数】

MySQL> count 统计行的数量,可查知共多少条数据 sum 统计列的数量 AVG 统计列的平均值 max 搜索列的最大值 mid 从文本提取字符 ucase 把字母全部替换为大写 Lcase 把字母全部替换为小写 应用方式> 例: SELECT AVG (age) FROM table