懒了好几天了,放几道SQL题吧,可能会有重复的也会有错误的请大家指教

查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。

SELECT COUNT(e1.ename),e1.mgr,e2.ename FROM emp e2 RIGHT JOIN emp e1 ON (e2.empno = e1.mgr) GROUP BY e2.empno
SELECT job FROM emp GROUP BY job HAVING MIN(sal)<3000
SELECT job FROM emp WHERE sal>2000 GROUP BY job HAVING COUNT(ename)>=3

查询部门人数大于2的部门编号,部门名称,部门人数。

SELECT e.deptno,d.dname,COUNT(e.empno) FROM emp e,dept d WHERE e.deptno = d.deptno GROUP BY e.deptno HAVING COUNT(e.empno)>2

查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,部门平均工资,并按照部门人数升序排序。

SELECT e.deptno,d.dname,COUNT(e.empno),AVG(e.sal) FROM emp e,dept d WHERE e.deptno = d.deptno   GROUP BY e.deptno HAVING COUNT(e.empno)>2 AND AVG(e.sal)>2000 ORDER BY COUNT(e.empno)

查询每个部门工资最低的员工信息 HAVING

SELECT MIN(sal),deptno FROM emp GROUP BY deptno
SELECT e1.* FROM emp e1,(SELECT MIN(sal) sal,deptno FROM emp GROUP BY deptno) a WHERE e1.sal=a.sal AND e1.deptno = a.deptno

查询各个部门中高于平均工资的员工信息

SELECT e.* FROM emp e,(SELECT AVG(sal) sal,deptno FROM emp GROUP BY deptno) a WHERE e.sal>a.sal AND e.deptno = a.deptno

查询其他部门中工资高于10部门中任意员工的员工信息

SELECT * FROM emp WHERE sal > ANY(SELECT sal FROM emp WHERE deptno = 10) AND deptno != 10

查询工资处于第三名的员工信息

SELECT * FROM emp WHERE sal = (SELECT DISTINCT sal FROM emp ORDER BY sal DESC LIMIT 2,1)

查询入职日期最早的员工姓名,入职日期

SELECT ename,hiredate FROM emp WHERE hiredate = (SELECT MIN(hiredate) FROM emp)

查询工资比SMITH工资高并且工作地点在CHICAGO的员工姓名,工资,部门名称

SELECT e.ename,e.sal,d.dname FROM emp e,dept d WHERE e.deptno = d.deptno AND d.loc= 'chicago' AND e.sal>(SELECT sal FROM emp WHERE ename='smith')

查询入职日期比20部门入职日期最早的员工还要早的员工姓名,入职日期

SELECT ename,hiredate FROM emp WHERE hiredate<ALL(SELECT hiredate FROM emp WHERE deptno = 20)

查询与部门10中的员工从事相同工作的员工信息

SELECT * FROM emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno=10) AND deptno !=10

查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门的员工

SELECT ename,hiredate FROM emp WHERE hiredate >ANY(SELECT hiredate FROM emp WHERE deptno = 10)AND deptno !=10

查询入职日期比10部门所有员工晚的员工姓名、入职日期,不包括10部门的员工

SELECT ename,hiredate FROM emp WHERE hiredate >ALL(SELECT hiredate FROM emp WHERE deptno =10)AND deptno!=10

查询职位和10部门任意一个员工职位相同的员工姓名,职位,不包括10部门员工

SELECT ename,job FROM emp WHERE job IN(SELECT DISTINCT job FROM emp WHERE deptno = 10)AND deptno!=10

查询部门平均工资在2500元以上的部门名称及平均工资

SELECT d.dname,a.avg FROM dept d,(SELECT AVG(sal) AVG,deptno FROM emp GROUP BY deptno)a WHERE a.avg>2500 AND d.deptno=a.deptno

查询员工岗位中不是以‘sa’开头并且平均工资在2500元以上的岗位及平均工资,并按平均工资降序排序

SELECT DISTINCT e.job,a.avg FROM emp e,(SELECT AVG(sal) AVG,job FROM emp GROUP BY job)a WHERE a.avg>2500 AND e.job NOT LIKE 'sa%' AND e.job = a.job ORDER BY a.avg DESC

查询部门人数在2人以上的部门名称、最低工资、最高工资

SELECT d.dname,MIN(e.sal),MAX(e.sal) FROM emp e,dept d WHERE e.deptno = d.deptno GROUP BY d.deptno HAVING COUNT(e.empno)>2

查询岗位不为salesman,工资和大于等于2500的岗位及每种岗位的工资和

SELECT job,SUM(sal) FROM emp WHERE job!='salesman' GROUP BY job HAVING(SUM(sal)>2500)

查询经理号码和经理姓名,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序

SELECT e1.ename,e1.empno,MIN(e2.sal) FROM emp e1 RIGHT JOIN emp e2 ON e2.mgr = e1.empno GROUP BY e1.empno,e1.ename HAVING MIN(e2.sal)>=3000 ORDER BY MIN(e2.sal) 

查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。

SELECT empno,ename,sal FROM emp WHERE sal>(SELECT sal FROM emp WHERE empno=7782) AND job = (SELECT job FROM emp WHERE empno=7369)

查询工资最高的员工姓名和工资。

SELECT ename,sal FROM emp WHERE sal = (SELECT MAX(sal) FROM emp)

查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。

SELECT d.deptno,d.dname,MIN(e.sal) FROM dept d,emp e WHERE d.deptno = e.deptno GROUP BY e.deptno HAVING MIN(sal)>(SELECT MIN(sal) FROM emp WHERE deptno = 10)

查询员工工资为其部门最低工资的员工的编号和姓名及工资。

SELECT empno,ename,sal FROM emp WHERE (sal,deptno) IN (SELECT MIN(sal) sal, deptno FROM emp GROUP BY deptno)

显示经理是KING的员工姓名,工资。

SELECT ename,sal FROM emp WHERE mgr=(SELECT empno FROM emp WHERE ename = 'king')

显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。

SELECT ename,sal,hiredate FROM emp WHERE hiredate>(SELECT hiredate FROM emp WHERE ename='smith')

(1)查询20号部门的所有员工信息。

SELECT * FROM emp WHERE deptno=20

(2)查询奖金(COMM)高于工资(SAL)的员工信息。

SELECT *FROM emp WHERE sal<comm

(3)查询奖金高于工资的20%的员工信息。

SELECT *FROM emp WHERE comm>(sal*0.2)

(4)查询10号部门中工种为MANAGER和20号部门中工种为CLERK的员工的信息。

SELECT * FROM emp WHERE (deptno = 10 AND job = 'manager') OR(deptno = 20 AND job = 'clerk')

(5)查询所有工种不是MANAGER和CLERK,且工资大于或等于2000的员工的详细信息。

SELECT * FROM emp WHERE job NOT IN ('manager','clerk') AND sal>=2000 

(6)查询有奖金的员工的不同工种。

 SELECT DISTINCT job FROM emp WHERE comm IS NOT NULL

(7)查询所有员工工资和奖金的和。

SELECT SUM(sal+ifnull(comm,0)) FROM emp

(8)查询没有奖金或奖金低于100的员工信息。

SELECT * FROM emp WHERE  comm IS NULL OR comm <100

(9)查询员工工龄大于或等于10年的员工信息。

 SELECT * FROM emp WHERE TIMESTAMPDIFF(YEAR,hiredate, DATE_FORMAT(NOW(), '%Y-%m-%d'))>=10
 select * from emp where datediff(now(),hiredate) >= 10*365

(10)查询员工信息,要求以首字母大写的方式显示所有员工的姓名。

SELECT CONCAT(UPPER(LEFT(ename,1)),LOWER(SUBSTRING(ename,2,(LENGTH(ename)-1)))) AS Ename FROM emp  

(11)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,若月份相同则按入职的年份排序。

SELECT ename,DATE_FORMAT(hiredate,'%y') YEAR,DATE_FORMAT(hiredate,'%m') MONTH FROM emp ORDER BY MONTH,YEAR

(12)查询在2月份入职的所有员工信息。

 SELECT * FROM emp WHERE DATE_FORMAT(hiredate,'%m') = 2

(13)查询从事同一种工作但不属于同一部门的员工信息。

SELECT DISTINCT
	a.ename,a.job,a.deptno
FROM emp a,emp b
WHERE a.job=b.job AND a.deptno<>b.deptno

(14)查询各个部门的详细信息以及部门人数、部门平均工资。

 SELECT d.*,COUNT(e.empno),AVG(e.sal) FROM emp e,dept d GROUP BY d.deptno

(15)查询10号部门员工以及领导的信息。

SELECT e1.*,e2.* FROM emp e1,emp e2WHERE deptno = 10 and e2.mgr = e1.empno

(16)查询工资为某个部门平均工资的员工信息。

 SELECT * FROM emp GROUP BY deptno HAVING sal = AVG(sal)

(17)查询工资高于本部门平均工资的员工的信息。

SELECT e.* FROM emp e,(SELECT deptno,AVG(sal) sal FROM emp GROUP BY deptno) a WHERE e.deptno = a.deptno AND e.sal>a.sal

(18)查询工资高于本部门平均工资的员工的信息及其部门的平均工资。

 SELECT e.*,a.sal FROM emp e,(SELECT deptno,AVG(sal) sal FROM emp GROUP BY deptno) a WHERE e.deptno = a.deptno AND e.sal>a.sal

(19)统计各个工种的人数与平均工资。

 SELECT COUNT(empno),AVG(sal) FROM emp GROUP BY job

(20)统计每个部门中各个工种的人数与平均工资。

 SELECT COUNT(empno),AVG(sal),deptno,job FROM emp GROUP BY deptno,job

(21)查询所有员工工资都大于1000的部门的信息。

select * from dept where deptno in(select deptno from emp group by deptno having min(sal)>1000)

(22)查询所有员工工资都大于1000的部门的信息及其员工信息。

SELECT emp.*,d.*,dept.dname FROM  dept,emp ,(SELECT MIN(sal) m,deptno de FROM emp GROUP BY deptno) d WHERE emp.deptno = d.de AND d.m>1000 AND dept.deptno = d.de

(23)查询所有员工工资都在900~3000之间的部门的信息。

SELECT d.* FROM dept d INNER JOIN (SELECT  deptno FROM emp GROUP BY deptno HAVING MIN(sal)>900 AND MAX(sal)<3000) a ON d.deptno=a.deptno

(24)查询所有工资都在900~3000之间的员工所在部门的员工信息。

SELECT * FROM emp WHERE deptno IN(SELECT deptno FROM emp GROUP BY deptno HAVING MIN(sal)>900 AND MAX(sal)<3000)

(25)查询每个员工的领导所在部门的信息。

SELECT DISTINCT d.* FROM emp e, dept d WHERE d.deptno = e.deptno AND d.deptno IN (SELECT e2.deptno FROM emp e1,emp e2 WHERE e1.mgr=e2.empno) 

(26)查询人数最多的部门信息。

  SELECT * FROM dept WHERE deptno IN (SELECT deptno FROM emp GROUP BY deptno HAVING COUNT(empno)>=ALL(SELECT COUNT(empno) FROM emp  GROUP BY deptno))  

(27)查询30号部门中工资排序前3名的员工信息。

 SELECT * FROM emp WHERE deptno=30 AND sal IN (SELECT DISTINCT  sal FROM emp ORDER BY sal DESC )LIMIT 3 

(30)向emp表中插入一条记录,员工号为1357,员工名字为oracle,工资为2050元,部门号为20,入职日期为2002年5月10日。

INSERT INTO emp(empno,ename,sal,deptno,hiredate) VALUE(1357,'oracle',2052,20,'2002-05-10') 

(31)查询工作等级为2级,1985年以后入职的工作地点为DALLAS的员工编号、姓名和工资。

 SELECT e.empno,e.ename,e.sal FROM emp e,dept d,salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal AND s.grade =2 AND d.loc='dallas' AND e.hiredate > '1985-01-01'

(32)部门平均薪水最高的部门编号

SELECT deptno FROM emp GROUP BY deptno HAVING AVG(sal)>=ALL(SELECT AVG(sal) FROM emp GROUP BY deptno)

(33)部门平均薪水最高的部门名称

 SELECT d.dname,e.deptno FROM emp e,dept d GROUP BY e.deptno HAVING AVG(sal)>=ALL(SELECT AVG(sal) FROM emp GROUP BY deptno)

(34)平均薪水最低的部门的部门名称

 SELECT d.dname,e.deptno FROM emp e,dept d GROUP BY e.deptno HAVING AVG(sal)<=ALL(SELECT AVG(sal) FROM emp GROUP BY deptno)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看到代码就头秃的秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值