有如下表表结构,stu 学生表,有班级名称和学生名称
stu表
stu_class | stu_name |
---|---|
1班 | 张三 |
2班 | 李四 |
2班 | 王五 |
3班 | 赵六 |
如上表,我们要查询班级的名称
select stu_class from stu;
查询结果如下图,2班出现了两次,我们想要的结果是查看都有哪几个班级,重复的只出现一次即可。
stu_class |
---|
1班 |
2班 |
2班 |
3班 |
select distinct stu_class from stu;
查询结果如下图,是我们想要的结果。
stu_class |
---|
1班 |
2班 |
3班 |
总结:distinct 的作用为去重,如果我们想要查询的字段希望相等内容的只出现一次就够了,那么就需要用到distinct 关键字了。
写到这里,突然想到它既然是去重了,那么我如果查询的结果包括学生姓名的话,出现的是谁的姓名呢,是排在前面的还是后面的, 直接试试不就行了。
select DISTINCT stu_class, stu_name from stu;
结果如下:这是所有结果都查出来了,班级也并没有去重,难道去重失效了吗, 百度一下,查询到如果这么写它是根据stu_class + stu_name 一块儿来去重的,所以结果就全部重新出来了。 看着sql 想,那么我把stu_name 放到distinct 关键字前面呢,会不会就可以了,再试一次
stu_class | stu_name |
---|---|
1班 | 张三 |
2班 | 李四 |
2班 | 王五 |
3班 | 赵六 |
select stu_name, DISTINCT stu_class from stu;
结果sql 报错,MySQL 并不支持这样的写法,结果就是distinct 只能写在最前面。
再次总结:distinct 关键字,只能写在最前面,且如果查询多个字段,是根据多个字段来判断是否重复的。