oracle 中sql 语句的执行过程

    技术2022-05-20  43

    假设现在有两张表:部门表(dept)(共两个字段:id,name),员工表(emp)(id,name,salary,dept_id):

     

     

     

     

    问题001:查询所有员工的工资,按升序排列

     

     

    答案001: select name ,salary from emp

    order by salary asc;

     

     

    问题002:查询每个部门的平均工资是多少?

     

    答案002:select max(d.name),avg(e.salary) //1

    from dept d join emp e//2

    on d.id = e.dept_id//3

    group by d.id;//4

     

    分析002:本条sql的执行顺序是:2---->3---->4--->1,即先确定要查询的表,再对表进行连接,然后按部门ID对得到的连接表进行分组,然后转到第一句,对得到的每个分组的员工工资求平均;

     

     

     

     

     

     

    问题003:查询每个部门的工资高于1500的员工的平均工资是多少,按平均工资升序排列。

     

    答案003:select max(d.name),avg(e.salary)  avg_sal//1

    from dept d join emp e//2

    on d.id = e.dept_id//3

    where e.salary > 1500//4

    group by d.id//5

    order by avg_sal asc;//6

    分析003:本条sql执行顺序:2---->3---->4---->5---->1---->6;总结一下sql的执行过程from(确定查询对象)---->on(表之间发生关联)----> where(对关联表记录进行过滤)---->group by(对过滤后的记录进行分组,即把联合表分成几个小组)---->having( 对分组进行过滤) ---->select( 得到初步的结果)---->order by(对初步的结果进行排序)

    根据sql 的执行顺序:可以得到如下结论

    1 表的别名在  on where group by having select order by  后面都可用;

    2 字段的别名只有在order by 后面才可以用,因为select 执行顺序在order by 之前,在 from on where ,group by,having  之后;


    最新回复(0)