多表查詢經典練習
--編寫多表查詢語句的一般過程
--(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
相關文章
- oracle心得3--多表查詢@分組查詢@子查詢講解與案例分析@經典練習題Oracle
- 多表查詢
- MYSQL學習筆記26: 多表查詢|子查詢MySql筆記
- 【MySQL】多表查詢MySql
- Django 多表查詢Django
- MySQL 多表查詢MySql
- 04多表查詢
- mysql多表查詢MySql
- oracle常用經典sql查詢OracleSQL
- sql 查詢經典語句SQL
- Mysql查詢練習MySql
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- MYSQL練習1: DQL查詢練習MySql
- mybatis學習 - 多表查詢的實現MyBatis
- SQL查詢的:子查詢和多表查詢SQL
- oracle常用經典SQL查詢 (轉)OracleSQL
- oracle常用經典SQL查詢(zt)OracleSQL
- Oracle-多表查詢Oracle
- ORM多表查詢下ORM
- MYSQL學習筆記24: 多表查詢(聯合查詢,Union, Union All)MySql筆記
- MySQL多表關聯查詢MySql
- MySQL 多表查詢分頁MySql
- JPA多表關聯查詢
- Hibernate hql 多表查詢
- thinkPHP多表聯合查詢PHP
- 五大經典查詢(1)_二叉排序樹查詢排序
- jpa動態查詢與多表聯合查詢
- sql查詢入門練習題SQL
- Hive -------- hive常見查詢練習Hive
- JPA 之 多表聯合查詢
- mySQL多表查詢與事務MySql
- JPA的多表複雜查詢
- mysql多表查詢如何實現MySql
- 多表查詢建表語句
- mysql資料庫多表查詢MySql資料庫
- 【janes】多表查詢 外連線
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- 34. 過濾條件、多表查詢、子查詢