【SQL】语句综合练习
完成下面语句
语句是基于Oracle下的HR数据库进行的
-
每个员工的所有信息
select * from employees;
-
每个人的部门编号,姓名,薪水
select department_id,last_name,salary from employees;
-
每个人的年薪
select last_name, 12*salary from employees;
-
求每个人的年薪,列的别名:“年薪”
select last_name, 12*salary "年薪" from employees;
-
求 10 这个部门的所有员工
select last_name from employees where department_id =10;
-
求名字是 KING 的这个人的信息
select * from employees where last_name ='King';
-
求薪水大于 2000 的员工信息
select * from employees where salary>2000;
-
求部门不是 10 的员工信息
select * from employees where department_id <> 10;
-
求薪水在 800 和 1500 之间的员工信息(包含 800 和 1500)
select * from employees where salary between 800 and 1500;
-
列出 deptno 为 10 或者 30,并且工资>2000 的所有人
select last_name from employees deptno in(10,30)and salary>2000;
-
利用 in 操作符,列出部门 10 和 20 的人员
select * from employees where department_id in(10,20);
-
利用 like 操作符,查处名字中含有"H"的人员
select * from employees where last_name like '%H%';
-
分别利用 like 操作符和正则表达式,查处名字中含有"S"或者"M"的人员
select * from employees where last_name like '%S%' or last_name like '%M%';
-
计算 emp 表中的所有人员的平均薪水
select avg(salary) from employees;
-
计算 emp 表中最高薪水
select max(salary) from employees;
-
计算 emp 表中最低薪水
select min(salary) from employees;
-
计算 emp 表中薪水大于 1000 的人员的个数
select count(*) from employees where salary>1000;
-
计算 emp 表中薪水的总和
select sum(salary) from employees;
-
计算 emp 表中薪水和津贴的总和
select sum(salary+salary*1+nvl(commssion_pct,0), from employees;
-
求各部门最高薪水
select department_id ,max(salary) from employees group by department_id;
-
按照部门和职位分组,分别求最高薪水,该组人员个数
select department_id ,job_id, count(*),max(salary) from employees group by job_id , department_id;
-
求薪水最高的员工姓名
select last_name,salary from employees where salary = (select max(salary) from employees);
-
求平均薪水是 2000 以上的部门
select department_id from employees group by department_id having avg(salary)>2000;
-
求每个部门的平均薪水,并按照薪水降序排列
select department_id,avg(salary) from employees group by department_id order by avg(salary) desc;
-
求每个部门薪水在 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;
-
把雇员按部门分组, 求最高薪水, 部门号, 过滤掉名字中第二个字母是'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;
-
求平均薪水最高的部门的部门编号
错误: 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);
-
求出 emp 表中哪些人是经理人,打印出名字和编号
select distinct m.employee_id,m.last_name from employees w,employees m where w.manager_id= m.employee_id;
-
求比普通员工的最高薪水还要高的经理人名称
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);
-
每个部门平均薪水的等级(需要用到表的连接)
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;
-
求部门经理人中平均薪水最低的部门名称
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);
-
求薪水最高的前 5 名雇员
select rownum ,last_name,salary from (select last_name,salary from employees order by salary desc)where rownum <6;
-
求薪水最高的第 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;
悲观者正确,乐观者成功