--编写多表查询语句的一般过程 --(1)、分析句子要涉及到哪些表 --(2)、对应的表中要查询哪些关联字段 --(3)、确定连接条件或筛选条件 --(4)、写成完整的SQL查询语句 --1、查询出每一位雇员的姓名、职位、以及领导的姓名。 SELECT e.ename 雇佣姓名,e.job 职位,m.ename 领导姓名 FROM EMP e,EMP m WHERE e.mgr = m.empno; --结果 雇佣姓名 职位 领导姓名 ---------- --------- ---------- FORD ANALYST JONES SCOTT ANALYST JONES TURNER SALESMAN BLAKE ALLEN SALESMAN BLAKE WARD SALESMAN BLAKE JAMES CLERK BLAKE MARTIN SALESMAN BLAKE MILLER CLERK CLARK ADAMS CLERK SCOTT BLAKE MANAGER KING JONES MANAGER KING CLARK MANAGER KING SMITH CLERK FORD 13 rows selected --2、查询每个雇佣的雇佣编号,姓名、基本工资、职位、领导的姓名、部门名称及位置 select e.empno 编号,e.ename 姓名,e.sal 基本工资,e.job 职位,m.ename 领导姓名, d.dname 部门名称, d.loc 所在位置 from emp e LEFT OUTER JOIN emp m ON e.mgr = m.empno, dept d where d.deptno = e.deptno; --结果 编号 姓名 工资 职位 领导姓名 部门名称 所在位置 ----- ---------- --------- --------- ---------- -------------- ------------- 7369 SMITH 800.00 CLERK FORD RESEARCH DALLAS 7499 ALLEN 1600.00 SALESMAN BLAKE SALES CHICAGO 7521 WARD 1250.00 SALESMAN BLAKE SALES CHICAGO 7566 JONES 2975.00 MANAGER KING ACCOUNTING NEW YORK 7654 MARTIN 1250.00 SALESMAN BLAKE SALES CHICAGO 7698 BLAKE 2850.00 MANAGER KING ACCOUNTING NEW YORK 7782 CLARK 2450.00 MANAGER KING ACCOUNTING NEW YORK 7788 SCOTT 3000.00 ANALYST JONES RESEARCH DALLAS 7844 TURNER 1500.00 SALESMAN BLAKE SALES CHICAGO 7876 ADAMS 1100.00 CLERK SCOTT RESEARCH DALLAS 7900 JAMES 950.00 CLERK BLAKE SALES CHICAGO 7902 FORD 3000.00 ANALYST JONES RESEARCH DALLAS 7934 MILLER 1300.00 CLERK CLARK ACCOUNTING NEW YORK 7839 KING 5000 PRESIDENT (null) ACCOUNTING NEW YORK 14 rows selected --要求查询出每一个雇员的编号、姓名、工资、部门名称、工资在所在公司的工资等级 SELECT e.empno,e.ename,e.sal,d.dname,sg.grade FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND sg.hisal >=e.sal AND sg.losal <=e.sal; --结果 EMPNO ENAME SAL DNAME GRADE ----- ---------- --------- -------------- ---------- 7369 SMITH 800.00 RESEARCH 1 7900 JAMES 950.00 SALES 1 7876 ADAMS 1100.00 RESEARCH 1 7654 MARTIN 1250.00 SALES 2 7521 WARD 1250.00 SALES 2 7934 MILLER 1300.00 ACCOUNTING 2 7844 TURNER 1500.00 SALES 3 7499 ALLEN 1600.00 SALES 3 7782 CLARK 2450.00 ACCOUNTING 4 7698 BLAKE 2850.00 SALES 4 7566 JONES 2975.00 RESEARCH 4 7902 FORD 3000.00 RESEARCH 4 7788 SCOTT 3000.00 RESEARCH 4 7839 KING 5000.00 ACCOUNTING 5 14 rows selected --或者 SELECT e.empno,e.ename,e.sal,d.dname,sg.grade FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND e.sal BETWEEN sg.losal AND sg.hisal; --结果 EMPNO ENAME SAL DNAME GRADE ----- ---------- --------- -------------- ---------- 7839 KING 5000.00 ACCOUNTING 5 7902 FORD 3000.00 RESEARCH 4 7788 SCOTT 3000.00 RESEARCH 4 7566 JONES 2975.00 RESEARCH 4 7698 BLAKE 2850.00 SALES 4 7782 CLARK 2450.00 ACCOUNTING 4 7499 ALLEN 1600.00 SALES 3 7844 TURNER 1500.00 SALES 3 7934 MILLER 1300.00 ACCOUNTING 2 7521 WARD 1250.00 SALES 2 7654 MARTIN 1250.00 SALES 2 7876 ADAMS 1100.00 RESEARCH 1 7900 JAMES 950.00 SALES 1 7369 SMITH 800.00 RESEARCH 1 --还或者 SELECT e.empno,e.ename,e.sal,d.dname,sg.grade,DECODE(sg.grade,'1','第一等级工资','2','第二等级工资','3','第三等级工资','4','第四等级工资','5','第五等级工资') 等级 FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND e.sal BETWEEN sg.losal AND sg.hisal; --结果 EMPNO ENAME SAL DNAME GRADE 等级 ----- ---------- --------- -------------- ---------- ------------ 7839 KING 5000.00 ACCOUNTING 5 第五等级工资 7902 FORD 3000.00 RESEARCH 4 第四等级工资 7788 SCOTT 3000.00 RESEARCH 4 第四等级工资 7566 JONES 2975.00 RESEARCH 4 第四等级工资 7698 BLAKE 2850.00 SALES 4 第四等级工资 7782 CLARK 2450.00 ACCOUNTING 4 第四等级工资 7499 ALLEN 1600.00 SALES 3 第三等级工资 7844 TURNER 1500.00 SALES 3 第三等级工资 7934 MILLER 1300.00 ACCOUNTING 2 第二等级工资 7521 WARD 1250.00 SALES 2 第二等级工资 7654 MARTIN 1250.00 SALES 2 第二等级工资 7876 ADAMS 1100.00 RESEARCH 1 第一等级工资 7900 JAMES 950.00 SALES 1 第一等级工资 7369 SMITH 800.00 RESEARCH 1 第一等级工资 14 rows selected --左右连接 --当(+)在连接条件的左边的时候,表示的是右连接 --当(+)在连接条件的右边的时候,表示的是左连接 --3、查询每个雇员的姓名和领导的姓名 SELECT e.ename 雇员姓名,m.ename 领导姓名 FROM emp e,emp m WHERE m.empno(+) = e.mgr; --结果 雇员姓名 领导姓名 ---------- ---------- FORD JONES SCOTT JONES JAMES BLAKE TURNER BLAKE MARTIN BLAKE WARD BLAKE ALLEN BLAKE MILLER CLARK ADAMS SCOTT CLARK KING BLAKE KING JONES KING SMITH FORD KING 14 rows selected --4、统计出领取佣金和不领取佣金的雇员人数和平均工资 SELECT comm,COUNT(empno),AVG(sal) FROM emp GROUP BY comm;--(此语句不完善,那位看了之后又什么想法的话欢迎大家回复) --结果 COMM COUNT(EMPNO) AVG(SAL) --------- ------------ ---------- 10 2342.5 1400.00 1 1250 500.00 1 1250 300.00 1 1600 0.00 1 1500 --5、按照职位分组,求出每个职位的最高工资、最低工资以及平均工资 SELECT job ,COUNT(empno),MAX(sal),MIN(sal),AVG(sal) FROM emp GROUP BY job; --结果 JOB COUNT(EMPNO) MAX(SAL) MIN(SAL) AVG(SAL) --------- ------------ ---------- ---------- ---------- CLERK 4 1300 800 1037.5 SALESMAN 4 1600 1250 1400 PRESIDENT 1 5000 5000 5000 MANAGER 3 2975 2450 2758.33333 ANALYST 2 3000 3000 3000 --6、统计平均工资最高和最低 SELECT MAX(AVG(sal)),MIN(AVG(sal)) FROM EMP GROUP BY job; --结果 MAX(AVG(SAL)) MIN(AVG(SAL)) ------------- ------------- 5000 1037.5 --7、查询出每个部门的名称、部门人数、平均工资 SELECT d.dname,COUNT(e.empno),NVL(AVG(e.sal),0) FROM emp e,dept d WHERE d.deptno = e.deptno(+) GROUP BY d.dname; --结果 DNAME COUNT(E.EMPNO) NVL(AVG(E.SAL),0) -------------- -------------- ----------------- ACCOUNTING 3 2916.66666666667 OPERATIONS 0 0 RESEARCH 5 2175 SALES 6 1566.66666666667 --8、查询出每个部门的名称、位置、部门人数、平均工资(这是一个多字段分组查询) SELECT d.deptno,d.dname,d.loc,COUNT(e.empno),NVL(AVG(sal),0) FROM emp e, dept d WHERE d.deptno = e.deptno(+) GROUP BY d.deptno,d.dname,d.loc ; DEPTNO DNAME LOC COUNT(E.EMPNO) NVL(AVG(SAL),0) ------ -------------- ------------- -------------- --------------- 20 RESEARCH DALLAS 5 2175 40 OPERATIONS BOSTON 0 0 10 ACCOUNTING NEW YORK 3 2916.6666666666 30 SALES CHICAGO 6 1566.6666666666 --9、统计平均工资大于2000的部门的详细信息 SELECT d.*,AVG(e.sal) FROM emp e,dept d WHERE d.deptno = e.deptno GROUP BY d.deptno,d.dname,d.loc HAVING AVG(e.sal)>2000; --结果 DEPTNO DNAME LOC AVG(E.SAL) ------ -------------- ------------- ---------- 20 RESEARCH DALLAS 2175 10 ACCOUNTING NEW YORK 2916.66666 --10、显示非销售人员工资名称及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于5000, --给出的结果按月工资的合计升序排序: SELECT job,SUM(sal) FROM emp GROUP BY job HAVING SUM(sal)>5000 ORDER BY SUM(sal); --结果 JOB SUM(SAL) --------- ---------- SALESMAN 5600 ANALYST 6000 MANAGER 8275 --11、计算出工资比SMITH的要高的员工详细信息 SELECT * FROM EMP WHERE sal > (SELECT sal FROM EMP WHERE ename='SMITH'); --结果 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30 7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30 7566 JONES MANAGER 7839 02-四月-81 2975.00 20 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20 7839 KING PRESIDENT 17-十一月-81 5000.00 10 7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20 7900 JAMES CLERK 7698 03-十二月-81 950.00 30 7902 FORD ANALYST 7566 03-十二月-81 3000.00 20 7934 MILLER CLERK 7782 23-一月-82 1300.00 10 13 rows selected --12、查询出工资高于公司平均工资的员工详细信息 SELECT * FROM EMP WHERE sal >(SELECT AVG(sal) FROM EMP); --结果 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7566 JONES MANAGER 7839 02-四月-81 2975.00 20 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20 7839 KING PRESIDENT 17-十一月-81 5000.00 10 7902 FORD ANALYST 7566 03-十二月-81 3000.00 20 6 rows selected