1.having子句的使用:
select list from table group by () having 筛选函数
例:查询每个部门最高工资大于2900的部门编号,最高工资
select deptno,max(sal)
from emp
group by deptno
having max(sal)>2900;
2.select执行的顺序:
如:select job,deptno,avg(sal)
from emp
where job in ('MANAGER','CLERK','SALESMAN')
group by job,deptno分组
having avg(sal)>100
order by 3 desc;
select执行的顺序
● SELECT语句执行过程:
1. 通过FROM子句中找到需要查询的表;
2. 通过WHERE子句进行非分组函数筛选判断;
3. 通过GROUP BY子句完成分组操作;
4. 通过HAVING子句完成组函数筛选判断;
5. 通过SELECT子句选择显示的列或表达式及组函数;
6. 通过ORDER BY子句进行排序操作。
三、子查询
格式:SELECT select_list
FROM table
WHERE expr operator
(运算符) (SELECT select_list
FROM table);小括号内为子查询
例:查询工资比JONES高的员工姓名*/
select ename
from emp
where sal>
(select sal
from emp
where ename='JONES')
子查询分为单行子查询 多行子查询 多列子查询
单行子查询:符号只能用单行运算符如:=等于>大于 <小于 <>不等于
例:显示和雇员7369从事相同工作并且工资大于雇员7876的雇员的姓名和工作
select ename,job
from emp
where job=(select job
from emp
where empno=7369)
and sal>(select sal
from emp
where empno=7876)
子查询中使用组函数
● 查询工资最低的员工姓名,岗位及工资
select ename,job,sal
from emp
where sal=(select min(sal)
from emp)
/*HAVING子句中使用子查询*/
查询部门最低工资比20部门最低工资高的部门编号及最低工资
SELECT deptno, MIN(sal)
FROM emp
GROUP BY deptno
HAVING MIN(sal) >
(SELECT MIN(sal)
FROM emp
WHERE deptno = 20);