子查询练习
45.列出比王海涛薪资高的员工,显示姓名薪资
select name,sal from emp where sal>(select sal from emp where name='王海涛');
46.列出与刘沛霞从事相同职业的员工,显示姓名、职位
select name,job from emp where job=(select job from emp where name='刘沛霞');
列出薪资比大数据部门(已知部门编号为30)所有员工薪资都高的员工信息显示员工姓名、薪资和部门名称
select emp.name,sal,dept.name from dept right join emp on emp.dept_id=dept.id where sal>(select max(sal) from emp where dept_id=30);
多表查询练习
48.列出培优部任职的员工,假定不知道’培优部’的部门编号,显示部门名称,员工名称。
–关联查询两张表
select dept.name,emp.name from dept,emp where emp.dept_id=dept.id and dept.name='培优部';
49.列出所有员工及其上级,显示员工姓名,上级编号,上级姓名
select e1.name,e2.id,e2.name from emp e1,emp e2 where e1.topid=e2.id;
50.列出最低薪资大于1500的各种职业,显示职位和该职位的最低薪资
select job,min(sal) from emp group by job having min(sal)>1500;
where 和having的区别
(1)相同点:where字句和having字句都是记录进行筛选过滤
(2)不同点:where字句是对分组之前的数据进行筛选过滤,,并且where字句中不能使用多行函数和列别名(可以使用表别名)having字句是对分组之后的数据进行筛选过滤,并且having字句中可以使用多行函数和列别名(表别名也可以使用)
51.列出每个部门就值得员工数量、平均工资。显示部门编号,员工数量,平均薪资
select dept_id,count(*),avg(sal) from emp group by dept_id;
52.列出受雇日期早于上级的所有员工的编号、姓名、部门名称
select e1.id,e1.name,d.name from emp e1,emp e2,dept d where e1.topid=e2.id and e1.hdate<e2.hdate and e1.dept_id=d.id;
53.列出每个部门薪资最高的员工信息,显示部门编号、薪资、员工姓名
select e.dept_id,t.maxsal,e.name from emp e,(select dept_id,max(sal) maxsal from emp group by dept_id) t where t.maxsal=e.sal and t.dept_id=e.dept_id;