排序显示
传统数据查询的时候只会按照设置的主键排序。如果现在希望对制定的列进行排序的操作,必须通过ORDER BY 进行。
排序语法:
SELECT [DISTINCT] * | 列别名 ,列名称
FROM 表名称
WHERE 条件
ORDER BY 排序的字段 | 列索引号 ASC|DESC ,排序的字段2 ASC | DESC...;
- 升序ASC(默认) 由低到高
- 降序DESC 由高到低
例
1. 查询雇员的的全部信息按基本工资由高到低排序
SELECT * FROM emp ORDER BY sal DESC;
2. 查询CLERK 的全部信息并按基本工资升序排列
SELECR * FROM emp WHERE job ='CLERK' ORDER BY sal (ASC);
3. 按基本工资由高到低进行排序,如果工资相同按雇佣日期由早到晚进行排序
SELECT * FROM emp ORDER BY sal DESC ,hiredate ASC
分组统计
统计函数
可以取得一张表之中的全部数据量
常用统计函数
COUNT() #求出全部的记录数
SUM() #求出总和,操作的列是数字
AVG() #平均值
MAX() #最大值
MIN() #最小值
例:
4. 查询公司每个月支出的月工资总和
SELECT SUM(sal) FROM emp;
5. 统计出公司的雇员人数
SELECT COUNT(empno) , COUNT(*) FROM emp;
提示: 在使用COUNT(字段)的时候,如果列上存在了null,那么null 是不会进行统计的,如果使用的 DISTINCT 那么列上如果有重复,重复的记录也不统计。 在没有数据的时候COUNT()函数返回 0 。
分组函数
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
SELECT [DISTINCT] 分组字段 [AS] 列别名 , | 统计函数 [AS] [别名] ,...
FROM 表名称
WHERE 条件
GROUP BY 分组字段
ORDER BY 排序的字段 ASC | DESC... ;
6. 统计出每个部门的人数
SELECT deptno ,COUNT(*) FROM emp GROUP BY deptno;
7.统计出每种职位的最低和最高工资
SELECT job, MIN(sal) , MAX(sal) FROM emp GROUP BY job;
对分组之后的信息再次进行过滤,使用HAVING
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
SELECT [DISTINCT] 分组字段 [AS] 列别名 , | 统计函数 [AS] [别名] ,…
FROM 表名称
WHERE 条件
GROUP BY 分组字段
HAVING 过滤条件
ORDER BY 排序的字段 ASC | DESC… ;
8.查询平均工资大于2000的职位信息,平均工资,雇员人数
SELECT job, ROUNF(AVG(sal),2),COUNT(empno) FROM emp
GROUP BY job
HAVING AVG(sal)>2000
9.查询非销售人员工作的名称以及从事相同工作的雇员的月工资总和,且月工资总额合计大于5000,输出结果按月工资合计的升序排列。
SELECT DISTINCT job,SUM(sal) FROM emp
WHERE job<>'CLERK'
GROUP BY job
HAVING SUM(sal)>5000
ORDER BY sum;
通过上面的例子,可以对 HAVING 和 WHERE 区别描述:
WHERE:是在分组前使用(可以没有GROUP BY),不允许使用统计函数;
HAVING:是在分组后使用(必须要有GROUP BY),允许使用统计函数;