mysql必知必会 - DISTINCT

本文通过具体实例解释了如何使用 SQL 中的 DISTINCT 关键字来去除查询结果中的重复记录,特别适用于需要统计数据或进行汇总分析的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      情景描述:使用SELECT查询特定或者全部列的数据,那么会查询出全部匹配的行数据。

   类比现实:某公司要统计供应商所在省份都有哪些省,假如10家公司是北京的,5家公司是广东的,如果按照SQL查询,那么会查询出来10条数据是北京、5条数据是广东,而作为管理层,我们只需要知道供应商来自北京和广东而已,不需要重复10次或5次,只需要不同的数据出现一次就好。再比如小A过生日收礼物啦,小A想看看都收到什么类型的礼物,比如小A收到5个人送的5本书,3个人送的红包,那么小A只需要知道送到的礼物类型是书和红包即可,不需要重复告知5次是书,告知3次是红包。

   查询情景:查询产品中所有供应商Id,但是不要重复的数据.

   错误查询:SELECT vend_id  FROM Products;

   查询结果:

   

   可以看到很多数据都是重复若干次,而我们只需要相同的数据出现一次即可。

  

   解决方案:使用distinct关键字,指示mysql只返回不同的值。

   正确查询:SELECT DISTINCT vend_id  FROM Products;

     

  

   注意事项:

   1.将DISTINCT关键字放在列名前面;

  

   DISTINCT重点提醒

   2.不能部分使用DISTINCT,DISTINCT关键字应用于所有的列而不仅仅是前置它的列

   例如:

   demo:SELECT DISTINCT vend_id, prod_id FROM Products;

     

   SELECT DISTINCT vend_id, prod_id FROM Products;

   类似于

   SELECT DISTINCT (vend_id, prod_id) FROM Products;

   唯一性确定的数据是vend_id, prod_id组合的数据,而不是vend_id列数据,不管后面有多少个字段,DISTINCT唯一确定后面所有列的组合,而不是某一列数据,这一点必须明白!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值