MySQL语句查询练习(一)

在这里插入图片描述
在这里插入图片描述
emp和dept表如下:

 create table dept(
 deptno int primary key,
 dname varchar(20),
 loc varchar(20))

 INSERT INTO DEPT VALUE (  10,'ACCOUNTING','NEW YORK');  
 INSERT INTO DEPT VALUES  (20,'RESEARCH','DALLAS');  
 INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');  
 insert into dept values(40,'OPERATIONS','BOSTON');


create table emp(
empno int primary key,
ename varchar(20),
job varchar(10),
mgr int,
hiredate date,
sal float,
comm float,
deptno int,
foreign key (deptno) references dept(deptno))

INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,19820712,800,NULL,20),                 
(7499,'ALLEN','SALESMAN',7698,19810220,1600,300,30)   
(7521,'WARD','SALESMAN',7698,19810222,1250,500,30)
(7566,'JONES','MANAGER',7839,19810402,2975,N  ULL,20),                 
(7654,'MARTIN','SALESMAN',7698,19810928,1250,1400,30),                   
(7698,'BLAKE','MANAGER',7839,19810501,2850,NULL,30),
 (7782,'CLARK','MANAGER',7839,19810609,2450,NULL,10),
 (7788,'SCOTT','ANALYST',7566,19870612,3000,NULL,20),
(7839,'KING','PRESIDENT',NULL,19811117,5000,NULL,10), 
(7844,'TURNER','SALESMAN',7698,19810908,1500,0,30),
(7876,'ADAMS','CLERK',7788,19870613,1100,NULL,20),
(7900,'JAMES','CLERK',7698,19811203,950,NULL,30),
(7902,'FORD','ANALYST',7566,19811203,3000,NULL,20),  
(7934,'MILLER','CLERK',7782,19820123,1300,NULL,10); 

练习:
题目 、查出所有部门及所在地(loc)名称
SQL: Select loc from dept;

题目 查出员工的姓名在81-1到82-1份参加工作
SQL: select ename from emp where hiredate between 19810101 and 19820101;

题目 、员工表的总记录数
SQL select count(*) from emp;

题目 、职位是Manager的平均月收入是多少
SQL select avg(sal) from emp where job=’MANAGER’;

题目 收入大于平均收入且大于3000的员工的姓名(嵌套)
SQL select ename from emp where sal>avg(sal) and sal>3000;

题目 所有部门的名称
SQL select dname from dept;

题目 存在雇员的所有部门号
SQL select deptno,group_concat(ename) from emp group by deptno;

题目 工资不超过2850的雇员姓名和工资
SQL select ename,sal from emp where sal<=2850;

题目 工资不在1500到2850之间的所有雇员名及工资
SQL select ename,sal from emp where sal not between 1500 and 2850;

题目 代码为7566的雇员姓名及所在部门代码
分析 当要显示等于某值的行时,应该在WHERE子句中使用=操作符
SQL select ename,empno from emp where empno=‘7566’;

题目 部门10和30中工资超过1500的雇员名及工资
SQL select ename,sal from emp where sal>1500 and deptno=‘10’ or deptno=‘30’;

题目 无管理者的雇员名及岗位
SQL select ename,job from emp where mgr is null;

题目 在1981年2月1日~1981年5月1日之间雇佣的雇员名、岗位及雇佣日期,并以雇佣日期的先后进行排序
SQL select ename,job,hiredate from emp where hiredate between 19810201 and 19810501 order by hiredate;

题目 获得补助的所有雇员名、工资及补助额,并以工资和补助的降序排序。
SQL select ename,sal,comm from emp where comm is not null order by comm desc;

题目 给部门10的每个雇员增加到10%的工资
SQL update emp set sal=sal+sal*0.1 where deptno=‘10’;

题目 删除部门50
SQL delete from emp where deptno=‘50’;

题目 所有雇员的平均工资,总计工资,最高工资,最低工资
SQL select avg(sal),count(sal),max(sal),min(sal) from emp;

题目 每种岗位的雇员总数,平均工资
SQL select count(ename),avg(sal) from emp group by job;

题目 员工总数,以及获得补助的员工总数
SQL select count(*),count(comm) from emp where comm is not null;

题目 管理者的总人数
SQL select count(distinct mgr) from emp where mgr is not null;

题目 员工工资的最大差额
分析 工资最大差额=员工最高工资-员工最低工资
SQL select max(sal)-min(sal) as sub from emp;

题目 每个部门每个岗位的平均工资
SQL select count(ename),job,avg(sal) from emp group by deptno;

题目 BLAKE同部门的所有雇员,但不显示BLAKE
SQL select ename from emp where deptno in (select deptno from emp where ename=‘BLAKE’) and ename <> ‘BLAKE’;

题目 超过平均工资的所有雇员名,工资及部门号
SQL select ename,sal,deptno from emp where sal >(select avg(sal) from emp);

题目 高于CLERK岗位所有雇员工资的所有雇员名,工资及岗位
SQL select ename,sal,job from emp where sal>(select max(sal) from emp where job=‘CLERK’);

题目 工资或补助额与SCOTT完全一致的所有雇员名,工资及补助额
SQL select ename,sal,comm from emp where sal in(select sal from emp where ename=‘SCOTT’) or comm in(select comm from emp where ename=‘SCOTT’);

题目 部门20的部门名,以及该部门的所有雇员名,雇员工资及岗位
SQL select ename,empno,sal,job from emp where deptno=‘20’;

题目 获得补助的所有员工名,补助额以及所在部门名.
SQL select ename,empno,comm from emp where comm is not null;

题目 在”DALLAS”工作的所有雇员名,雇员工资及所在部门名
SQL select e.ename,e.sal,d.dname from emp as e join dept as d on d.deptno=e.deptno
where d.loc=‘DALLAS’;

题目 雇员名SCOTT的管理者名
SQL select e.mgr from emp as e join dept as d on e.deptno=d.deptno where e.ename=‘SCOTT’;

题目 部门10的所有雇员名,部门名,以及其他部门名.
SQL select e.ename,d.dname from emp as e left outer join dept as d
on d.deptno=e.deptno and d.deptno=‘10’;

题目 部门10的所有雇员名,部门名,以及其他雇员名.
SQL select e.ename,d.dname from emp as e left join dept as d on e.deptno=10 and
d.deptno=10 order by d.dname;

题目 部门10的所有雇员名,部门名,以及其他部门名和雇员名
SQL select e.ename,d.dname from emp as e join dept as d on e.deptno=10 and e.deptno=d.deptno order by e.ename;

猜你喜欢

转载自blog.csdn.net/weixin_42223850/article/details/97666928