Java MySQL高級查詢

-- --創建部門表
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;

 

發佈了56 篇原創文章 · 獲贊 27 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章