• 【SQL】语句综合练习


    完成下面语句

    语句是基于Oracle下的HR数据库进行的

    1. 每个员工的所有信息

      select * from employees;
      
    2. 每个人的部门编号,姓名,薪水

      select department_id,last_name,salary from employees;
      
    3. 每个人的年薪

       select last_name, 12*salary from employees;
      
    4. 求每个人的年薪,列的别名:“年薪”

       select last_name, 12*salary  "年薪" from employees;
      
    5. 求 10 这个部门的所有员工

      select last_name from employees where department_id =10;
      
    6. 求名字是 KING 的这个人的信息

      select * from employees where last_name ='King';
      
    7. 求薪水大于 2000 的员工信息

      select * from employees where salary>2000;
      
    8. 求部门不是 10 的员工信息

      select * from employees where department_id <> 10;
      
    9. 求薪水在 800 和 1500 之间的员工信息(包含 800 和 1500)

      select * from employees where salary between 800 and 1500;
      
    10. 列出 deptno 为 10 或者 30,并且工资>2000 的所有人

      select last_name from employees deptno in(10,30)and salary>2000;
      
    11. 利用 in 操作符,列出部门 10 和 20 的人员

      select * from employees where department_id  in(10,20);
      
    12. 利用 like 操作符,查处名字中含有"H"的人员

      select * from employees where last_name like '%H%';
      
    13. 分别利用 like 操作符和正则表达式,查处名字中含有"S"或者"M"的人员

      select * from employees where last_name like '%S%' or last_name like '%M%';
      
    14. 计算 emp 表中的所有人员的平均薪水

      select avg(salary) from employees;
      
    15. 计算 emp 表中最高薪水

      select max(salary) from employees;
      
    16. 计算 emp 表中最低薪水

      select min(salary) from employees;
      
    17. 计算 emp 表中薪水大于 1000 的人员的个数

      select count(*) from employees where salary>1000;
      
    18. 计算 emp 表中薪水的总和

      select sum(salary) from employees;
      
    19. 计算 emp 表中薪水和津贴的总和

      select sum(salary+salary*1+nvl(commssion_pct,0), from employees;
      
    20. 求各部门最高薪水

      select department_id ,max(salary) from employees  group by department_id;
      
    21. 按照部门和职位分组,分别求最高薪水,该组人员个数

      select  department_id ,job_id, count(*),max(salary) from employees group by job_id , department_id;
      
    22. 求薪水最高的员工姓名

      select last_name,salary from employees where salary = (select max(salary) from employees);
      
    23. 求平均薪水是 2000 以上的部门

      select department_id from employees group by department_id having avg(salary)>2000;
      
    24. 求每个部门的平均薪水,并按照薪水降序排列

      select department_id,avg(salary) from employees group by department_id order by avg(salary) desc;
      
    25. 求每个部门薪水在 1200 以上的雇员的平均薪水、最高薪水,并且分组结果中只包含平均薪水大于 1500 的部门,排序按照部门平均薪水倒序排列

      select  department_id avg(salary),max(salary) from employees where salary>1200 group by department_id having avg(salary)>1500 order by avg(salary) desc;
      
    26. 把雇员按部门分组, 求最高薪水, 部门号, 过滤掉名字中第二个字母是'A'的, 要求分组后的平均薪水>1500, 按照部门编号倒序排列

      select department_id,max(salary) from employees where last_name not like '_A%' group by department_id having avg(salary)>1500 order by department_id desc;
      
    27. 求平均薪水最高的部门的部门编号

      错误: select e.department_id ,max(e.s) from (select m.department_id,avg(m.salary) s from employees m group by m.department_id) e  department_id 不是分组函数不能和聚合函数放在一起
       select e.department_id ,e.s from (select department_id,avg(salary) s from employees  group by department_id) e  where s = (select max(avg(salary)) maxs from employees group by department_id);
      
    28. 求出 emp 表中哪些人是经理人,打印出名字和编号

      select distinct m.employee_id,m.last_name from employees w,employees m where w.manager_id= m.employee_id;
      
    29. 求比普通员工的最高薪水还要高的经理人名称

      select distinct m.employee_id,m.last_name from employees w,employees m where w.manager_id= m.employee_idand m.salary > (select max(w.salary) from employees w,employees m where w.manager_id= m.employee_id);
      
    30. 每个部门平均薪水的等级(需要用到表的连接)

      select m.department_id,m.avgs, gr.gra from (select department_id,avg(salary) avgs from employees group by department_id)  m,job_grades gr  where m.avgs between gr.lowest_sal and gr.highest_sal;
      select m.department_id,m.avgs, gr.gra from (select department_id,avg(salary) avgs from employees group by department_id)  m inner join job_grades gr on m.avgs between gr.lowest_sal and gr.highest_sal;
      
    31. 求部门经理人中平均薪水最低的部门名称

      select e.department_name from (select d.department_name,avg(m.salary) ams from employees w,employees m,departments d  where m.employee_id=w.manager_id and m.department_id = d.department_id  group by d.department_name) e where e.ams = (select min(avg(m.salary)) mms from employees w,employees m,departments d  where m.employee_id=w.manager_id and m.department_id = d.department_id  group by d.department_name);
      
    32. 求薪水最高的前 5 名雇员

      select rownum ,last_name,salary from (select last_name,salary from employees order by salary desc)where rownum <6;
      
    33. 求薪水最高的第 6 到第 10 名雇员

    select last_name,salary from ( select rownum rn ,last_name,salary from (select last_name,salary from employees order by salary desc))where rn between 6 and 10;
    
    悲观者正确,乐观者成功
  • 相关阅读:
    VUE中全局变量的定义和使用
    Pull Request 工作流——更高效的管理代码
    仓储repository概念
    Mysql存储过程历史表备份
    OpenStack一键安装
    VMware虚拟机设置Win10固定ip
    C#_NPOI_Excel各种设置
    pycharm修改镜像
    C#模拟POST上传文件帮助类(支持https、http)
    Windows安装RabbitMQ
  • 原文地址:https://www.cnblogs.com/freebule/p/13543832.html
Copyright © 2020-2023  润新知