SQL distinct关键字 和 limit子句

Student表:

idnameage
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

进行单列去重后的结果:

idnameage
1张三20
2李四21
3王五20

作用于多列

多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。

select distinct name, age from Student

进行多列去重后的结果:

idnameage
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版权协议,转载请附上原文出处链接和本声明。