mysql資料庫命令練習題及答案
阿新 • • 發佈:2019-02-10
1、查詢emp中最高薪水人的名字
2、查詢每個部門中的最高薪水人的名字和所在的部門編號
3、查詢薪水在平均薪水之上的僱員的名字
4、查詢僱員的名字和所在部門的名字
5、查詢薪水在在本部門平均薪水之上的僱員的名字
6、查詢每個員工的薪水的等級,員工的姓名
7、查詢每個部門的平均薪水的等級,部門的編號
8、查詢僱員的名字,所在部門的名字,工資的等級
9、查詢僱員的名字和其經理的名字
10、查詢僱員中是經理人的名字
11、查詢平均薪水最高的部門的編號和名稱
12、查詢薪水最高的前5名僱員編號,名稱,薪水
13、查詢薪水最高的第6名到第10名僱員編號,名稱,薪水
14、查詢部門的名字和部門的人數(如果部門裡沒有人數,顯示0個)
15、查詢員工的編號,工資和所在部門的平均工資
三個表的結構介紹:
三個表的建立語句:
/********************************部門表dept********************************/
/*建立表*/
DROP TABLE IF EXISTS DEPT;
CREATE TABLE DEPT(
DEPTNO INT PRIMARY KEY,
DNAME VARCHAR(14) ,
LOC VARCHAR(13)
);
/*插入資料*/
INSERT INTO DEPT VALUES
(10,'ACCOUNTING' ,'NEW YORK'),
(20,'RESEARCH','DALLAS'),
(30,'SALES','CHICAGO'),
(40,'OPERATIONS','BOSTON');
/*查詢資料*/
SELECT * FROM DEPT;
/********************************員工表emp********************************/
/*建立表*/
DROP TABLE IF EXISTS EMP;
CREATE TABLE EMP(
EMPNO INT PRIMARY KEY,
ENAME VARCHAR(14) ,
JOB VARCHAR (9),
MGR INT,
HIREDATE DATE,
SAL DECIMAL(7,2),
COMM DECIMAL(7,2),
DEPTNO int REFERENCES DEPT
);
/*插入資料*/
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20),
(7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30),
(7521,'WARD','SALESMAN',7698,'1981-2-22',1250,500,30),
(7566,'JONES','MANAGER',7839,'1981-4-2',2975,NULL,20),
(7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250,1400,30),
(7698,'BLAKE','MANAGER',7839,'1981-5-1',2850,NULL,30),
(7782,'CLARK','MANAGER',7839,'1981-6-9',2450,NULL,10),
(7788,'SCOTT','ANALYST',7566,'1987-7-13',3000,NULL,20),
(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10),
(7844,'TURNER','SALESMAN',7698,'1981-9-8',1500,0,30),
(7876,'ADAMS','CLERK',7788,'1987-7-13',1100,NULL,20),
(7900,'JAMES','CLERK',7698,'1981-12-3',950,NULL,30),
(7902,'FORD','ANALYST',7566,'1981-12-3',3000,NULL,20),
(7934,'MILLER','CLERK',7782,'1982-1-23',1300,NULL,10);
/*查詢資料*/
SELECT * FROM EMP;
/********************************工資等級表salgrade********************************/
/*建立表*/
DROP TABLE IF EXISTS SALGRADE;
CREATE TABLE SALGRADE(
GRADE INT PRIMARY KEY,
LOSAL INT,
HISAL INT
);
/*插入資料*/
INSERT INTO SALGRADE VALUES
(1,700,1200),
(2,1201,1400),
(3,1401,2000),
(4,2001,3000),
(5,3001,9999);
/*查詢資料*/
SELECT * FROM SALGRADE;
答案:
/*1、查詢emp中最高薪水人的名字*/
#1、查詢最高的薪水
select max(sal) from EMP;
#2、將1作為條件
select
ename
from
EMP
where
sal = (select max(sal) from EMP);
/*2、查詢每個部門中的最高薪水人的名字和所在的部門編號*/
#1、各個部門的最高薪水
select
max(sal),deptno from EMP
group
by deptno;
#2、將1的結果作為一個新的表,聯表查詢
select
t1.ename,t1.deptno
from
EMP t1
inner join
(select max(sal) max_sal,deptno from EMP group by deptno) t2
on
t1.deptno = t2.deptno and sal = t2.max_sal;
/*3、查詢薪水在平均薪水之上的僱員的名字*/
select ename from EMP where sal >(select avg(sal) from EMP);
/*4、查詢僱員的名字和所在部門的名字*/
select
t1.ename,t2.dname
from
EMP t1,DEPT t2
where
t1.deptno = t2.deptno;
/*5、查詢薪水在在本部門平均薪水之上的僱員的名字*/
select
t1.ename,t1.deptno
from
EMP t1
inner join
(select avg(sal) avg_sal,deptno from EMP group by deptno) t2
on t1.deptno = t2.deptno and sal > t2.avg_sal;
/*6、查詢每個員工的薪水的等級,員工的姓名*/
select * from EMP;
select * from SALGRADE;
select t1.ename,t2.grade
from EMP t1,SALGRADE t2
where t1.sal between t2.losal and t2.hisal;
/*7、查詢每個部門的平均薪水的等級,部門的編號*/
#1、各個部門的平均薪水
select avg(sal),deptno from EMP group by deptno;
#2、將1的結果當作一個表
select
t1.grade,t2.deptno
from
SALGRADE t1,(select avg(sal) avg_sal,deptno from EMP group by deptno) t2
where
t2.avg_sal between t1.losal and t1.hisal
/*8、查詢僱員的名字,所在部門的名字,工資的等級*/
select t1.ename,t2.dname,t3.grade
from
EMP t1,DEPT t2,SALGRADE t3
where
t1.deptno = t2.deptno
and
t1.sal between t3.losal and t3.hisal;
select t1.ename,t2.dname,t3.grade
from
EMP t1
inner join
DEPT t2
on
t1.deptno = t2.deptno
inner join
SALGRADE t3
on
t1.sal between t3.losal and t3.hisal;
/*9、查詢僱員的名字和其經理的名字*/
select employee.ename,employer.ename
from EMP employer,EMP employee
where employee.mgr = employer.empno;
/*10、查詢僱員中是經理人的名字*/
#1、經理上的編號
select distinct mgr from EMP;
#2、將1當作條件
select
ename
from
EMP
where
empno in(select distinct mgr from EMP);
/*11、查詢平均薪水最高的部門的編號和名稱*/
#1、每個部門的平均薪水
select avg(sal) avg_sal,deptno from EMP group by deptno;
#2、求1表中的最高平均薪水
select max(t.avg_sal) from (select avg(sal) avg_sal,deptno from EMP group by deptno) t
#3、將2的結果當作條件
select t1.deptno
from (select avg(sal) avg_sal,deptno from EMP group by deptno) t1
where t1.avg_sal = (select max(t2.avg_sal) from (select avg(sal) avg_sal,deptno from EMP group by deptno) t2)
#4、將3作為條件
select t.deptno,t.dname
from DEPT t
where deptno in (
select t1.deptno
from (select avg(sal) avg_sal,deptno from EMP group by deptno) t1
where t1.avg_sal = (select max(t2.avg_sal) from (select avg(sal) avg_sal,deptno from EMP group by deptno) t2)
);
/*12、查詢薪水最高的前5名僱員編號,名稱,薪水*/
select empno,ename,sal
from EMP
order by sal desc
limit 5;
/*13、查詢薪水最高的第6名到第10名僱員編號,名稱,薪水*/
select empno,ename,sal
from EMP
order by sal desc
limit 5,5;
/*14、查詢部門的名字和部門的人數(如果部門裡沒有人數,顯示0個)*/
select
t1.dname,ifnull(t2.num,0)
from
DEPT t1
left join
(select count(*) num,deptno from EMP group by deptno) t2
on
t1.deptno = t2.deptno;
/*15、查詢員工的編號,工資和所在部門的平均工資*/
select
empno,ename,sal,t2.deptno,(select avg(sal) from EMP t1 where t1.deptno = t2.deptno)
from
EMP t2;
select
empno,ename,sal,t2.deptno,t2.avg_sal
from
EMP t1
inner join
(select avg(sal) avg_sal,deptno from EMP group by deptno) t2
on
t1.deptno = t2.deptno;