oracle一些經典sql(轉自網絡整理)第一篇--------1.列出至少有一個員工的所有部門。


oracle 一些經典sql(轉自網絡整理)
第一篇
--------1.列出至少有一個員工的所有部門。---------  
SQL> select dname from dept where deptno in(select deptno from emp); 
SQL> select dname from dept where deptno in(select deptno from emp group by deptno having count(deptno) >=1);  
--------2.列出薪金比“SMITH”多的所有員工。----------  
SQL> select * from emp where sal > (select sal from emp where ename = 'SMITH');  
--------3.列出所有員工的姓名及其直接上級的姓名。----------  
SQL> select a.ename,(select ename from emp b where b.empno=a.mgr) as boss_name from emp a;   
--------4.列出受雇日期早於其直接上級的所有員工。----------  
SQL> select a.ename from emp a where a.hiredate<(select hiredate from emp b where b.empno=a.mgr);   
--------5.列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門----------  
SQL> select a.dname,b.empno,b.ename,b.job,b.mgr,b.hiredate,b.sal,b.deptno  
     from dept a left join emp b on a.deptno=b.deptno;  
--------6.列出所有“CLERK”(辦事員)的姓名及其部門名稱。----------  
SQL> select a.ename,b.dname from emp a join dept b on a.deptno=b.deptno and a.job='CLERK';  
--------7.列出最低薪金大於1500的各種工作。----------  
SQL> select distinct job as HighSalJob from emp group by job having min(sal)>1500;   
--------8.列出在部門“SALES”(銷售部)工作的員工的姓名,假定不知道銷售部的部門編號。----------  
SQL> select ename from emp where deptno=(select deptno from dept where dname='SALES');   
--------9.列出薪金高於公司平均薪金的所有員工。----------  
SQL> select ename from emp where sal>(select avg(sal) from emp);   
--------10.列出與“SCOTT”從事相同工作的所有員工。--------  
SQL> select ename from emp where job=(select job from emp where ename='SCOTT');  

--------11.列出薪金等於部門30中員工的薪金的所有員工的姓名和薪金。---------  
SQL> select a.ename,a.sal from emp a where a.sal in (select b.sal  
     from emp b where b.deptno=30) and a.deptno$amp;<amp;$gt;30;   <br="">--------12.列出薪金高於在部門30工作的所有員工的薪金的員工姓名和薪金。---------  
SQL> select ename,sal from emp where sal>(select max(sal) from emp where deptno=30);   

--------13.列出在每個部門工作的員工數量、平均工資和平均服務期限。---------  
SQL> select (select b.dname from dept b where a.deptno=b.deptno) as deptname ,count(deptno) as deptcount,avg(sal) as deptavgsal  
    from emp a group by deptno;     
--------14.列出所有員工的姓名、部門名稱和工資。---------  
SQL> select a.ename,(select b.dname from dept b where b.deptno=a.deptno) as deptname,sal from emp a; 
--------15.列出所有部門的詳細信息和部門人數。---------  
SQL> select a.deptno,a.dname,a.loc,(select count(deptno) from emp b where b.deptno=a.deptno group by b.deptno) as deptcount from dept a;   
  --------16.列出各種工作的最低工資。---------  
SQL> select job,avg(sal) from emp group by job;  
--------17.列出各個部門的MANAGER(經理)的最低薪金。--------  
SQL> select deptno,min(sal) from emp where job='MANAGER' group by deptno; 
--------18.列出所有員工的年工資,按年薪從低到高排序。---------  
SQL> select ename,(sal+nvl(comm,0))*12 as salpersal from emp order by salpersal;  

第二篇
--------1. 找出EMP表中的姓名(ENAME)第三個字母是A 的員工姓名。---------  
SQL> SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE '__A%';  
-------2. 找出EMP表員工名字中含有A 和N的員工姓名。----------  
SQL> SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE '%A%' AND ENAME LIKE '%N%';
--------3. 找出所有有佣金的員工,列出姓名、工資、佣金,顯示結果按工資從小到大,佣金從大到小。----------
SQL> SELECT ENAME,SAL + COMM AS WAGE,COMM  
    FROM SCOTT.EMP  
    ORDER BY WAGE,COMM DESC;  
-------4. 列出部門編號為20的所有職位。----------  
SQL> SELECT DISTINCT JOB FROM EMP WHERE DEPTNO = 20;  
-------5. 列出不屬於SALES 的部門。----------  
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME $amp;<amp;$gt; 'sales'; ="" <br="">或者
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME != 'SALES';  
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME NOT IN('SALES');  
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME NOT LIKE 'SALES'; 
---6. 顯示工資不在1000 到1500 之間的員工信息:名字、工資,按工資從大到小排序。---------  
SQL> SELECT ENAME,SAL + COMM AS WAGE FROM SCOTT.EMP  
    WHERE SAL + COMM NOT BETWEEN 1000 AND 1500  
    ORDER BY WAGE DESC;  
--或者  
SQL> SELECT ENAME,SAL + COMM AS WAGE FROM SCOTT.EMP  
  2  WHERE SAL + COMM < 1000 OR SAL + COMM > 1500  
  3  ORDER BY WAGE DESC;  
  
  /*----- 7. 顯示職位為MANAGER 和SALESMAN,年薪在15000 和20000 之間的員工的信息:名字、職位、年薪。----------*/  
SQL> SELECT ENAME 姓名,JOB 職位,(SAL + COMM) * 12 AS 年薪  
  2  FROM SCOTT.EMP  
  3  WHERE (SAL + COMM) * 12 BETWEEN 15000 AND 20000  
  4  AND JOB IN('MANAGER','SALESMAN'); 
  
  /*----- 8. 說明以下兩條SQL語句的輸出結果:  
    SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL;  
    SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL;  
--說明:IS NULL是判斷某個字段是否為空,為空並不等價於為空字符串或為數字0;  
--而 =NULL 是判斷某個值是否等於 NULL,NULL = NULL和NULL $amp;<amp;$gt; null都為="" false。<br="">
第三篇

/*--------1、改變NLS_LANG 的值,讓SELECT TO_CHAR(SALARY,'L99,999.99') FROM HR.EMPLOYEES WHERE ROWNUM < 5 輸出結果的貨幣單位是¥和$。---------*/  
-----在沒有設置NLS_LANG的情況下:  

SQL> SELECT TO_CHAR(SALARY,'L99,999.99')  
     FROM HR.EMPLOYEES  
     WHERE ROWNUM < 5;  
   
   /*--------2、列出前五位每個員工的名字,工資、漲薪后的的工資(漲幅為8%),以“元”為單位進行四舍五入。---------*/  

SQL> SELECT FIRST_NAME,SALARY,ROUND(SALARY * 1.08) FROM HR.EMPLOYEES  
     WHERE ROWNUM <=5;  
     
/*--------3、找出誰是最高領導,將名字按大寫形式顯示。---------*/  
SQL> SELECT UPPER(FIRST_NAME || ' ' || LAST_NAME) AS NAME 
     FROM HR.EMPLOYEES  
     WHERE MANAGER_ID IS NULL;  
/*--------4、找出David 的直接領導的名字。---------*/  
SQL> SELECT UPPER(FIRST_NAME ||' ' || LAST_NAME) AS NAME 
     FROM HR.EMPLOYEES  
     WHERE EMPLOYEE_ID IN(  
     SELECT MANAGER_ID FROM HR.EMPLOYEES  
     WHERE FIRST_NAME = 'David' AND LAST_NAME = 'Austin');        
/*--------5、First_Name 為Alexander,LAST_NAME為Hunold領導誰。(誰向David 報告)。---------*/  
SQL> SELECT UPPER(FIRST_NAME ||' ' || LAST_NAME) AS NAME 
     FROM HR.EMPLOYEES  
     WHERE MANAGER_ID IN(  
     SELECT EMPLOYEE_ID FROM HR.EMPLOYEES  
     WHERE FIRST_NAME = 'Alexander' AND LAST_NAME = 'Hunold');  
     
/*--------6、哪些員工的工資高於他直接上司的工資,列出員工的名字和工資,上司的名字和工資。---------*/  

SQL> SELECT E.FIRST_NAME,E.SALARY,M.FIRST_NAME,M.SALARY  
    FROM EMPLOYEES E,EMPLOYEES M  
    WHERE E.MANAGER_ID = M.EMPLOYEE_ID AND E.SALARY > M.SALARY;  

--要是只列出員工的名字與工資的話,還可以這樣:  

SQL> SELECT E.FIRST_NAME,E.SALARY  
   FROM EMPLOYEES E WHERE E.SALARY $amp;>amp;$nbsp; 
  (SELECT M.SALARY FROM EMPLOYEES M   
   WHERE E.MANAGER_ID = M.EMPLOYEE_ID); 
  /*--------7、哪些員工和Chen(LAST_NAME)同部門。---------*/  

SQL> SELECT FIRST_NAME FROM EMPLOYEES  
  WHERE DEPARTMENT_ID IN 
  (SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE LAST_NAME = 'Chen')  
  AND LAST_NAME $amp;<amp;$gt; 'chen'; ="" <br="">  --或者--  

SQL> SELECT E1.FIRST_NAME FROM EMPLOYEES E1,EMPLOYEES E2  
    WHERE E1.DEPARTMENT_ID = E2.DEPARTMENT_ID  
    AND E2.LAST_NAME = 'Chen' AND E1.LAST_NAME $amp;<amp;$gt; 'chen'; ="" <br="">  /*--------8、哪些員工跟De Haan(LAST_NAME)做一樣職位。---------*/  
SQL> SELECT FIRST_NAME FROM EMPLOYEES  
    WHERE JOB_ID IN 
    (SELECT JOB_ID FROM EMPLOYEES  
    WHERE LAST_NAME = 'De Haan')  
    AND LAST_NAME $amp;<amp;$gt; 'de="" haan'; ="" <br="">   --或者--  

SQL> SELECT E1.FIRST_NAME FROM EMPLOYEES E1,EMPLOYEES E2  
    WHERE E1.JOB_ID = E2.JOB_ID   
    AND E2.LAST_NAME = 'De Haan' AND E1.LAST_NAME $amp;<amp;$gt; 'de="" haan'; ="" <br="">  /*--------9、哪些員工跟Hall(LAST_NAME)不在同一個部門。---------*/  

SQL> SELECT FIRST_NAME || ' ' || LAST_NAME FROM HR.EMPLOYEES  
    WHERE DEPARTMENT_ID NOT IN(  
    SELECT DEPARTMENT_ID FROM HR.EMPLOYEES  
    WHERE LAST_NAME = 'Hall');  
   
   --或者:  

SQL> SELECT e1.FIRST_NAME FROM EMPLOYEES e1,EMPLOYEES e2  
    WHERE e1.DEPARTMENT_ID = e2.DEPARTMENT_ID(+)  
    and e2.LAST_NAME(+) = 'Hall' 
    and e2.LAST_NAME IS NULL;  
  /*-------10、哪些員工跟William(FIRST_NAME)、Smith(LAST_NAME)做不一樣的職位。--------*/  

SQL> SELECT FIRST_NAME || ' ' || LAST_NAME FROM HR.EMPLOYEES  
    WHERE JOB_ID $amp;<amp;$gt; (select="" distinct="" job_id="" from="" employees ="" <br="">    WHERE FIRST_NAME = 'William' AND LAST_NAME = 'Smith');   
/*--------11、顯示有提成的員工的信息:名字、提成、所在部門名稱、所在地區的名稱。---------*/  

SQL> SELECT E.FIRST_NAME || ' ' || E.LAST_NAME AS NAME,  
  E.COMMISSION_PCT,D.DEPARTMENT_NAME,L.CITY  
  FROM HR.EMPLOYEES E,HR.DEPARTMENTS D,HR.LOCATIONS L  
  WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID  
  AND D.LOCATION_ID = L.LOCATION_ID  
  AND E.COMMISSION_PCT IS NOT NULL;  

/*--------12、顯示Executive部門有哪些職位。---------*/  
SQL> SELECT DISTINCT E.JOB_ID FROM HR.EMPLOYEES E,HR.DEPARTMENTS D  
    WHERE D.DEPARTMENT_ID = E.DEPARTMENT_ID  
    AND D.DEPARTMENT_NAME = 'Executive';  
  /*--------13、整個公司中,最高工資和最低工資相差多少。---------*/  
SQL> SELECT MAX(SALARY) - MIN(SALARY) FROM HR.EMPLOYEES;  
/*--------14、提成大於0 的人數。---------*/  
SQL> SELECT COUNT(*) AS 提成大小0的人數 FROM HR.EMPLOYEES  
    WHERE COMMISSION_PCT > 0;  
  --或者  

SQL> SELECT COUNT(COMMISSION_PCT) AS 提成大小0的人數    
     FROM HR.EMPLOYEES  
     WHERE COMMISSION_PCT > 0;  
  /*--------15、顯示整個公司的最高工資、最低工資、工資總和、平均工資保留到整數位。---------*/  

SQL> SELECT MAX(NVL(SALARY,0)) AS 最高工資,  
             MIN(NVL(SALARY,0)) AS 最低工資,  
             SUM(NVL(SALARY,0)) AS 工資總和,  
             ROUND(AVG(NVL(SALARY,0))) AS 平均工資  
    FROM HR.EMPLOYEES;  
  /*--------16、整個公司有多少個領導。---------*/  
SQL> SELECT COUNT(DISTINCT(MANAGER_ID))  FROM HR.EMPLOYEES  
   2  WHERE MANAGER_ID IS NOT NULL;  
   /*--------17、列出在同一部門入職日期晚但工資高於其他同事的員工:  
名字、工資、入職日期。---------*/  

SQL> SELECT DISTINCT E1.FIRST_NAME || ' ' || E1.LAST_NAME AS 姓名,  
          E1.SALARY AS 工資,E1.HIRE_DATE AS 入職日期  
   FROM HR.EMPLOYEES E1,HR.EMPLOYEES E2  
   WHERE E1.DEPARTMENT_ID = E2.DEPARTMENT_ID  
   AND E1.HIRE_DATE > E2.HIRE_DATE  
   AND E1.SALARY > E2.SALARY  
   ORDER BY 工資 DESC;  
第四篇
/*--------1、各個部門平均、最大、最小工資、人數,按照部門號升序排列。---------*/  
SQL> SELECT DEPARTMENT_ID AS 部門號,AVG(SALARY) AS 平均工資  
           ,MAX(SALARY) AS 最高工資,MIN(SALARY)  AS 最低工資  
           ,COUNT(*) AS 人數  
    FROM EMPLOYEES  
    GROUP BY DEPARTMENT_ID  
    ORDER BY DEPARTMENT_ID ASC;  
  /*--------2、各個部門中工資大於5000的員工人數。---------*/  
SQL> SELECT DEPARTMENT_ID,COUNT(*) FROM EMPLOYEES  
     WHERE SALARY > 5000  
     GROUP BY DEPARTMENT_ID;  
   /*--------3、各個部門平均工資和人數,按照部門名字升序排列。---------*/  

SQL> SELECT DPTNAME,AVG(SALARY),COUNT(*) FROM 
          (SELECT 
              (SELECT DEPT.DEPARTMENT_NAME FROM DEPARTMENTS DEPT  
              WHERE DEPT.DEPARTMENT_ID = EMP.DEPARTMENT_ID) DPTNAME,  
              EMP.SALARY  
   FROM EMPLOYEES EMP)  
   GROUP BY DPTNAME  
   ORDER BY DPTNAME;  
  --或者--  

SQL> SELECT DEPT.DEPARTMENT_NAME,AVG(EMP.SALARY),COUNT(*)  
     FROM EMPLOYEES EMP,DEPARTMENTS DEPT  
     WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID  
     GROUP BY DEPT.DEPARTMENT_NAME  
     ORDER BY DEPT.DEPARTMENT_NAME;  
   /*--------4、列出每個部門中有同樣工資的員工的統計信息,  
  列出他們的部門號,工資,人數。---------*/  

SQL> SELECT EMP1.DEPARTMENT_ID,EMP1.SALARY,COUNT(*) CNT  
    FROM   EMPLOYEES EMP1,EMPLOYEES EMP2  
    WHERE  EMP1.DEPARTMENT_ID = EMP2.DEPARTMENT_ID AND 
            EMP1.SALARY = EMP2.SALARY  
            AND EMP1.EMPLOYEE_ID $amp;<amp;$gt; emp2.employee_id ="" <br="">    GROUP BY EMP1.DEPARTMENT_ID,EMP1.SALARY;  
   /*--------5、列出同部門中工資高於1000 的員工數量超過2 人的部門,  
顯示部門名字、地區名稱。---------*/  

SQL> SELECT D.DEPARTMENT_NAME,L.CITY,COUNT(*)  
    FROM EMPLOYEES E,DEPARTMENTS D,LOCATIONS L  
    WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID AND 
           D.LOCATION_ID   = L.LOCATION_ID    AND 
           E.SALARY > 1000  
    GROUP BY D.DEPARTMENT_NAME,L.CITY  
    HAVING COUNT(*) > 2;  
   /*--------6、哪些員工的工資,高於整個公司的平均工資,  
  列出員工的名字和工資(降序)。---------*/  

SQL> SELECT FIRST_NAME || ' ' || LAST_NAME,SALARY  
   FROM EMPLOYEES  
   WHERE SALARY > (  
         SELECT AVG(SALARY)  
         FROM EMPLOYEES  
         )  
   ORDER BY SALARY DESC;   
   
   /*--------7、哪些員工的工資,介於50號 和80號 部門平均工資之間。---------*/  

SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY  
    FROM EMPLOYEES  
    WHERE SALARY  
    BETWEEN 
        (SELECT AVG(SALARY) FROM EMPLOYEES  
         WHERE DEPARTMENT_ID = 50)  
    AND (SELECT AVG(SALARY) FROM EMPLOYEES  
         WHERE DEPARTMENT_ID = 80);  
  /*--------8、所在部門平均工資高於5000 的員工名字。---------*/  

SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY  
    FROM EMPLOYEES  
    WHERE DEPARTMENT_ID IN 
          (SELECT DEPARTMENT_ID FROM EMPLOYEES  
           GROUP BY DEPARTMENT_ID  
           HAVING AVG(SALARY) > 5000);  
   /*--------9、列出各個部門中工資最高的員工的信息:名字、部門號、工資。---------*/  

SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME 
          ,SALARY,DEPARTMENT_ID  
   FROM EMPLOYEES  
   WHERE (DEPARTMENT_ID,SALARY) IN 
         (SELECT DEPARTMENT_ID,MAX(SALARY)  
          FROM EMPLOYEES  
          GROUP BY DEPARTMENT_ID);   
   
   /*--------10、最高的部門平均工資是多少。---------*/  
SQL> SELECT MAX(AVGSALARY)  
   FROM(SELECT DEPARTMENT_ID,AVG(SALARY) AVGSALARY  
     FROM EMPLOYEES  
     GROUP BY DEPARTMENT_ID);     
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM