Student表:
| id | name | age |
|---|---|---|
| 1 | 张三 | 20 |
| 2 | 李四 | 21 |
| 3 | 王五 | 20 |
| 4 | 李四 | 18 |
| 5 | 张三 | 20 |
SQL DISTINCT
在实际的表中,数据可能会包含重复值,有时我们希望仅仅列出不同(distinct)的值。
该如何实现呢?
关键词 DISTINCT可以满足我们的需求,DISTINCT用于返回唯一不同的值。
语法:
SELECT DISTINCT 列名称 FROM 表名称
DISTINCT 必须是放在开头的,select id, distinct name from Student; ----会提示错误,因为根据语法格式 distinct 必须放在开头
作用于单列
单列去重的方式简明易懂,即相同值只保留1个。
select distinct name from Student
进行单列去重后的结果:
| id | name | age |
|---|---|---|
| 1 | 张三 | 20 |
| 2 | 李四 | 21 |
| 3 | 王五 | 20 |
作用于多列
多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。
select distinct name, age from Student
进行多列去重后的结果:
| id | name | age |
|---|---|---|
| 1 | 张三 | 20 |
| 2 | 李四 | 21 |
| 3 | 王五 | 20 |
| 4 | 李四 | 18 |
只有所有指定的列信息都相同,才会被认定为重复的信息
注意此时是将name, age三列所有不同的组合全部列出来,而不仅仅只是distinct name
相当于以下语句:
select name,age from Student group by name,age
group by使用的频率相对较高,但正如其功能一样,它的目的是用来进行聚合统计的,虽虽也可能实现去重的功能,但这并不是它的长项。
limit子句
Limit子句可以被用于强制 SELECT 语句返回指定的记录数,可以用来分页。
语法格式
[select * from table limit i,n ]
Limit接受一个或两个数字参数,参数必须是一个整数常量。
一个参数:它表示返回最大的记录数。从第一行开始算。
两个参数:参数1是指定第一个返回的记录行的索引+1,参数2是最后返回最大的记录数
参数:
table : 为数据表;
i : 为查询结果的索引值(默认从0开始);
n : 为查询结果返回的数量
如:
select (select distinct salary from Employee order by salary desc limit 1,1) as SecondHighestSalary
ASC 升序、DESC 降序
性能
Limit子句高效率:避免全表扫描,提高查询效率。
MySQL的limit给分页带来了极大的方便,但数据量大的时候,limit的性能就急剧下降。
版权声明:本文为qq_36511997原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。