赞
赏
前面的查询讲解中,我们会将满足条件的行数据都查询出来,在 sql 语句中,我们也可以获取到只包含不同值的数据,不过它只能针对对应的列,而不能针对 *
进行操作。
本章节我们使用下面的表里面的语句进行操作
CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `stu_no` int(11) DEFAULT NULL, `stu_name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `chinese_score` double(10,0) DEFAULT NULL COMMENT '语文成绩', `mathematics_score` double(10,0) DEFAULT NULL COMMENT '数学成绩', `english_score` double(10,0) DEFAULT NULL COMMENT '英语成绩', `birth` date DEFAULT NULL COMMENT '生日', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4; INSERT INTO student (`id`,`stu_no`,`stu_name`,`age`,`chinese_score`,`mathematics_score`,`english_score`, `birth`) VALUES (1,1001,'xiaoming',17,100,100,100,'2003-02-08'), (2,1002,'honghong',16,99,100,90,'2004-02-27'), (3,1003,'xiaojun ',18,60,55,65,'2002-11-11'), (4,1004,'小亮',19,88,90,100,'2001-08-20'), (5,1005,'LIANGLIANG',19,55,100,100,'2001-02-16'), (6,1006,' 小 杰 ',16,99,55,45,'2004-08-25'), (7,1007,'小亮',null,99,99,99,'2000-12-12'), (8,1008,'无年龄',null,0,0,0,null), (9,1009,'欧阳亮亮',19,100,100,100,'2001-01-01');
DISTINCT详解
语法
select distinct expression[,expression...] from tables [where conditions];
详解
distinct 它可以用来查询不同列的数据,后面可以跟多个列,它是对后面所有的列都生效,而不是对后面的最近一个列生效。
案例
查询单个列
-- 嗨客网(www.haicoder.net) SELECT DISTINCT stu_name FROM student;
运行结果如下
查询多个列
-- 嗨客网(www.haicoder.net) SELECT DISTINCT stu_name,stu_no FROM student;
运行结果如下
如果使用 distinct 函数,则必须放在列的第一个位置,否则会报错。disctinct 后面跟很多列的时候,它对所有的列都生效,而不是仅仅对后面第一个列生效。它会过滤掉查询的结果里面相同的数据行,仅展示不相同行的数据。
查询包含null的列
前面了解到,很多函数是自动过滤掉 null 的数据,而 distinct 会对 null 的数据进行过滤,如果有多条为 null 的列,它会保留一条记录。
从结果可以看到,我们有两个为 null 的数据,最后只展示一条。
总结
distinct 可以将相同的数据过滤,最终得到的数据是不相同的。它可以帮助用户可以快速方便的去重。