情景描述:使用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唯一确定后面所有列的组合,而不是某一列数据,这一点必须明白!