文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL中这些关键字的用法,佬们get到了嘛

极客之心

极客之心

2024-12-24 13:37

关注


# GROUP BY用法


在MySQL中,GROUP BY语句用于将结果集按照一个或多个列进行分组。它常与聚合函数(如SUM、COUNT、AVG等)一起使用,对分组后的数据进行汇总计算。


GROUP BY语句具体怎么用呢,接下来详细说明:


基本语法:


```sql

SELECT 列1, 列2, ..., 聚合函数

FROM 表名

GROUP BY 列1, 列2, ...

在GROUP BY子句中列出了要分组的列。查询结果将根据这些列的值进行分组。

```


聚合函数是什么,怎么用?


可以在SELECT语句中使用各种聚合函数来计算分组后的结果,例如SUM、COUNT、AVG、MAX、MIN等。**在GROUP BY语句中,聚合函数通常用于计算每个分组的值**。


1. 过滤分组:

我们可以在GROUP BY语句之前使用HAVING子句进行分组后的结果过滤。**HAVING子句类似于WHERE子句,但它用于过滤分组后的数据**。


2. 排序分组:

可以在GROUP BY语句之后使用ORDER BY子句对分组后的结果进行排序。我们可以根据列名指定排序顺序以及使用ASC(升序)或DESC(降序)关键字。


3. 多列分组:

GROUP BY语句可以根据一个或多个列进行分组。列出的列将成为分组的依据,组合形成唯一的分组键。例如:



```sql

SELECT 列1, 列2, ..., 聚合函数

FROM 表名

GROUP BY 列1, 列2, ...

```


在使用GROUP BY时,我们需要注意的是:


SELECT语句中的列必须是GROUP BY子句中列出的列或聚合函数。


如果列中包含非聚合列且未在GROUP BY子句中列出,MySQL会根据该列进行隐式分组,但结果可能不符合预期。


**GROUP BY子句中可以使用列的别名,而SELECT子句中不能使用。**


我们使用一个小例子,演示如何使用GROUP BY语句:



```sql

SELECT department, COUNT(*) as total_employees, AVG(salary) as avg_salary

FROM employees

GROUP BY department

HAVING avg_salary > 5000

ORDER BY total_employees DESC;

```


以上小栗子中,我们按照部门分组员工信息,计算每个部门的员工总数和平均薪资,并过滤出平均薪资超过5000的部门,并按照员工总数降序排序。


# ORDER BY用法

MySQL中,**ORDER BY子句用于对查询结果进行排序**。它可以按照一个或多个列进行升序(ASC)或降序(DESC)排序。


下面讲解一下ORDER BY子句的详细用法说明:


首先介绍下其基本语法:


```sql

SELECT 列1, 列2, ...

FROM 表名

ORDER BY 列1 [ASC|DESC], 列2 [ASC|DESC]

```


在ORDER BY子句中,我们可以使用一个或多个列作为排序依据,并为每个列指定排序顺序,ASC为升序(默认),DESC为降序。


- 单列排序: 如果只需要按照单个列进行排序,可以直接指定列名并选择排序顺序。


举个栗子:


```sql

SELECT 列1, 列2, ...

FROM 表名

ORDER BY 列1 DESC;

```


上面是,根据列1的值进行降序排序。


- 多列排序: 如果需要按照多个列进行排序,可以在ORDER BY子句中指定多个列,并为每个列选择排序顺序。


例如:


```sql

SELECT 列1, 列2, ...

FROM 表名

ORDER BY 列1 DESC, 列2 ASC;

```


上面是,首先根据列1的值进行降序排序,如果出现相同的值,则根据列2的值进行升序排序。


- 排序NULL值: 可以使用**NULLS FIRST**或**NULLS LAST**关键字指定空值在排序中的位置。NULLS FIRST表示空值排在前面,NULLS LAST表示空值排在后面。


例如:


```sql

SELECT 列1, 列2, ...

FROM 表名

ORDER BY 列1 NULLS LAST;

```


上面上,空值将排在列1的排序结果的最后。


我们在使用ORDER BY关键字时需要注意,**在ORDER BY子句中可以使用列的别名,但不能使用SELECT子句中的表达式或聚合函数**。


通过一个栗子,为大家演示如何使用ORDER BY子句:



```sql

SELECT name, age, salary

FROM employees

ORDER BY salary DESC, age ASC;

```


上面上,我们按照薪资降序排序,并且对于相同薪资的员工,按照年龄升序排序。


因此,ORDER BY子句在MySQL中用于对查询结果进行排序。我们可以指定一个或多个列,并选择排序顺序。



# LIMIT关键字用法

MySQL中,**LIMIT关键字用于限制查询结果的返回行数**。它可以帮助我们分页显示结果,或者仅返回某个范围内的行。


下面是LIMIT关键字的详细用法说明:


首先还是先介绍基本语法:


```sql

SELECT 列1, 列2, ...

FROM 表名

LIMIT 行数;

```


LIMIT子句会限制查询结果返回的行数。我们可以指定要返回的行数,例如10表示返回前10行。


- 分页查询: 在实际应用中,常常需要进行分页查询,只返回指定页码的结果。在LIMIT子句中,可以指定两个参数,**第一个参数为起始位置(偏移量),第二个参数为返回的行数**。


举个栗子:


```sql

SELECT 列1, 列2, ...

FROM 表名

LIMIT 偏移量, 行数;

```


偏移量表示从查询结果的哪一行开始返回结果,行数表示返回的行数。


> `偏移量的计算公式为:(页码 - 1) * 每页行数`


例如,如果每页显示10行数据,要查询第3页的数据,则偏移量为 (3-1)*10 = 20,表示从结果的第21行开始返回。


- 可选的简化写法: LIMIT子句还有一种简化写法,只指定要返回的行数,而不指定偏移量。


举个栗子:


```sql

SELECT 列1, 列2, ...

FROM 表名

LIMIT 行数 OFFSET 偏移量;

```


这种写法和第一种情况是等价的。


- 限制查询结果: LIMIT子句也可以用于限制查询结果的返回范围。比如,我们可以指定返回前10条记录中的第5到第8行。


举个栗子:


```sql

SELECT 列1, 列2, ...

FROM 表名

LIMIT 4, 8;

```


上面小栗子,返回结果将从第5行开始,返回8行数据。


因此我们需要注意的是,在使用LIMIT子句时,偏移量和行数都应该是非负整数。


文章到这里就先结束了,感兴趣的可以订阅专栏哈,后续会继续分享相关的知识点。


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯