根據Oracle數據庫scott模式下的emp表和dept表,完成下列操作
1、查詢20號部門的所有員工信息。
SELECT * FROM EMP WHERE DEPTNO=20;
2、查詢所有工種爲CLERK的員工的員工號、員工名和部門號。
SELECT EMPNO,ENAME,DEPTNO FROM EMP WHERE JOB='CLERK';
3、查詢獎金(COMM)高於工資(SAL)的員工信息。
SELECT * FROM EMP WHERE COMM > SAL;
4、查詢獎金高於工資的20%的員工信息。
SELECT * FROM EMP WHERE COMM > SAL*0.2;
5、查詢10號部門中工種爲Manager和20號部門中工種爲CLERK的員工信息。
SELECT * FROM EMP WHERE (JOB=’MANAGER’ AND DEPTNO=10) OR (JOB = ‘CLERK’ AND DEPTNO=20);
6、查詢所有工種不是Manager和CLERK,且工資大於或等於2000的員工的詳細信息。
SELECT * FROM EMP WHERE (JOB!=’MANAGER’ OR JOB=’CLERK’) AND SAL>=2000;
7、查詢有獎金的員工的不同工種。
SELECT JOB FROM EMP WHERE COMM>0 GROUP BY JOB;
8、查詢所有員工工資與獎金的和。
SELECT SUM(SAL)+SUM(COMM) FROM EMP;
9、查詢沒有獎金或獎金低於100的員工信息。
SELECT * FROM EMP WHERE NVL(COMM,0) <=100;
10、查詢各月倒數第二天入職的員工信息。
SELECT * FROM EMP WHERE LAST_DAY(HIREDATE) - HIREDATE = 1;
11、查詢工齡大於或等於10年的員工信息。
SELECT * FROM EMP WHERE MONTHS_BETWEEN(SYSDATE, HIREDATE)/12 >= 10;
12、查詢員工信息,要求以首字母大寫的方式顯示所有員工的姓名。
SELECT INITCAP(ENAME) FROM EMPLOYEES;
13、查詢員工名正好爲6個字符的員工的信息。
SELECT * FROM EMP WHERE LENGTH(ENAME) = 6;
14、查詢員工名字中不包含字母“S”的員工。
SELECT * FROM EMP WHERE ENAME NOT LIKE '%S%';
15、查詢員工姓名的第二個字母爲“M”的員工信息。
SELECT * FROM EMP WHERE ENAME LIKE '__M%';
16、查詢所有員工姓名的前三個字符
SELECT SUBSTR(ENAME,1,3) FROM EMP ;
17、查詢所有員工的姓名,如果包含字母s,則用“S”代替。
SELECT REPLACE(ENAME,'s','S') FROM EMP;
18、查詢員工的姓名個和入職日期,並按入職日期從先到後進行排序。
SELECT ENAME, HIREDATE FROM EMP ORDER BY HIREDATE ASC;
19、顯示所有員工的姓名、工種、工資和獎金,按工種降序排序,若工種相同則按工資
升序排序。
20、顯示所有員工的姓名、入職的年份和月份,按入職日期所在的月份排序,若月份相同
則按入職的年份排序。
SELECT ENAME,TO_CHAR(HIREDATE,'yyyy') YEAR, TO_CHAR(HIREDATE,'mm') MONTH FROM EMP ORDER BY
MONTH,YEAR;
21、查詢在2月份入職的員工信息
SELECT * FROM EMP WHERE TO_CHAR(HIREDATE, 'mm')=2;
22、查詢所有員工入職以來的工作年限,用**年**月**日的形式表示。
SELECT ENAME, (TRUNC((SYSDATE-HIREDATE)/365)||'年'||TRUNC(MOD((SYSDATEHIREDATE),
365)/30)||'月'||TRUNC(MOD(MOD((SYSDATE-HIREDATE),365),30))||'日') 入職年月日 FROM
EMP;
23、查詢至少有一個員工的部門信息。
SELECT * FROM DEPT WHERE DEPTNO IN (SELECT DEPTNO FROM EMP);
24、查詢工資比SMITH員工工資高的所有員工信息。
SELECT * FROM EMP WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME = 'SMITH');
25、查詢所有員工的姓名及其直接上級的姓名。
SELECT A.ENAME,B.ENAME AS MGR FROM EMP A,EMP B WHERE A.MGR = B.EMPNO;
26、查詢入職日期早於其直接領導的所有員工的信息。
SELECT A.* FROM EMP A,EMP B WHERE A.MGR=B.EMPNO AND A.HIREDATE <
B.HIREDATE;
27、查詢所有部門及其員工的信息,包括那些沒有員工的部門。
SELECT DEPT.*,EMP.* FROM DEPT,EMP WHERE EMP.DEPTNO(+)=DEPT.DEPTNO;
28、查詢所有員工及其部門信息,包括那些還不屬於任何部門的員工。
SELECT EMP.*,DEPT.* FROM DEPT,EMP WHERE EMP.DEPTNO=DEPT.DEPTNO(+);
29、查詢所有工種爲CLERK的員工的姓名及其部門名稱。
SELECT EMP.ENAME,DEPT.DNAME FROM EMP,DEPT WHERE JOB='CLERK' AND EMP.DEPTNO =
T.DEPTNO;
30、查詢最低工資大於2500的各種工作。
SELECT JOB,MIN(SAL) FROM EMP GROUP BY JOB HAVING MIN(SAL)>2500;
31、查詢平均工資低於2000的部門及其員工信息。
SELECT A.*,B.* FROM EMP A,DEPT B WHERE A.DEPTNO IN (
SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) < 2000) AND A.DEPTNO =
B.DEPTNO;
32、查詢在SALES部門工作的員工的姓名信息。
SELECT ENAME FROM EMP WHERE EMP.DEPTNO=(SELECT DEPTNO FROM DEPT WHERE
DNAME='SALES');
33、查詢工資高於公司平均工資的所有員工信息。
SELECT * FROM EMP WHERE SAL>(SELECT AVG(SAL) FROM EMP);
34、查詢與SMITH員工從事相同工作的所有員工信息。
SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME='SMITH');
35、列出工資等於30號部門中某個員工工資的所有員工的姓名和工資。
SELECT ENAME,SAL FROM EMP WHERE SAL IN (SELECT SAL FROM EMP WHERE DEPTNO=30)
AND DEPTNO!=30;
36、查詢工資高於30號部門中工作的所有員工的工資的員工姓名和工資。
SELECT ENAME,SAL FROM EMP WHERE SAL > (SELECT MAX(SAL) FROM EMP WHERE
DEPTNO=30);
37、查詢每個部門中的員工數量、平均工資和平均工作年限。
SELECT COUNT(*),AVG(SAL),AVG(SYSDATE-HIREDATE) FROM EMP GROUP BY DEPTNO;
38、查詢從事同一種工作但不屬於同一部門的員工信息。
SQL> SELECT DISTINCT A.* FROM EMP A,EMP B WHERE A.JOB=B.JOB AND A.DEPTNO!=B.DEPTNO ORDER BY A.JOB;
39、查詢各個部門的詳細信息以及部門人數、部門平均工資。
SELECT DEPT.*,PEOPLE,AVERAGESAL FROM DEPT,(SELECT COUNT(*) PEOPLE,AVG(SAL) AVERAGESAL,DEPTNO FROM EMP GROUP BY DEPTNO) B WHERE DEPT.DEPTNO=B.DEPTNO;
40、查詢各種工作的最低工資。
SELECT JOB,MIN(SAL) FROM EMP GROUP BY JOB;
41、查詢各個部門中不同工種的最高工資。
SELECT DEPTNO,JOB,MAX(SAL) FROM EMP GROUP BY DEPTNO,JOB ORDER BY DEPTNO,JOB;
42、查詢10號部門員工及其領導的信息。
SELECCT A.*,B.* FROM EMP A,EMP B WHERE A.MAR=B.EMPNO AND A.DEPTNO=10;
43、查詢各個部門的人數及其平均工資。
SELECT DEPTNO,COUNT(*),AVG(SAL) FROM EMP GROUP BY DEPTNO ORDER BY DEPTNO;
44、查詢工資爲某個部門平均工資的員工信息。
SELECT * FROM EMP WHERE SAL = ANY(SELECT COUNT(*) FROM EMP GROUP BY DEPTNO);
45、查詢工資高於本部門平均工資的員工的信息。
SELECT EMP.* FROM EMP,(SELECT DEPTNO,AVG(SAL) AVERAGE FROM EMP GROUP BY DEPTNO) B WHERE EMP.DEPTNO=B.DEPTNO AND EMP.SAL>B.AVERAGE;
46、查詢工資高於本部門平均工資的員工的信息及其部門的平均工資。
SELECT EMP.*,AVERAGE FROM EMP,(SELECT DEPTNO,AVG(SAL) AVERAGE FROM EMP GROUP BY DEPTNO) B WHERE EMP.DEPTNO=B.DEPTNO AND EMP.SAL>B.AVERAGE;
47、查詢工資高於20號部門某個員工工資的員工信息。
SELECT EMP.* FROM EMP WHERE EMP.SAL>ANY(SELECT SAL FROM EMP WHERE DEPTNO=20);
48、統計各個工種的員工人數與平均工資。
SELECT JOB,COUNT(*),AVG(SAL) FROM EMP GROUP BY JOB;
49、統計每個部門中各工種的人數與平均工資。
SELECT DEPTNO,COUNT(*) PEOPLE,JOB,AVG(SAL) FROM EMP GROUP BY DEPTNO,JOB ORDER BY DEPTNO;
50、查詢工資、獎金與10號部門某員工工資、獎金都相同的員工信息。
SELECT * FROM EMP WHERE (SAL,NVL(COMM,0)) IN (SELECT SAL,NVL(COMM,0) FROM EMP WHERE DEPTNO=10);
51、查詢部門人數大於5的部門的員工信息。
SELECT * FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING COUNT(*) > 5);
52、查詢所有員工工資都大於2000的部門的信息。
SELECT DEPT.* FROM DEPT WHERE DEPT.DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING MIN(SAL)>2000);
53、查詢所有員工工資都大於2000的部門的信息及其員工信息。
SELECT DEPT.*,EMP.* FROM DEPT,EMP WHERE DEPT.DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING MIN(SAL)>2000) AND DEPT.DEPTNO=EMP.DEPTNO;
54、查詢所有員工工資都在2000∽3000之間的部門的信息。
SELECT DEPT.* FROM DEPT WHERE DEPT.DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING MIN(SAL)>2000 AND MAX(SAL)<3000);
55、查詢所有工資在2000∽3000之間的員工所在部門的員工的信息。
SELECT DEPT.*,EMP.* FROM DEPT,EMP WHERE DEPT.DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING MIN(SAL)>2000 AND MAX(SAL)<3000) AND DEPT.DEPTNO=EMP.DEPTNO;
56、查詢每個員工的領導所在部門的信息。
SELECT A.ENAME,B.ENAME MANAGER,DEPT.* FROM DEPT,EMP A,EMP B WHERE A.MGR=B.EMPNO AND B.DEPTNO=DEPT.DEPTNO;
57、查詢人數最多的部門信息。
SELECT * FROM DEPT WHERE DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM EMP GROUP BY DEPTNO));
58、查詢30號部門中工資排序前3名的員工的信息。
SELECT * FROM (SELECT * FROM EMP WHERE DEPTNO=30 ORDER BY SAL DESC) WHERE ROWNUM <=3;
59、查詢所有員工中工資排序在5∽10名之間的員工的信息。
SELECT * FROM (SELECT EMP.*,ROWNUM RN FROM EMP ORDER BY SAL DESC) WHERE RN>=5 AND RN <=10;
60、查詢SMITH員工及其所有直接、間接下屬員工的信息。
SELECT * FROM EMP START WITH MGR=(SELECT MGR FROM EMP WHERE ENAME='SMITH') CONNECT BY PRIOR EMPNO=MGR;
61、查詢SCOTT員工及其直接、間接上級員工的信息。
SELECT * FROM EMP START WITH EMPNO=(SELECT MGR FROM EMP WHERE ENAME='SCOTT') CONNECT BY PRIOR MGR=EMPNO;
62、以樹狀結構查詢所有員工與領導之間的層次關係。
SELECT * FROM EMP START WITH MGR=(SELECT MGR FROM EMP WHERE ENAME='KING') CONNECT BY PRIOR EMPNO=MGR;
63、向emp中插入一條記錄,員工號爲1357,員工名爲Oracle,工資爲2050,部門號爲20,入職日期爲2002年5月10日。
INSERT INTO EMP(EMPNO,ENAME,SAL,DEPTNO,HIREDATE) VALUES(1357,'Oracle',2050,20,TO_DATE('2002-5-10','YYYY-MM-DD'));
64、向emp中插入一條記錄,員工號爲8000,員工名爲FAN,其他信息與SMITH員工的信息
相同。
INSERT INTO EMP SELECT 8000,'FAN',JOB,MGR,HIREDATE,SAL,COMM,DEPTNO FROM EMP WHERE ENAME='SMITH';
65、將各個部門員工的工資修改爲該員工所在部門平均工資加1000
UPDATE EMP A SET SAL=1000+(SELECT AVG(SAL) FROM EMP B GROUP BY DEPTNO HAVING B.DEPTNO=A.DEPTNO);