MySQL数据库从入门到精通—单表查询—高级查询

高级查询

前面讲解的基础查询和条件查询能处理大部分需求,但当遇到一些复杂需求时难以处理,例如对查询结果进行排序、分组和分页等,接下来详细讲解MySQL的高级查询,以处理更加复杂的业务需求。

排序查询

对于前面学习的数据查询,在查询完成后,结果集中的数据是按默认顺序排序的。为了方便用户自定义结果集中数据的顺序,MySQL提供了ORDER BY用于对查询结果进行排序,具体语法格式如下所示。

在以上语法格式中,字段名1、字段名2等表示需要查询的字段名称,ORDER BY关键字后的字段名表示指定排序的字段,ASC和DESC参数是可选的,其中ASC代表按升序排序,DESC代表按降序排序,如果不写该参数,则默认按升序排序。

聚合函数

在查询出数据之后,可能需要对数据进行统计,例如获得工资的总和、年龄的最大值、奖金的最小值等。MySQL提供了一系列函数实现数据统计,也称为聚合函数,具体如表4.5所示。

表4.1 聚合函数

函数名称 作用
COUNT() 返回某列的行数
SUM() 返回某列值的和
AVG() 返回某列的平均值
MAX() 返回某列的最大值
MIN() 返回某列的最小值

在表4.5中列出了聚合函数的名称和作用,接下来详细讲解这些函数的用法。

1.COUNT()函数

COUNT()函数的语法格式如下。

在以上语法格式中,COUNT()函数中有3个可选参数,其中COUNT(*)是返回行数,包含NULL,COUNT(列名)是返回特定列的值具有的行数,不包含NULL,还有一种是COUNT(1),它与COUNT(*)返回的结果是一样的,如果数据表没有主键,则COUNT(1)的执行效率会高一些。

MySQL提供了IFNULL()函数,在函数中可以判断字段是否为NULL,若为NULL,则可以将NULL替换为数值0。

2.SUM()函数

SUM()函数用于计算指定列的数值和,如果指定列的类型不是数值类型,那么计算结果为0,具体语法格式如下。

3.AVG()函数

AVG()函数用于计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0,具体语法格式如下。

4.MAX()函数

MAX()函数用于计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算,具体语法格式如下。

5.MIN()函数

MIN()函数用于计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算,具体语法格式如下。

分组查询

在查询数据时,有时需要按照一定的类别进行统计,例如查询每个部门的人数、查询每个部门的薪资总和等。在MySQL中可以使用GROUP BY关键字进行分组查询,语法格式如下。

在以上语法格式中,GROUP BY后面的字段名是对查询结果分组的依据。

查询学生表中的学生信息,按照性别字段分组。

从以上执行结果可以看到,按照gender字段分组后的记录是3条,gender字段的值分别为male、female和NULL,这说明查询结果是按照gender字段不同的值进行分组,但这并没有太多实际意义,GROUP BY通常与聚合函数一起使用。

查询员工表中每个部门的部门编号和每个部门的工资和。

HAVING子句

前面学习了分组查询,对于一些更复杂的分组查询,在查询完成后还需要进行数据过滤。MySQL提供了HAVING子句,用于在分组后对数据进行过滤,在它后面可以使用聚合函数,而WHERE子句是在分组前对数据进行过滤,在它后面不可以使用聚合函数,HAVING子句的语法格式如下。

在以上语法格式中, HAVING子句是可选的。

LIMIT分页

在查询数据时一般会返回几条、几十条甚至更多的数据,但用户可能只需要其中的某几条,而且这种查询方式明显会影响程序的性能。为了解决这一问题,MySQL提供了LIMIT关键字用于限制查询结果的数量,也可以通俗地理解为分页,例如在网上浏览商品时商品不会全部显示,一般会分页显示,既满足了用户需求,又不影响系统性能。LIMIT的语法格式如下。

在以上语法格式中,LIMIT后面可以跟两个参数,第一个参数m是可选的,代表起始索引,若不指定,则使用默认值0,代表第一条记录;第二个参数n是必选的,代表从第m+1条记录开始取n条记录。

查询学生表中前5条记录。

从以上执行结果可看到,LIMIT关键字后面指定从0开始取5条记录,查询出了前5条学生的信息,当从0开始查询时,0也可以省略不写。

从以上执行结果可以看到,LIMIT的第一个参数不写,是按默认值0来查询的。

接着查询学生表中从第3条开始的记录,总共查询5条记录。

从以上执行结果可以看到,LIMIT后面的第一个参数指定为2,代表从第3条记录开始查询,第二个参数指定的5,代表查询5条记录。

小结:MySQL数据库从入门到精通—单表查询—高级查询

本文首先介绍了基础查询,能够满足最基本的查询,但这种查询一般意义不大;接着介绍了带条件的查询,根据需求按不同条件过滤查询数据;最后介绍了复杂的高级查询,通过高级查询可以对查询出的数据排序或分组或分页后再显示。对于这几种查询,大家需要多练习,融会贯通,以便于后面多表查询的学习。

发表回复

相关推荐

戰棋骨灰老玩傢們喲,你們還記得《東京魔人學園》嗎?

前言1998年6月18日,一傢主業為制作電影和影像制品的公司ASMIK ACE在PS上推出瞭一款名為《東京魔人學園劍風帖》的遊戲。這款...

· 7秒前

【行政区划第四期】无锡滨湖区和新吴区的前世今生

哈喽大家好,我是小Y! 说到无锡,给人的第一印象就是有钱。 是的没错,无锡的人均GDP除几个资源城市外,位居全国第一(当然 ...

· 16秒前

2023年,漱口水學生平價推薦,哪個牌子好?漱口水有用嗎?實測13個品牌,高性價比款測評推薦

不曉得你們有木有遇到過這種情況,就是剛吃完重口味的食物就要去見人,然後一說話就有一股味道,這種時候真的是太太太蜜汁尷...

· 26秒前

“舔狗”的五大特征,中了超过一半你就是卑微舔狗!

近几年来非常流行这么一个词——“舔狗”,这是一个网络词语,意思是指那些不顾一切去讨好他人的人。

· 35秒前

新榜 | 2022新媒体内容生态数据报告

本报告由新榜出品。 这是一份跨6大主要新媒体内容平台的报告。 新榜对微信公众号、视频号、抖音、小红书、B站、快手这6大平 ...

· 45秒前