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;

猜你喜欢

转载自blog.csdn.net/bancroft_boy/article/details/81139651