子查问练习
db40
列出薪资比 '王海涛' 的薪资高的所有员工,显示姓名、薪资
select name,sal from emp where sal>(select sal from emp where name="王海涛");
列出与 '刘沛霞' 从事雷同职位的所有员工,显示姓名、职位。select name,job from emp where job=(select job from emp where name="刘沛霞");
列出薪资比 '大数据部' 部门 (已知部门编号为 30) 所有员工薪资都高的员工信息,显示员工姓名、薪资和部门名称。select e.name,e.sal,d.name from emp e join dept d on sal>(select MAX(sal) from emp where dept_id=30);
加上没有部门的员工
select e.name,e.sal,d.name from emp e left join dept d on e.dept_id=d.id where sal>(select MAX(sal) from emp where dept_id=30);
多表查问练习
. 列出在 '培优部' 任职的员工,假设不晓得 '培优部' 的部门编号,显示部门名称,员工名称。select d.name,e.name from dept d join emp e on d.name="培优部" where d.id=e.dept_id;
(自查问)列出所有员工及其间接下级,显示员工姓名、下级编号,下级姓名
select c.name,c.id,c.topid,p.name,p.id from emp c join emp p on c.topid=p.id;
列出最低薪资大于 1500 的各种职位,显示职位和该职位的最低薪资
select job,min(sal) from emp group by job having min(sal)>1500;
// 补充 where 和 having 的区别
// 1. 都能过滤 2.where 是在分组之前对数据过滤;having 是在分组之后对数据过滤 3.where 不能和聚合函数一起应用,不能和 order\group 应用
列出在每个部门就任的员工数量、平均工资。显示部门编号、员工数量,均匀薪资。select count(*),avg(sal),dept_id from emp group by dept_id;
查出至多有一个员工的部门,显示部门编号、部门名称、部门地位、部门人数。select e.dept_id,d.name,d.loc,count(*) from emp e join dept d on e.dept_id=d.id group by dept_id having count(*)>0;
列出受雇日期早于间接下级的所有员工,显示员工编号、员工姓名、部门名称。select c.id,c.name,c.dept_id,d.name dept_name from emp c,emp p, dept d where c.topid=p.id and c.dept_id=d.id and c.hdate<p.hdate;
查问员工表中薪资最高的员工信息
select * from emp order by sal desc limit 0,1;