✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
????个人主页:乐趣国学的博客
????个人信条:不迁怒,不贰过。小知识,大智慧。

????当前专栏:MySQL数据库学习之旅
✨特色专栏:国学周更-心性养成之路

????本文内容:【MySQL】使用DQL命令查询数据(二)
更多内容点击????
                       ​​​​【MySQL】使用DQL命令查询数据(一)

目录
1、分组查询
2、HAVING子句
3、LIMIT

1、分组查询
1)什么是分组查询
        在实际的开发中,可能需要先对一组数据进行分组,然后再对每一组的数据进行操作,这时需要用到分组查询。
        用 GROUP BY 语句根据一个或多个列对结果集进行分组。
2)GROUP BY 语法结构
        select…from…group by…
3)关键字的执行顺序问题
        select(4)…from(1)…where(2)…group by(3)…order by(5)…//顺序不能颠倒
4)案例编写
        查询每个部门的部门编号和每个部门的工资和:         SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;
        查询每个部门的部门编号以及每个部门的人数:         SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
        查询每个部门的部门编号以及每个部门工资大于1500的人数:         SELECT deptno,COUNT(*) FROM emp WHERE sal>2500 GROUP BY deptno;
5)重要规定

GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套, 为数据分组提供更细致的控制。如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上 进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在 GROUP BY子句中指定相同的表达式。不能使用别名。除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子 句中给出。如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

2、HAVING子句
1)什么是HAVING 子句
        在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。HAVING 子句可以让我们筛选分组后的各组数据。
        HAVING子句用于指定过滤分组结果(GROUP BY)或聚合计算结果的条件。
2)HAVING语法:
        HAVING bool_expression
3)关键字的执行顺序问题
        select(5)…from(1)…where(2)…group by(3)…order by(6)…having(4)…//顺序不能颠倒
4)案例编写
        查询工资总和大于9000的部门编号以及工资和:         SELECT `deptno`,SUM(sal) AS sumSal FROM emp GROUP BY deptno HAVING sumSal>20000;

注:having与where的区别:
        1)having是在分组后对数据进行过滤.
              where是在分组前对数据进行过滤
        2)having后面可以使用分组函数(统计函数)
              where后面不可以使用分组函数。

        WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。

3、LIMIT
1)什么是 LIMIT 子句
        LIMIT用来限定查询结果的起始行,以及总行数,强制 SELECT 语句返回指定的记录数。可以用来分页。
2)LIMIT语法
        select…from…limit…
3)Limit子句参数用法
        Limit接受一个或两个数字参数。参数必须是一个整数常量。
        一个参数:它表示返回最大的记录数。从第一行开始算。
        两个参数:参数1是指定第一个返回的记录行的索引+1,参数2是最后返回最大的记录数
4)查询顺序
        查询语句书写顺序:select – from- where- group by- having- order by-limit
        查询语句执行顺序:from – where -group by – having – select – order by-limit  
5)Limit子句在MySQL中的性能分析
        Limit子句高效率:避免全表扫描,提高查询效率。
        MySQL的limit给分页带来了极大的方便,但数据量大的时候,limit的性能就急剧下降。
6)案例编写
        查询5行记录,起始行从0开始         SELECT * FROM emp LIMIT 0,5;
        查询10行记录,起始行从3开始         SELECT * FROM emp LIMIT 3,10;

        码文不易,本篇文章就介绍到这里,如果想要学习更多数据库系列知识,请关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。