MySQL之高级查询(一)

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);


版权声明:本文为m0_67932301原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。