-- --創建部門表
CREATE TABLE dept
(
deptno int PRIMARY KEY, -- 部門號
dname varchar(14), -- 部門名稱
loc varchar(13) -- 部門位置
)
-- --創建僱員表
CREATE TABLE emp
(
empno int PRIMARY KEY, -- 僱員號
ename varchar(10), -- 僱員姓名
job varchar(9), -- 工種
mgr int, -- 經理編號
hiredate datetime, -- 入職日期
sal decimal(7,2), -- 工資
comm decimal(7,2), -- 補助
deptno int, -- 部門號
FOREIGN KEY(deptno) REFERENCES dept(deptno)
);
-- --插入數據
INSERT dept VALUES(10,'ACCOUNTING','NEW YORK');
INSERT dept VALUES(20,'RESEARCH','DALLAS');
INSERT dept VALUES(30,'SALES','CHIGAGO');
INSERT dept VALUES(40,'OPERATIONS','BOSTON');
INSERT emp VALUES(7369,'SMITH','CLERK',7902,'2000-12-17',800,NULL,20);
INSERT emp VALUES(7499,'ALLEN','SALESMAN',7698,'2001-2-20',1600,300,30);
INSERT emp VALUES(7521,'WARD','SALESMAN',7698,'2001-2-22',1250,500,30);
INSERT emp VALUES(7566,'JONES','MANAGER',7839,'2001-2-22',1250,500,30);
INSERT emp VALUES(7654,'MARTIN','SALESMAN',7698,'2001-9-28',1250,1400,30);
INSERT emp VALUES(7698,'BLAKE','MANAGER',7839,'2001-5-1',2850,NULL,30);
INSERT emp VALUES(7782,'CLARK','MANAGER',7839,'2001-6-9',2450,NULL,10);
INSERT emp VALUES(7788,'SCOTT','ANALYST',7566,'2002-12-9',3000,NULL,20);
INSERT emp VALUES(7839,'KING','PRESIDENT',NULL,'2001-11-17',5000,NULL,10);
INSERT emp VALUES(7844,'TURNER','SALESMAN',7698,'2001-9-8',1500,0,30);
INSERT emp VALUES(7876,'ADAMS','CLERK',7788,'2003-1-12',1100,NULL,20);
INSERT emp VALUES(7900,'JAMES','CLERK',7698,'2001-3-12',950,NULL,30);
INSERT emp VALUES(7902,'FORD','ANALYST',7566,'2001-3-12',3000,NULL,20);
INSERT emp VALUES(7934,'MILLER','CLERK',7782,'2002-01-23',1300,NULL,10);
-- --1.顯示員工工資最高的
SELECT * FROM emp WHERE sal=(SELECT MAX(sal) FROM emp);
-- --2.顯示工資最低的員工的姓名和工資
SELECT ename,sal FROM emp WHERE sal=(SELECT MIN(sal) FROM emp);
-- --3.把高於平均工資的的僱員的名字和他的工資顯示出來
SELECT ename,sal FROM emp WHERE sal>(SELECT AVG(sal) FROM emp);
-- --4.統計共有多少員工
SELECT COUNT(*) AS 總員工 FROM emp;
-- --5.顯示每個部門的平均工資和最高工資,並顯示部門編號
SELECT AVG(sal) AS 平均工資,MAX(sal) AS 最高工資,deptno FROM emp GROUP BY deptno;
-- --6.顯示每個部門的每種崗位的平均工資和最低工資以及部門號和工種
SELECT AVG(sal) AS 平均工資,MIN(sal) AS 最低工資,deptno,job FROM emp GROUP BY deptno,job;
-- --7.顯示平均工資低於2000的部門號和它的平均工資
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal)<2000;
-- --8.顯示僱員的名字,僱員的工資以及所在部門的名稱
SELECT ename,sal,d.dname FROM emp e JOIN dept d ON e.deptno=d.deptno;
-- --9.顯示部門名稱號爲10 的部門名稱、員工姓名和工資
SELECT d.dname,ename,sal FROM emp e JOIN dept d ON e.deptno=d.deptno WHERE d.deptno=10;
-- --10.顯示僱員名、僱員工資以及所在部門的名字並按部門升序排序
SELECT ename,sal,d.dname FROM emp e JOIN dept d ON e.deptno=d.deptno ORDER BY e.deptno ASC;
-- --11.顯示'FORD'這個僱員的上級經理的姓名
SELECT ename FROM emp WHERE empno=(SELECT mgr FROM emp WHERE ename="FORD");
-- --12.顯示每個員工的姓名和他的上級經理的名字
SELECT e.ename AS 員工姓名,le.ename AS 上級經理 FROM emp e JOIN emp le ON e.mgr=le.empno;
-- --13.顯示與'SMITH'同一個部門的所有員工信息
SELECT * FROM emp WHERE deptno=(SELECT deptno FROM emp WHERE ename="SMITH");
-- --14.查詢和部門10的工種相同的僱員的所有信息
SELECT * FROM emp WHERE job= ANY(SELECT job FROM emp WHERE deptno=10);
-- --15.顯示empno爲7369,7788,7876的僱員的情況 使用in關鍵字
SELECT * FROM emp WHERE empno IN(7369,7788,7876);
-- --16.顯示公司每個員工的姓名和他的上級經理的姓名,使用LEFT JOIN
SELECT e.ename AS 員工姓名,le.ename AS 上級經理 FROM emp e LEFT JOIN emp le ON e.mgr=le.empno;
-- --17.顯示公司每個員工的姓名和他的上級經理的姓名,使用RIGHT JOIN
SELECT e.ename AS 員工姓名,le.ename AS 上級經理 FROM emp le RIGHT JOIN emp e ON e.mgr=le.empno;
-- --18.列出受僱日期早於其直接上級經理的所有員工的姓名和入職日期
SELECT e.ename AS 員工姓名,e.hiredate AS 入職日期 FROM emp e LEFT JOIN emp le ON e.mgr=le.empno WHERE e.hiredate<le.hiredate;
-- --19.列出工資高於在部門 30 工作的所有員工的工資的員工姓名和工資
SELECT ename,sal FROM emp WHERE sal>ALL(SELECT sal FROM emp WHERE deptno=30);
-- --20.查詢既是部門30工資又大於2000的這些員工的詳細信息,使用集合查詢
SELECT * FROM emp WHERE deptno=30 AND sal>2000;