3-1-3 MySQL基础-数据库的高级查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了 3-1-3 MySQL基础-数据库的高级查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2415字,纯文字阅读大概需要4分钟。
内容图文
![3-1-3 MySQL基础-数据库的高级查询](/upload/InfoBanner/zyjiaocheng/871/869dd6abce4f41f3912192fc1bcd647f.jpg)
测试表结构
1 DROP TABLE IF EXISTS `t_emp`; 2 CREATE TABLE `t_emp` ( 3 `empno` int(4) NOT NULL, 4 `ename` varchar(20) DEFAULT NULL, 5 `job` varchar(20) DEFAULT NULL, 6 `mgr` int(4) DEFAULT NULL, 7 `hiredate` date DEFAULT NULL, 8 `sal` decimal(10,2) DEFAULT NULL, 9 `comm` decimal(10,2) DEFAULT NULL, 10 `deptno` int(2) DEFAULT NULL, 11 PRIMARY KEY (`empno`) 12 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 13 14 DROP TABLE IF EXISTS `t_dept`; 15 CREATE TABLE `t_dept` ( 16 `deptno` int(2) NOT NULL, 17 `dname` varchar(20) DEFAULT NULL, 18 `loc` varchar(20) DEFAULT NULL, 19 PRIMARY KEY (`deptno`) 20 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
聚合函数
SUM函数
SUM函数用于求和,只能用于数字类型,字符类型的统计结果为0,日期类型统计结果是毫秒数相加
1 SELECT SUM(ename), SUM(sal) FROM t_emp;
注意SUM函数求和会排除NULL值
MAX函数
MAX函数用于获取非空值的最大值
1 SELECT MAX(comm) FROM t_emp;
MIN函数
MIN函数用于获取非空值的最小值
1 SELECT MIN(comm) FROM t_emp;
AVG函数
AVG函数用于获得非空值的平均值,非数字数据统计结果为0
1 SELECT AVG(ename), AVG(sal+IFNULL(comm,0)) FROM t_emp;
COUNT函数
COUNT(*)用于获得主键条数,COUNT(列名)用于获得包含非空值的记录数.
1 SELECT COUNT(*), COUNT(comm) FROM t_emp;
分组查询
默认情况下聚合函数是对全表范围内的数据做统计
GROUP BY子句的作用是通过一定的规则蒋一个数据集划分成若干个小的区域,然后针对每个小区域分进行数据聚合处理
1 SELECT deptno, AVG(sal) FROM t_emp GROUP BY deptno;
对SELECT子句要求
查询语句中含有GROUP BY子句,那么SELECT子句中的内容就必须遵守规定:SELECT子句中可以包括聚合函数,或者GROUP BY子句的分组列,其余内容均不可以出现在SELECT子句中.
WITH ROLLUP
在group分组字段的基础上再进行统计数据
1 SELECT deptno, COUNT(*), AVG(sal), MAX(sal), MIN(sal) FROM t_emp GROUP BY deptno WITH ROLLUP;
GROUP_CONCAT函数
GROUP_CONCAT函数可以把分组查询中的某个字段拼成一个字符串
1 SELECT deptno, GROUP_CONCAT(ename),COUNT(*) 2 FROM t_emp 3 WHERE sal >=2000 4 GROUP BY deptno;
GROUP BY语句在查询语句的执行顺序
FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
HAVING子句
因为WHERE子句先于GROUP BY,一旦WHERE中出现了聚合函数,数据库根本不知道按照什么范围计算聚合值,此时需要HAVING子句
1 SELECT deptno 2 FROM t_emp 3 WHERE hiredate >= '1982-01-01' 4 GROUP BY deptno 5 HAVING COUNT(*) >=2 6 ORDER BY deptno;
HAVING子句的特殊用法
按照数字1分组,MySQL会根据SELECT子句中的列进行分组,HAVING子句也可以正常执行
1 SELECT deptno,COUNT(*) 2 FROM t_emp 3 GROUP BY 1 4 HAVING deptno IN (10,20);
内容总结
以上是互联网集市为您收集整理的 3-1-3 MySQL基础-数据库的高级查询全部内容,希望文章能够帮你解决 3-1-3 MySQL基础-数据库的高级查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。