[python全棧]—數據庫習題及答案

python全棧-MYSQL—數據庫習題

1.列出至少有四個員工的所有部門信息
查詢下每個部門的人數
select deptno,count() from emp group by deptno
至少四位
select deptno,count(
) from emp group by deptno having count()>4
部門信息
select d.
,dd.cou
from dept d,(select deptno,count() cou from emp group by deptno having count()>4) dd
where d.deptno = dd.deptno
2.列出薪資比’smith’多的員工信息
查詢Smith的薪資多少
select sal from emp where ename = ‘smith’
查詢比子查詢結果工資高的僱員信息
select * from emp where sal >(select sal from emp where ename = ‘smith’)
3.列出所有員工的姓名及其直接上級的姓名,沒有領導的僱員也列出
select e.ename,m.ename
from emp e left join emp m
on e.mgr=m,empno
4.列出受僱日期早於其直接上級的所有員工編號/姓名/部門名稱
select e.ename,e.empno
from emp e join emp m on e.mgr=m.empno
where e.hiredate<m.hiredate
部門名稱。連接部門表
select e.ename,e.empno,d.dname
from emp e join emp m on e.mgr=m.empno
join dept d on e.deptno=d.deptno
where e.hiredate<m.hiredate
5.列出所有‘clerk’的姓名及部門名稱、部門人數
列出所有clerk的姓名
select ename from emp where job;
部門人數
select count(),deptno from emp group by deptno
select d.dname,dd.cou,e.ename
from dept d join (select count(
) cou,deptno from emp group by deptno) dd on d.deptno = dd.deptno
join emp e on d.deptno = e.deptno
where job = ‘clerk’;

6.列出最低薪金大於1500的各種工作及此從事此工作的全部僱員人數
最低薪金大於1500的各種工作
select job from emp group by job having min(sal)>1500
每個工作的僱員人數
select count() from emp group by job;
select count(
) from emp
where job in (select job from emp group by job having min(sal)>1500)
group by job
7.列出在部門sales工作的員工的姓名,假定不知道銷售部的部門編號
部門銷售部的部門號
select deptno from dept where dname = ‘sales’
查詢子查詢結果的僱員姓名
select ename
from emp
where deptno=(select deptno from dept where dname = ‘sales’)
8.列出薪資高於公司平均薪金的所有員工,所在部門,上級領導
薪資高於公司平均薪金的所有員工
select e.*
from emp e
where sal>(select avg(sal) from emp)
連接部門表
select e.*
from emp e,join dept d on e.deptno = d.deptno
where sal>(select avg(sal) from emp)
上級領導連接emp
select e.,d.
from emp e join dept d on e.deptno = d.deptno
join emp m on e.mgr = m.empno
where e.sal>(select avg(sal) from emp);

9.列出與‘smith’從事相同工作的所有員工及部門名稱
scott’從事相同工作
select job from emp where ename = ‘smith’
與‘smith’從事相同工作的所有員工
select e.*
from emp e
where job =(select job from emp where ename = ‘smith’) and e.ename != ‘smith’
連接部門表查詢部門名稱
select e.,d.dname
from emp e join dept d on e.deptno =d.deptno
where job =(select job from emp where ename = ‘smith’) and e.ename != ‘smith’
10.列出薪金高於在部門30工作的所有員工的薪金的員工姓名和薪金/部門
部門30工作的薪資
select sal from emp where deptno=30;
高於在部門30工作的所有員工的薪金
select e.ename,e.sal
from emp e
where e.sal>(select sal from emp where deptno=30)
部門
select e.ename,e.sal,d.dname
from emp e join dept d on e.deptno = d.deptno
where e.sal>(select sal from emp where deptno=30)
11.列出在每個部門工作的員工數量/部門名稱平均工資和平均服務期限
服務天數 datadiff
select datediff(sysdate(),hiredate) /365 from emp
部門表和僱員表連表查詢
select avg(sal),d.dname,count(
),avg( datediff(sysdate(),hiredate) /365)
from dept d join emp e on d.deptno=e.deptno
group by d.dname
12.列出所有員工的年工資,按年薪從低到高排序
所有員工的年工資
select (sal+ifnull(comm,0))*12 yearsal from emp
按年薪從低到高排序
select (sal+ifnull(comm,0))*12 yearsal from emp order by yearsal
13。求出部門名稱中,帶‘S’字符的部門員工的工資合計工資/部門人數

部門名稱中,帶‘S’字符的部門號
select deptno from dept where dname like ‘%s%’
工資合計工資/部門人數
select sum(sal),count() from emp group by deptno
select sum(sal),count(
) from emp
where deptno in (select deptno from dept where dname like ‘%s%’)
group by deptno

select d.*,dd.cou
from dept d,(select deptno,count(*) cou from emp group by deptno having count(*)>4) dd 
where d.deptno = dd.deptno;

select ename from emp where job = 'clerk';
select count(*),deptno from emp group by deptno;

select d.dname,dd.cou,e.ename
						from dept d join (select count(*) cou,deptno from emp group by deptno) dd on d.deptno = dd.deptno
																	join emp e on d.deptno = e.deptno
where job = 'clerk';

select job from emp group by job having min(sal)>150;
select count(*) from emp group by job;

select count(*) ,job from emp
where job in (select job from emp group by job having min(sal)>150)
 group by job ;
 
 select deptno from  dept where dname = 'sales';
 select ename
from emp 
where deptno=(select deptno from  dept where dname = 'sales');
 
 
select e.*
	from emp e
	where sal>(select avg(sal) from emp);

select e.*,d.*
	from emp e join dept d on e.deptno = d.deptno
	join emp m on e.mgr = m.empno
	where e.sal>(select avg(sal) from emp);
	
select  e.*
from emp e
where job =(select job from emp where ename = 'smith')  and e.ename != 'smith'
	
select  e.*,d.dname
from emp e join dept d on e.deptno =d.deptno
where job =(select job from emp where ename = 'smith')  and e.ename != 'smith'

 select e.ename,e.sal,d.dname
from emp e join dept d on e.deptno = d.deptno
where e.sal>(select sal from emp where deptno=30);

select avg(sal),d.dname,count(*),avg( datediff(sysdate(),hiredate) /365)
from dept d join emp e on d.deptno=e.deptno
group by d.dname

select (sal+ifnull(comm,0))*12 yearsal from emp;

select (sal+ifnull(comm,0))*12 yearsal from emp order by yearsal;

select sum(sal),count(*) ,deptno from emp
where deptno in (select deptno from dept where dname like '%s%')
 group by deptno;
發佈了35 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章