SQL语句练习.doc
老师关于实操练习我有几个疑问
问题一:第25题,给的答案似乎时没有考虑薪水要求在1200以上的雇员这个条件,以下是代码,请老师帮我看看,我写的对不对
我的代码:
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;
习题答案的代码:
select department_id,avg(salary),max(salary) from employees group by department_id having avg(salary) >1500 order by avg(salary) desc;
问题二:第29题 求比普通员工的最高薪水还要高的经理人名称
代码:
select distinct em.last_name from employees em where em.salary>(select max(e.salary) from employees e,employees em where e.manager_id = em.employee_id);
不明白为什么下面这句代码得出的是普通员工的最高薪水,我将max(salary)改成distinct e.employee_id,e.last_name得出的是全部员工,并没有排除是经理的员工
select max(e.salary) from employees e,employees em where e.manager_id = em.employee_id
问题三:31题求部门经理人中平均薪水最低的部门名称
虽然结果一样,但是答案给的代码计算的是最低的经理人薪水,而不是平均薪水最低的部门,请老师看一下我的代码是否正确,还是我理解的有问题
我的代码:
select rownum,department_id from(select m.department_id from employees e,employees m where e.manager_id = m.employee_id group by m.department_id order by avg(m.salary) ) where rownum = 1;
答案:
select department_id from employees where salary = ( select min(manager.salary) from employees emp,employees manager where emp.manager_id = manager.employee_id);
问题四:33题 求薪水最高的第 6 到第 10 名雇员
答案给的代码运行后得出的并不是薪水的第6到第10 名
这是我的代码,请老师看一下
select * from(select rownum rw,last_name,salary from (select last_name,salary from employees order by salary desc )) e where e.rw between 6 and 10;
问题五:13题 分别利用 like 操作符和正则表达式,查处名字中含有"S"或者"M"的人员
正则表达式不会写