1、msyql练习
1.1 数据库文件下载:
链接:https://pan.baidu.com/s/1bqfkFf0TDSacFRD4SVPjFw
提取码:2ys0
1.2 题目及答案
一、单表查询
1、选择部门30中的雇员
SELECT *from emp where Deptno=30;
2、列出所有办事员的姓名、编号和部门
SELECT e.Ename,e.Empno,d.Dname from emp as e inner join dept as d on e.Deptno=d.Deptno;
3、找出佣金高于薪金的雇员
select *from emp where Comm>Sal;
4、找出佣金高于薪金60%的雇员
select *from emp where Comm>Sal*0.6;
5、找出部门10中所有经理和部门20中的所有办事员的详细资料
select emp.*, dept.* from emp inner join dept on emp.Deptno=dept.Deptno
where (emp.Deptno=10 and Job='经理') or (emp.Deptno=20 and Job='办事员');
6、找出既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料
select emp.*, dept.* from emp inner join dept on emp.Deptno=dept.Deptno
where (Job!='经理' and Job!='办事员') and Sal>=2000;
7、找出收取佣金的雇员的不同工作
select distinct Job from emp;
8、找出不收取佣金或收取的佣金低于100的雇员
select *from emp where Comm<100;
9、显示正好为6个字符的雇员姓名
select Ename from emp where length(Ename)=6;
10、显示不带有’R’的雇员姓名
select Ename from emp where Ename not like '%R%';
11、显示所有雇员的姓名,用a替换所有’A’
select replace(Ename, 'A', 'a') from emp;
12、显示雇员的详细资料,按姓名排序
select * from emp order by Ename;
13、显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序
select Ename, Job, Sal from emp order by Job desc, Sal asc;
14、显示在一个月为30天的情况下所有雇员的日薪金
select Ename, (Sal/30) as per_diem from emp;
15、显示姓名字段的任何位置,包含 “A” 的所有雇员的姓名
select *from emp where Ename like '%A%';
二、多表查询
1、列出至少有一个雇员的所有部门
select distinct Dname from emp,dept where emp.Deptno=dept.Deptno;
2、列出薪金比"jdaran "多的所有雇员
select *from emp where Sal>(select Sal from emp where Ename='jdaran');
3、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门
select dept.Dname, emp.* from emp right join dept on emp.Deptno=dept.Deptno;
4、列出所有“CLERK”(办事员)的姓名及其部门名称
select dept.Dname, emp.* from emp left join dept on emp.Deptno=dept.Deptno where Job='办事员';
6、列出各种工作类别的最低薪金,显示最低薪金大于1500的记录
select Job,min(Sal) from emp group by Job having (min(Sal)>1500);
7、列出薪金高于公司平均水平的所有雇员
select * from emp where sal>(select avg(Sal) from emp);
8、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门20中任何一个雇员的薪金
select Ename, Sal from emp where Sal in (select Sal from emp where Deptno=20);
9、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门20中所有雇员的薪金
select Ename, Sal from emp where Sal > (select max(Sal) from emp where Deptno=20);
注意:高于部门20的所有人的薪资,就是高于部门20的最高薪资
10、列出每个部门的信息以及该部门中雇员的数量
select d.Deptno '编号', Dname '部门',count(Ename) as '人数', Loc as '办事处'
from dept d left join emp e on (d.Deptno=e.Deptno) group by d.Deptno, Dname;
11、列出所有雇员的雇员名称、部门名称和薪金
select e.Ename,d.Dname,e.Sal from emp e left join dept d on (e.Deptno=d.Deptno);
11、列出各个部门的MANAGER(经理)的最低薪金
select e.Ename,d.Dname,Job,e.Sal from emp e left join dept d on (e.Deptno=d.Deptno) where Job='经理' and Sal=(select min(Sal) from emp where Job='经理
');