SQL多表查询案例
2016-11-07 11:59
281 查看
表结构:
emp表:
dept表:
salgrade表:
(1)查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
(2)列出薪金比张三高的所有员工。
(3)列出所有员工的姓名及其直接上级的姓名。
(4)列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
(5)列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
(6)列出所有工作为文员的姓名及其部门名称,部门的人数。
(7)列出最低薪金大于15000的各种工作及从事此工作的员工人数。
(8)列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。
(9)列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。
(10)列出与庞统从事相同工作的所有员工及部门名称。
(11)列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。
(12)列出在每个部门工作的员工数量、平均工资。
emp表:
dept表:
salgrade表:
(1)查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
SELECT z.*,d.dname,d.loc FROM dept d, (SELECT deptno, COUNT(*) cnt FROM emp GROUP BY deptno) z WHERE z.deptno=d.deptno;
(2)列出薪金比张三高的所有员工。
SELECT * FROM emp e WHERE e.sal > (SELECT sal FROM emp WHERE ename='张三')
(3)列出所有员工的姓名及其直接上级的姓名。
SELECT e.ename, IFNULL(m.ename, 'BOSS') AS lead FROM emp e LEFT JOIN emp m ON e.mgr=m.empno;
(4)列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
SELECT e.empno, e.ename, d.dname FROM emp e LEFT JOIN emp m ON e.mgr=m.empno LEFT JOIN dept d ON e.deptno=d.deptno WHERE e.hiredate<m.hiredate;
(5)列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
SELECT e.*, d.dname FROM emp e RIGHT JOIN dept d ON e.deptno=d.deptno;
(6)列出所有工作为文员的姓名及其部门名称,部门的人数。
SELECT e.ename, d.dname, z.cnt FROM emp e, (SELECT deptno, COUNT(*) cnt FROM emp GROUP BY deptno) z, dept d WHERE e.deptno=d.deptno AND z.deptno=d.deptno AND e.job='文员';
(7)列出最低薪金大于15000的各种工作及从事此工作的员工人数。
SELECT job, COUNT(*) FROM emp e GROUP BY job HAVING MIN(sal) > 15000;
(8)列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。
SELECT e.ename FROM emp e WHERE e.deptno = (SELECT deptno FROM dept WHERE dname='销售部');
(9)列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。
SELECT e.*, d.dname, m.ename, 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);
(10)列出与庞统从事相同工作的所有员工及部门名称。
SELECT e.*, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno AND e.job=(SELECT job FROM emp WHERE ename='庞统');
(11)列出薪金高于在部门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)
(12)列出在每个部门工作的员工数量、平均工资。
SELECT d.dname, e.cnt, e.avgsal FROM (SELECT deptno, COUNT(*) cnt, AVG(sal) avgsal FROM emp GROUP BY deptno) e, dept d WHERE e.deptno=d.deptno;
相关文章推荐
- AngularJS 表格案例(排序,批删,查询,全选)
- 4.案例:查询各个级别分销商的数量(饼图和柱状图)-Servlet(柱状图)
- mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
- sql多表查询之分组查询
- Oracle经典查询案例
- JSP案例_利用JBDC连接Mysql数据库,并查询数据
- SQL多表查询中的分页,字段组合综合实例解析
- Linq查询案例
- (JavaScript)案例二:多条件查询
- mysql 查询优化案例
- 第四章高级查询--上机题和经典案例
- 4.尚硅谷_佟刚_SSH 整合案例_查询所有员工信息
- 比较复杂的数据库查询案例,建表语句和测试数据
- SQL多表连接查询(详细实例)
- Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by
- 案例5-条件查询商品
- oracle心得3--多表查询@分组查询@子查询讲解与案例分析@经典练习题
- Elasticsearch search after分页查询案例分享
- elasticsearch中的mapping映射配置与查询典型案例
- 数据库的多表查询(详细案例分析)