1.概述
在SQL数据库中,order by和group by这两个关键字是常用的用于排序和分组的操作。这两个关键字是SQL语言中比较基础的操作,但是对于初学者来说,两者之间的区别可能不是很明显,本文将主要介绍这两个关键字的区别。
2.order by
2.1 简介
2.1 简介
order by关键字用于对查询结果进行排序,通常使用asc(升序)或desc(降序)关键字来指定排序方式。order by 子句中可以出现列名、表达式和函数。
2.2 示例
以下代码给出了一个使用order by按照列名排序的例子。下面的例子是搜寻古诗中的作者的,并按照作者名字的字母顺序对结果排序。
SELECT * FROM poetry
WHERE author IN ('李白','杜甫','白居易','王之涣','孟浩然','柳宗元')
ORDER BY author ASC;
执行这条SQL语句的结果将是像这样的:
id | title | author | content |
---|---|---|---|
23 | 登高 | 李白 | 风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓,潦倒新停浊酒杯。 |
71 | 赤壁 | 杜甫 | 折戟沉沙铁未销,自将磨洗认前朝。东风不与周郎便,铜雀春深锁二乔。咸阳古道音尘绝,北国风光旧照今。 |
113 | 琵琶行 | 白居易 | 大漠沙如雪,燕山月似钩。何当金络脑,快走踏清秋。 |
141 | 登鹳雀楼 | 王之涣 | 【唐】王之涣 白日依山尽,黄河入海流。欲窮千里目,更上一層樓。 |
259 | 春晓 | 孟浩然 | 春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少。 |
438 | 赋得古原草送别 | 柳宗元 | 离离原上草,一岁一枯荣。野火烧不尽,春风吹又生。远芳侵古道,晴翠接荒城。又送王孙去,萋萋满别情。 |
3.group by
3.1 简介
group by关键字用于将查询结果分组,通常伴随着分组查询函数(例如count、sum、avg等)的使用,并且需要在查询语句中指定分组的列名。group by 关键字也可以与聚合函数一起使用,从而计算每个组的聚合值。
3.2 示例
以下代码给出了对搜寻古诗中包含“山水”的前5个作者名字,以及他们的诗作数目的例子:
SELECT author, COUNT(*) AS count
FROM poetry
WHERE content LIKE '%山水%'
GROUP BY author
ORDER BY count DESC
LIMIT 5;
执行这条SQL语句的结果将是像这样的:
author | count |
---|---|
李白 | 14 |
杜甫 | 12 |
孟浩然 | 4 |
柳宗元 | 3 |
在这个例子中,我们首先在诗歌内容中查找包含“山水”字眼的诗歌,然后通过group by关键字按照作者名字对这些诗歌进行了分组。因为我们在查询语句中使用了count函数来计算每个组(作者)的诗歌数量,所以最后结果中会显示每个作者写作中包含“山水”的诗歌数量。
4.order by 和 group by 的区别
order by和group by都是对结果集进行操作的关键字,但是两者之间的区别是很大的。
区别如下:
4.1 操作结果不同
order by关键字用于对查询结果进行排序,而group by关键字则用于将查询结果进行分组。
4.2 使用场合不同
order by关键字通常用于那些查询结果需要排序的场合,而group by关键字则通常用于需要对查询结果进行分组计算的场合。
4.3 执行顺序不同
order by关键字的执行顺序晚于group by关键字。
group by关键字用于聚合数据,对于满足条件的记录进行分组操作,group by的结果就会变成一个表,这个表里面的数据就可以使用order by进行排序,也就是说order by是对分组后的结果集进行排序的。
5.总结
本文从简介和示例入手,详细介绍了order by和group by在SQL数据库中的不同,分别从操作结果、使用场合、执行顺序等几个方面进行了分析。虽然order by和group by在语义上有所区别,但是经常在查询语句中同时使用,从而实现更加高级的数据排序和分组计算操作。