dept(deptno,dname,loc)
emp(empno,ename,job,mgr,hiredate,sal,COMM,deptno)
salgrade(grade,losal,hisal)
stu(sid,sname,age,gander,province,tuition)
单表查询题目 ====================================================
dept(deptno,dname,loc) emp(empno,ename,job,mgr,hiredate,sal,COMM,deptno) salgrade(grade,losal,hisal) stu(sid,sname,age,gander,province,tuition)
1. 查询出部门编号为30的所有员工 SELECT stu.sname FROM stu WHERE stu.sid = 30 2. 所有销售员的姓名、编号和部门编号。 SELECT emp.empno, emp.ename, emp.deptno FROM emp WHERE emp.job = '销售员' 3. 找出奖金高于工资的员工。 SELECT emp.ename FROM emp WHERE emp.COMM > emp.sal 4. 找出奖金高于工资60%的员工。 SELECT emp.ename FROM emp WHERE emp.COMM > emp.sal*0.6 5. 找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料。 SELECT emp.empno, emp.ename, emp.job, emp.hiredate, emp.sal, emp.deptno FROM emp WHERE (emp.job = '经理' AND emp.deptno = 20) OR (emp.job = '销售员' AND emp.deptno = 10) 6. 找出部门编号为10中所有经理,部门编号为20中 所有销售员,还有即不是经理又不是销售员但其 工资大或等于20000的所有员工详细资料。 SELECT emp.empno, emp.ename, emp.job, emp.hiredate, emp.sal, emp.deptno FROM emp WHERE (emp.job = '经理' AND emp.deptno = 20) OR (emp.job = '销售员' AND emp.deptno = 10)OR(emp.job != '经理' AND emp.job != '销售员' AND emp.sal>=20000) 7. 无奖金或奖金低于1000的员工。 SELECT emp.empno, emp.ename, emp.job FROM emp WHERE emp.COMM < 1000 OR emp.COMM IS NULL 8. 查询名字由三个字组成的员工。 SELECT emp.ename FROM emp WHERE emp.ename LIKE '___' 9.查询2000年入职的员工。 SELECT emp.ename FROM emp WHERE emp.hiredate LIKE '2000-__-__' #'2000%' 10. 查询所有员工详细信息,用编号升序排序 SELECT emp.empno, emp.ename, emp.job, emp.mgr, emp.hiredate, emp.sal, emp.COMM, emp.deptno FROM emp ORDER BY emp.empno ASC 11. 查询所有员工详细信息,用工资降序排序,如果工资相同 使用入职日期升序排序 SELECT emp.empno, emp.ename, emp.job, emp.mgr, emp.hiredate, emp.sal, emp.COMM, emp.deptno FROM emp ORDER BY emp.sal DESC, emp.hiredate ASC 12. 查询每个部门的平均工资 SELECT emp.deptno,AVG(sal) FROM emp GROUP BY emp.deptno 13. 查询每个部门的雇员数量。 SELECT emp.deptno,COUNT(1) FROM emp GROUP BY emp.deptno 14. 查询每种工作的最高工资、最低工资、人数 SELECT emp.job,MAX(sal),MIN(sal),COUNT(1) AS 人数 FROM emp GROUP BY emp.job
多表查询题目 ====================================================
dept(deptno,dname,loc) emp(empno,ename,job,mgr,hiredate,sal,COMM,deptno) salgrade(grade,losal,hisal) stu(sid,sname,age,gander,province,tuition)
1. 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。 SELECT dept.deptno,dept.dname,dept.loc,COUNT(emp.deptno) AS 部门人数 FROM dept,emp WHERE dept.deptno=emp.deptno GROUP BY dept.deptno 2. 列出所有员工的姓名及其直接上级的姓名。 SELECT e.ename, IFNULL(m.ename, 'BOSS') AS lead FROM emp e LEFT JOIN emp m ON e.mgr=m.empno; 3. 列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。 SELECT e.empno, e.ename, d.dname FROM emp AS e INNER JOIN emp AS m ON e.mgr = m.empno LEFT JOIN dept AS d ON e.deptno = d.deptno WHERE e.hiredate < m.hiredate 4. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。 SELECT e.*, d.dname FROM emp e RIGHT JOIN dept d ON e.deptno=d.deptno; 5. 列出最低薪金大于15000的各种工作及从事此工作的员工人数。 SELECT e.job,COUNT(*) AS 员工人数 FROM emp e GROUP BY job HAVING MIN(sal)>15000 6. 列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。 SELECT e.ename FROM emp e WHERE (SELECT e.deptno FROM dept WHERE dname='销售部' ) 7. 列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。 SELECT e.*,d.dname,s.grade FROM emp e NATURAL LEFT JOIN dept d LEFT JOIN emp m ON m.empno=e.mgr LEFT JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal WHERE e.sal > (SELECT AVG(sal) FROM emp) 8.列出与庞统从事相同工作的所有员工及部门名称。 SELECT e.*, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno AND e.job=(SELECT job FROM emp WHERE ename='庞统'); 9.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。 SELECT e.ename, e.sal, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno AND sal > ALL(SELECT sal FROM emp WHERE deptno=30)