mysql单表查询&&多表查询(职员表14+9)

 

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)

 

posted @ 2016-10-30 09:29  雪山上的蒲公英  阅读(3572)  评论(0编辑  收藏  举报
/* 返回顶部代码 */