高级查询
前面讲解的基础查询和条件查询能处理大部分需求,但当遇到一些复杂需求时难以处理,例如对查询结果进行排序、分组和分页等,接下来详细讲解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上推出瞭一款名為《東京魔人學園劍風帖》的遊戲。這款...
不曉得你們有木有遇到過這種情況,就是剛吃完重口味的食物就要去見人,然後一說話就有一股味道,這種時候真的是太太太蜜汁尷...