ㅤㅤㅤ

기본 셀렉트문 연습문제 잡다한 문제! 본문

プログラミング/Oracle

기본 셀렉트문 연습문제 잡다한 문제!

ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ 2017. 6. 22. 09:44


 SELECT EMP_NAME "직원번호", EMP_NAME "직원명", JIKUP "직급",SALARY||'만원' "연봉" , HIRE_DATE "입사일" FROM EMPLOYEE;


 SELECT EMP_NAME "사원명", JIKUP "직급", SALARY||'만원' "연봉", SALARY*0.12||'만원' "세금" FROM EMPLOYEE;


 SELECT DISTINCT JIKUP "직급" FROM EMPLOYEE;


 SELECT DISTINCT JIKUP "직급",DEP_NO "직원번호" FROM EMPLOYEE;


 SELECT * FROM EMPLOYEE WHERE SALARY>=3000;


 SELECT COUNT(*)FROM EMPLOYEE WHERE SALARY>=3000;


 SELECT * FROM EMPLOYEE WHERE SALARY*0.88>=3000;


 SELECT * FROM EMPLOYEE WHERE ((SALARY)-(SALARY*0.12))>=3000;


 SELECT * FROM EMPLOYEE ORDER BY SALARY ASC ;


 SELECT * FROM EMPLOYEE ORDER BY 5 ASC ;


 SELECT * FROM EMPLOYEE ORDER BY 5 ;


 SELECT * FROM EMPLOYEE ORDER BY DEP_NO ASC,SALARY DESC;


 SELECT * FROM EMPLOYEE ORDER BY DEP_NO ,SALARY DESC;


 SELECT * FROM EMPLOYEE ORDER BY DEP_NO ,EMP_NO,SALARY DESC;


 SELECT * FROM EMPLOYEE WHERE (JIKUP='부장' OR JIKUP='과장')AND SALARY<3000 ;


 SELECT * FROM EMPLOYEE WHERE (JIKUP='부장' OR JIKUP='과장')AND 3000>SALARY ;


 SELECT * FROM EMPLOYEE WHERE (JIKUP IN('부장','과장'))AND 3000>SALARY ;


 SELECT * FROM EMPLOYEE WHERE JIKUP IN('부장','과장')AND 3000>SALARY ;


 SELECT * FROM EMPLOYEE WHERE SALARY>=2500 AND SALARY<=3200 ;


 SELECT * FROM EMPLOYEE WHERE SALARY>=2500 OR SALARY<=3200 ;


 SELECT * FROM EMPLOYEE WHERE SALARY BETWEEN 2500 AND 3200;


 SELECT * FROM EMPLOYEE WHERE (SALARY BETWEEN 2500 AND 3200) AND SALARY != 3200;


 SELECT * FROM EMPLOYEE WHERE JIKUP !='대리' AND SALARY>=3200;


 SELECT * FROM EMPLOYEE WHERE MGR_EMP_NO IS NULL;


 SELECT * FROM EMPLOYEE WHERE MGR_EMP_NO IS NOT NULL;


 SELECT * FROM EMPLOYEE ORDER BY


    CASE

        WHEN JIKUP='사장' THEN 1

        WHEN JIKUP='부장' THEN 2

        WHEN JIKUP='과장' THEN 3

        WHEN JIKUP='대리' THEN 4

        WHEN JIKUP='사원' THEN 5 END ASC;


         SELECT * FROM EMPLOYEE ORDER BY SALARY DESC ;



 SELECT DEP_NO "부서번호", AVG(SALARY) FROM EMPLOYEE GROUP BY DEP_NO ;


 SELECT DEP_NO "부서번호", SUM(SALARY) FROM EMPLOYEE GROUP BY DEP_NO ;


 SELECT DEP_NO "부서번호", AVG(SALARY) "부서별"  FROM EMPLOYEE GROUP BY DEP_NO HAVING AVG(SALARY) >=2500 ;


 SELECT  SUBSTR(EMP_NAME,1,1) FROM EMPLOYEE ;


 SELECT  *  FROM EMPLOYEE WHERE  (SUBSTR(EMP_NAME,1,1))='무';


 SELECT  *  FROM EMPLOYEE WHERE  EMP_NAME LIKE '김%';


 SELECT * FROM EMPLOYEE WHERE SUBSTR(JUMIN_NUM,7,1)='1';


 SELECT * FROM EMPLOYEE WHERE JUMIN_NUM LIKE '______1%';


 SELECT * FROM EMPLOYEE WHERE SUBSTR(JUMIN_NUM,7,1)='2'AND 70<=SUBSTR(JUMIN_NUM,1,2)<=80;


 SELECT * FROM EMPLOYEE WHERE SUBSTR(JUMIN_NUM,7,1)='2'AND SUBSTR(JUMIN_NUM,3,2)='11';


 SELECT * FROM EMPLOYEE WHERE SUBSTR(JUMIN_NUM,7,1)='2'AND SUBSTR(JUMIN_NUM,3,2)='12';


 SELECT * FROM EMPLOYEE WHERE JUMIN_NUM LIKE '______1%';


 SELECT COUNT(*)||'명' "3000만원 이상"  FROM EMPLOYEE WHERE TRUNC(SALARY,-3)=3000;


 SELECT NVL(TO_CHAR(EMP_NO),'없음') FROM CUSTOMER;


 SELECT NVL(EMP_NO || '', '없음') "확인" FROM CUSTOMER;


 SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD-DAY') FROM DUAL;


 SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL;


 SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD-DAY  HH24:MI:SS') FROM DUAL;


 SELECT TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE = KOREAN') "오늘의 날짜",

 TO_CHAR(SYSDATE, 'YYYY-MM-DD-DAY  HH24:MI:SS','NLS_DATE_LANGUAGE = KOREAN')"날짜 들어갑니다."FROM DUAL;


 SELECT MIN ( SALARY )"최소값",MAX ( SALARY )"최대값",AVG ( SALARY )"평균",SUM ( SALARY )"합",COUNT ( * )"숫자" FROM EMPLOYEE;


 SELECT EMP_NO "직원번호", EMP_NAME "직원의 이름", TO_CHAR (HIRE_DATE, 'Q')||'분기' "입사분기" FROM EMPLOYEE;


 SELECT EMP_NO "직원번호", EMP_NAME "직원의 이름", CEIL((SYSDATE-HIRE_DATE)/365)||'년차' "근무년차" ,HIRE_DATE "입사일"  FROM EMPLOYEE;


 SELECT EMP_NO "직원번호", EMP_NAME "직원의 이름", FLOOR((SYSDATE-HIRE_DATE)/365)||'년차' "근무년차" FROM EMPLOYEE;


 SELECT EMP_NO "직원번호", EMP_NAME "직원의 이름", CASE SUBSTR(JUMIN_NUM,7,1) WHEN '1' THEN '남' WHEN '2' THEN '여' END "성별" FROM EMPLOYEE;


 SELECT CUS_NO, CUS_NAME, NVL( TO_CHAR(EMP_NO), '없음' ) FROM CUSTOMER;


 SELECT CUS_NO, CUS_NAME, NVL2( EMP_NO, '있음', '없음' ) FROM CUSTOMER;


 SELECT * FROM PRODUCT ORDER BY TO_NUMBER(TOT_CNT) DESC;


 SELECT * FROM CUSTOMER WHERE EMP_NO IS NOT NULL;


 SELECT * FROM CUSTOMER WHERE EMP_NO IS NULL;


 SELECT * FROM EMPLOYEE WHERE TO_CHAR(HIRE_DATE,'MM') LIKE '03' AND JUMIN_NUM LIKE '______2%'  ;


 SELECT * FROM EMPLOYEE ORDER BY HIRE_DATE  WHERE TO_CHAR(HIRE_DATE,'MM') LIKE '03' AND JUMIN_NUM LIKE '______2%'  ;


 SELECT * FROM EMPLOYEE WHERE JIKUP=(SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='채송화' ) ;


 SELECT * FROM EMPLOYEE WHERE SALARY>(SELECT SALARY FROM EMPLOYEE WHERE EMP_NAME='이순신') ;


 SELECT * FROM EMPLOYEE WHERE JIKUP=ANY(SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='무궁화' ) ;


 SELECT * FROM EMPLOYEE WHERE SALARY=ANY(SELECT MAX(SALARY) FROM EMPLOYEE WHERE DEP_NO=20 ) ;


 SELECT * FROM CUSTOMER WHERE EMP_NO != 9 OR EMP_NO IS NULL ;


 SELECT * FROM EMPLOYEE WHERE (SALARY*0.05+SALARY)>=3000;


 SELECT * FROM EMPLOYEE WHERE TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))>=1995;


 SELECT * FROM EMPLOYEE WHERE TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))>=1990 AND TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))<=1999;


 SELECT * FROM EMPLOYEE WHERE (DEP_NO = 10 OR DEP_NO = 30) AND SALARY<3000 AND HIRE_DATE<TO_DATE('1996-01-01','YYYY-MM-DD');


 SELECT * FROM EMPLOYEE WHERE (DEP_NO = 10 AND SALARY>1000) OR (DEP_NO = 20 AND SALARY<=5000);


  SELECT * FROM EMPLOYEE WHERE DEP_NO IN(10,30) AND SALARY<3000 AND HIRE_DATE<TO_DATE('1996-01-01','YYYY-MM-DD');


 SELECT * FROM EMPLOYEE WHERE SUBSTR(EMP_NAME,1,1)='김';


 SELECT * FROM EMPLOYEE WHERE TO_NUMBER(LENGTH(EMP_NAME))=3 AND SUBSTR(EMP_NAME,1,1)='김';


 SELECT * FROM EMPLOYEE WHERE SUBSTR(JUMIN_NUM,7,1)='2';


 SELECT *

FROM EMPLOYEE

WHERE

   ( TO_NUMBER(SUBSTR(JUMIN_NUM,1,2))>=60  AND   TO_NUMBER(SUBSTR(JUMIN_NUM,1,2))<=70 )

    AND SUBSTR(JUMIN_NUM,7,1)='1';


  SELECT (SUM(SALARY))/TO_NUMBER(COUNT(*)) FROM EMPLOYEE;


  SELECT DEP_NO,COUNT(*) FROM EMPLOYEE GROUP BY DEP_NO;


  SELECT

    EMPLOYEE.EMP_NO  "직원번호"

    ,EMPLOYEE.EMP_NAME   "직원명"

    ,EMPLOYEE.DEP_NO "부서번호"

    ,DEPT.DEP_NAME "부서명"


  FROM

    EMPLOYEE  , DEPT


  WHERE EMPLOYEE.DEP_NO=DEPT.DEP_NO ;


    SELECT

    E.EMP_NO  "직원번호"

    ,E.EMP_NAME   "직원명"

    ,E.DEP_NO "부서번호"

    ,D.DEP_NAME "부서명"


  FROM

    EMPLOYEE E  , DEPT D


  WHERE E.DEP_NO=D.DEP_NO ;


   SELECT

   C.CUS_NO

   ,C.CUS_NAME

   ,C.EMP_NO

   ,E.EMP_NAME


  FROM

    CUSTOMER C  , EMPLOYEE E


  WHERE C.EMP_NO=E.EMP_NO ;


     SELECT

   C.CUS_NO

   ,C.CUS_NAME

   ,C.EMP_NO

   ,E.EMP_NAME

   ,D.DEP_NAME



  FROM

    CUSTOMER C  , EMPLOYEE E , DEPT D


  WHERE

   C.EMP_NO=E.EMP_NO(+) AND E.DEP_NO=D.DEP_NO(+) ;


    SELECT

   C.CUS_NO

   ,C.CUS_NAME

   ,C.EMP_NO

   ,E.EMP_NAME


  FROM

    CUSTOMER C  , EMPLOYEE E


  WHERE C.EMP_NO=E.EMP_NO(+) ;//플러스는 반대편에 있는 것을 NULL 값이라도 좋으니깐 데이터를 반환하라고 나오라는 뜻. 이것이 아우터 조인이다 맞는 사람들만 아니라 맞지 않는 것도 나오라는것이 아우터 조인.


    SELECT

   C.CUS_NO

   ,C.CUS_NAME

   ,C.EMP_NO

   ,E.EMP_NAME


  FROM

    CUSTOMER C  , EMPLOYEE E


  WHERE C.EMP_NO=E.EMP_NO(+) ;//플러스는 반대편에 있는 것을 NULL 값이라도 좋으니깐 데이터를 반환하라고 나오라는 뜻. 이것이 아우터 조인이다 맞는 사람들만 아니라 맞지 않는 것도 나오라는것이 아우터 조인.




         SELECT

   C.CUS_NO

   ,C.CUS_NAME

   ,C.EMP_NO

   ,E.EMP_NAME

   ,D.DEP_NAME



  FROM

    CUSTOMER C  , EMPLOYEE E , DEPT D


  WHERE

   C.EMP_NO=E.EMP_NO(+) AND E.DEP_NO=D.DEP_NO(+)  ;


      SELECT

    E.EMP_NO  "직원번호"

    ,E.EMP_NAME   "직원명"

    ,E.DEP_NO "부서번호"

    ,D.DEP_NAME "부서명"


  FROM

    EMPLOYEE E  INNER JOIN DEPT D


  ON E.DEP_NO=D.DEP_NO ;


      SELECT

    E.EMP_NO  "직원번호"

    ,E.EMP_NAME   "직원명"

    ,E.DEP_NO "부서번호"

    ,D.DEP_NAME "부서명"


  FROM

    EMPLOYEE E  , DEPT D


  WHERE E.DEP_NO=D.DEP_NO ;


   SELECT

   C.CUS_NO

   ,C.CUS_NAME

   ,C.EMP_NO

   ,E.EMP_NAME


  FROM

    CUSTOMER C  LEFT OUTER JOIN EMPLOYEE E


  ON C.EMP_NO=E.EMP_NO ;//플러스는 반대편에 있는 것을 NULL 값이라도 좋으니깐 데이터를 반환하라고 나오라는 뜻. 이것이 아우터 조인이다 맞는 사람들만 아니라 맞지 않는 것도 나오라는것이 아우터 조인.


           SELECT

   C.CUS_NO

   ,C.CUS_NAME

   ,C.EMP_NO

   ,E.EMP_NAME

   ,D.DEP_NAME



  FROM

    CUSTOMER C  INNER JOIN EMPLOYEE E INNER JOIN DEPT D


  ON

   C.EMP_NO=E.EMP_NO AND E.DEP_NO=D.DEP_NO ;


   SELECT


   D.DEP_NAME "직원부서명"

   ,E.EMP_NAME "직원명"

   ,E.JIKUP    "직원직급"

   ,C.CUS_NAME  "담당고객명"

   ,C.TEL_NUM    "고객전화번호"



  FROM

    CUSTOMER C  , EMPLOYEE E , DEPT D


  WHERE

   C.EMP_NO=E.EMP_NO AND E.DEP_NO=D.DEP_NO


   ORDER BY E.EMP_NAME ;


    SELECT


   D.DEP_NAME "직원부서명"

   ,E.EMP_NAME "직원명"

   ,E.JIKUP    "직원직급"

   ,C.CUS_NAME  "담당고객명"

   ,C.TEL_NUM    "고객전화번호"



  FROM

    CUSTOMER C  , EMPLOYEE E , DEPT D


  WHERE

   C.EMP_NO=E.EMP_NO(+) AND E.DEP_NO=D.DEP_NO (+)


   ORDER BY E.EMP_NAME ;


       SELECT


   D.DEP_NAME "직원부서명"

   ,E.EMP_NAME "직원명"

   ,E.JIKUP    "직원직급"

   ,C.CUS_NAME  "담당고객명"

   ,C.TEL_NUM    "고객전화번호"



  FROM

    CUSTOMER C  , EMPLOYEE E , DEPT D


  WHERE

   C.EMP_NO=E.EMP_NO(+) AND E.DEP_NO=D.DEP_NO (+)


   ORDER BY 2 ;  //2는 두번째 칼럼이라는 것을 뜻한다.


   SELECT DEP_NO,COUNT(DEP_NO) D_CNT FROM EMPLOYEE GROUP BY DEP_NO ORDER BY D_CNT DESC ;


   SELECT DEP_NO,SUM(SALARY),AVG(SALARY) FROM EMPLOYEE GROUP BY DEP_NO;


   SELECT EMP_NAME, COUNT(*) FROM EMPLOYEE GROUP BY EMP_NAME;


   SELECT SUBSTR(EMP_NAME,1,1), COUNT(*) FROM EMPLOYEE GROUP BY SUBSTR(EMP_NAME,1,1)  ;



   부서별로 세는데 10번부서는 제외.


   SELECT DEP_NO,COUNT(*) FROM EMPLOYEE WHERE DEP_NO<>10 GROUP BY DEP_NO;


   SELECT DEP_NO,COUNT(*) AS CNT FROM EMPLOYEE WHERE DEP_NO<>30 GROUP BY DEP_NO HAVING COUNT(*)>=7 ORDER BY CNT;


   각 성씨별로 연봉 합산후에 높은순서대로 나오세요 성이 무씨는 제외.


   SELECT SUBSTR(EMP_NAME,1,1),SUM(SALARY) SALARY_SUM FROM EMPLOYEE WHERE SUBSTR(EMP_NAME,1,1)<>'무' GROUP BY SUBSTR(EMP_NAME,1,1) ORDER BY SALARY_SUM DESC;


   SELECT EMP_NAME,SUM(SALARY) SALARY_SUM FROM EMPLOYEE WHERE EMP_NAME NOT IN('이순신','채시라') GROUP BY EMP_NAME ORDER BY SALARY_SUM DESC;


   SELECT SUBSTR(EMP_NAME,1,1) FROM EMPLOYEE ;


   SELECT

    DEP.DEP_NO

    ,DEP.DEP_NAME

    ,EMP.EMP_NAME

    ,EMP.JIKUP

   FROM


   EMPLOYEE EMP, DEPT DEP


   WHERE


   EMP.DEP_NO=DEP.DEP_NO ;


   SELECT

    DEP.DEP_NO

    ,DEP.DEP_NAME

    ,EMP.EMP_NAME

    ,EMP.JIKUP

   FROM


   EMPLOYEE EMP, DEPT DEP


   WHERE


   EMP.DEP_NO=DEP.DEP_NO(+) ;


   SELECT

    CUS.CUS_NAME

    ,CUS.TEL_NUM

    ,EMP.EMP_NAME

    ,EMP.JIKUP


   FROM


   CUSTOMER CUS, EMPLOYEE EMP


   WHERE


   CUS.EMP_NO=EMP.EMP_NO;


      SELECT

    CUS.CUS_NAME

    ,CUS.TEL_NUM

    ,EMP.EMP_NAME

    ,EMP.JIKUP


   FROM


   CUSTOMER CUS, EMPLOYEE EMP


   WHERE


   (CUS.EMP_NO=EMP.EMP_NO)AND EMP.DEP_NO=10 ;



     SELECT

     *

   FROM


   CUSTOMER CUS, EMPLOYEE EMP


   WHERE


   CUS.EMP_NO(+)=EMP.EMP_NO ;


      SELECT

    CUS.CUS_NAME

    ,CUS.TEL_NUM

    ,EMP.EMP_NAME

    ,EMP.JIKUP


   FROM


   CUSTOMER CUS, EMPLOYEE EMP


   WHERE


   CUS.EMP_NO=EMP.EMP_NO AND EMP.SALARY>=3000 ;


   SELECT


   DEP.DEP_NAME "직원부서명"

   ,EMP.EMP_NAME    "직원명"

   ,EMP.JIKUP   "직원직급"

   ,CUS.CUS_NAME   "담당고객명"

   ,CUS.TEL_NUM   "고객전화번호"


   FROM


   CUSTOMER CUS, EMPLOYEE EMP, DEPT DEP


   WHERE


   CUS.EMP_NO=EMP.EMP_NO AND EMP.DEP_NO=DEP.DEP_NO


   ORDER BY EMP.EMP_NAME ;







SELECT

    E1.MGR_EMP_NO,

    E1.EMP_NAME,

    E1.JIKUP,

    E2.EMP_NO,

    E2.EMP_NAME,

    E2.JIKUP

FROM EMPLOYEE E1,EMPLOYEE E2

WHERE E1.MGR_EMP_NO=E2.EMP_NO(+);


SELECT


    E1.EMP_NAME,

    E1.JIKUP,

    E2.EMP_NAME,

    E2.JIKUP,

    E2.JUMIN_NUM

FROM EMPLOYEE E1,EMPLOYEE E2

WHERE E1.MGR_EMP_NO=E2.EMP_NO;


SELECT



    E2.EMP_NAME,

    E2.JIKUP,

    E2.JUMIN_NUM,

    E1.EMP_NAME,

    E1.JIKUP

FROM EMPLOYEE E1,EMPLOYEE E2

WHERE E1.MGR_EMP_NO=E2.EMP_NO;


SELECT


DEP.DEP_NAME

,EMP.EMP_NAME

,EMP.JIKUP

,E1.EMP_NAME

,E1.JIKUP

,CUS.CUS_NAME

,S.SAL_GRADE_NO


FROM


DEPT DEP, EMPLOYEE EMP, EMPLOYEE E1, CUSTOMER CUS, SALARY_GRADE S


WHERE


CUS.EMP_NO=EMP.EMP_NO AND EMP.DEP_NO=DEP.DEP_NO AND EMP.MGR_EMP_NO=E1.EMP_NO AND EMP.SALARY>=S.MIN_SAL AND EMP.SALARY<=S.MAX_SAL;



SELECT


C.CUS_NAME

,C.TEL_NUM

,E.EMP_NAME

,E.JIKUP

,E.DEP_NO


FROM


CUSTOMER C, EMPLOYEE E


WHERE


C.EMP_NO=E.EMP_NO(+) AND E.DEP_NO(+)=10;



SELECT


C.CUS_NO

,C.CUS_NAME

,C.TEL_NUM

,E.EMP_NAME

,E.JIKUP

,S.SAL_GRADE_NO


FROM


CUSTOMER C , EMPLOYEE E  , SALARY_GRADE S


WHERE


C.EMP_NO=E.EMP_NO(+) AND E.SALARY>=S.MIN_SAL(+) AND E.SALARY<=S.MAX_SAL(+) ORDER BY C.CUS_NO;



SELECT


AVG(SALARY)


FROM


EMPLOYEE


WHERE


JIKUP=ANY(SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='무궁화');


//직원번호 직원명 직급  연봉 연봉랭킹 순서 출력하면 연봉이 같으면직이 높은 사람이 먼저 출력.


SELECT

    EMP_NO

    ,EMP_NAME

    ,JIKUP

    ,SALARY





FROM

  EMPLOYEE


WHERE;



//인라인 뷰!


SELECT


*


FROM


(SELECT * FROM EMPLOYEE WHERE SALARY>=3000)


WHERE


SALARY>=2000


//인라인 뷰!


//최고 연봉을 받는 직원을 검색하라.


SELECT


*


FROM


EMPLOYEE


WHERE


SALARY=(SELECT MAX(SALARY) FROM EMPLOYEE);


//최고 연봉을 받는 직원을 검색하라.


//평균 연봉 이상을 받는 직원을 검색하라.


SELECT


*


FROM


EMPLOYEE


WHERE


SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE)


//평균 연봉 이상을 받는 직원을 검색하라.


//20번 부서에서 최고 연봉자 직원을 검색하라.


SELECT


*


FROM


EMPLOYEE


WHERE DEP_NO=20 AND SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE)     // 틀린 예제


SELECT


*


FROM


EMPLOYEE


WHERE


DEP_NO=20 AND SALARY=(SELECT MAX(SALARY) FROM EMPLOYEE WHERE DEP_NO=20)



//20번 부서에서 최고 연봉자 직원을 검색하라. 중요합니다.


// 직원명 직급 연봉 전체연봉에서 차지하는 비율을 검색하라 전체연봉에서 차지하는 비율은 소수점 없는 %로 표현하라.


SELECT


EMP_NAME "직원명"

,JIKUP "직급"

,SALARY "연봉"

,SALARY / (SELECT SUM(SALARY) FROM EMPLOYEE) *100


FROM


EMPLOYEE


SELECT


EMP_NAME "직원명"

,JIKUP "직급"

,SALARY "연봉"

,TO_CHAR(SALARY / (SELECT SUM(SALARY) FROM EMPLOYEE) *100,'999')


FROM


EMPLOYEE



// 직원명 직급 연봉 전체연봉에서 차지하는 비율을 검색하라 전체연봉에서 차지하는 비율은 소수점 없는 %로 표현하라.


//10번 부서 직원들이 관리하는 고객번호 고객명 직원번호을 검색하면?


SELECT


C.CUS_NO

,C.CUS_NAME

,E.EMP_NO


FROM


CUSTOMER C, EMPLOYEE E


WHERE


C.EMP_NO=E.EMP_NO AND E.DEP_NO=10; //조인으로 해결했던 문제




//10번 부서 직원들이 관리하는 고객번호 고객명 직원번호을 검색하면?



//최고 연봉 직원의 직원번호 직원명 부서명 연봉을 검색하면?


SELECT


E.EMP_NO

,E.EMP_NAME

,D.DEP_NAME

,E.SALARY


FROM


DEPT D, EMPLOYEE E


WHERE


D.DEP_NO = E.DEP_NO AND E.SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE)


SELECT


E.EMP_NO

, E.EMP_NAME

,(SELECT DEP_NAME FROM DEPT D WHERE E.DEP_NO=D.DEP_NO)

,E.SALARY


FROM


EMPLOYEE E


WHERE


E.SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE)


//이건 상관커리의 예제 입니다.



//최고 연봉 직원의 직원번호 직원명 부서명 연봉을 검색하면?


//10번 부서 직원들 보다 연봉을 더 많이 받는 20번 부서 직원의 직원번호 직원명 연봉을 검색하면?

10번부서의 최저연봉보다 많이 받는 20부서 검색



SELECT


EMP_NO

,EMP_NAME

,SALARY


FROM


EMPLOYEE


WHERE


DEP_NO= 20 AND SALARY>(SELECT MIN(SALARY) FROM EMPLOYEE WHERE DEP_NO=10);



SELECT


EMP_NO

,EMP_NAME

,SALARY


FROM


EMPLOYEE


WHERE


DEP_NO= 20 AND SALARY>ANY (SELECT SALARY FROM EMPLOYEE WHERE DEP_NO=10);





//10번 부서 직원들 보다 연봉을 더 많이 받는 20번 부서 직원의 직원번호 직원명 연봉을 검색하면?


// 부장들 보다 연봉이 많은 과장을 검색하라


SELECT


*


FROM


EMPLOYEE


WHERE


JIKUP='과장' AND SALARY>ANY (SELECT SALARY FROM EMPLOYEE WHERE JIKUP='부장' );



SELECT


*


FROM


EMPLOYEE


WHERE


JIKUP='과장' AND SALARY>(SELECT MIN(SALARY) FROM EMPLOYEE WHERE JIKUP='부장' );



// 부장들 보다 연봉이 많은 과장을 검색하라


// 한국남과 직급이 동일한 직원을 검색하라


SELECT


*


FROM


EMPLOYEE


WHERE


JIKUP=(SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='한국남')


// 한국남과 직급이 동일한 직원을 검색하라





// 무궁화과 직급이 동일한 직원을 검색하라




SELECT


*


FROM


EMPLOYEE


WHERE


JIKUP=ANY(SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='무궁화')


//무궁화가 2명이상 이니깐 ANY를 써서 해야합니다.


// 무궁화과 직급이 동일한 직원을 검색하라




//직원번호 직원명 소속부서명을 검색하면?


SELECT


E.EMP_NO "직원번호"

,E.EMP_NAME "직원명"

,D.DEP_NAME "부서명"


FROM


EMPLOYEE E, DEPT D


WHERE


E.DEP_NO=D.DEP_NO;


SELECT


E.EMP_NO "직원번호"

,E.EMP_NAME "직원명"

,(SELECT D.DEP_NAME FROM DEPT D WHERE E.DEP_NO=D.DEP_NO) "부서명"


FROM EMPLOYEE E;


//직원번호 직원명 소속부서명을 검색하면?


//평균 연봉 이상이고 최대 연봉 미만의 직원명 연봉 전체평균연봉 전체최대연봉을 출력하면?


SELECT


EMP_NAME "직원명"

,SALARY "연봉"

,(SELECT AVG(SALARY) FROM EMPLOYEE)"전체평균연봉"

,(SELECT MAX(SALARY) FROM EMPLOYEE) "전체최대연봉"


FROM


EMPLOYEE


WHERE


SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE) AND SALARY<(SELECT MAX(SALARY) FROM EMPLOYEE);



SELECT


E1.EMP_NAME

,E1.SALARY

,E2.SAL_AVG

,E2.SAL_MAX


FROM


EMPLOYEE E1, (SELECT AVG(SALARY) "SAL_AVG", MAX(SALARY) "SAL_MAX" FROM EMPLOYEE ) E2


WHERE

E1.SALARY>=E2.SAL_AVG AND E1.SALARY<E2.SAL_MAX;


//평균 연봉 이상이고 최대 연봉 미만의 직원명 연봉 전체평균연봉 전체최대연봉을 출력하면?



//연봉 상위 5명의 직원을 검색하면?


SELECT


*


FROM


(SELECT ROWNUM,EMP_NO,EMP_NAME,JUMIN_NUM FROM EMPLOYEE  ORDER BY SALARY DESC)



WHERE


ROWNUM<=5;



SELECT ROWNUM,EMP_NO,EMP_NAME,JUMIN_NUM FROM EMPLOYEE  ORDER BY SALARY DESC;


//연봉 상위 5명의 직원을 검색하면?


//연봉 상위 3위1~5위 직원의 직원번호 직원명 연봉을 검색하면?


SELECT


EMP_NO

,EMP_NAME

,SALARY


FROM


( SELECT E.*, ROWNUM RNUM

    FROM

        (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC) E

            WHERE

                ROWNUM<=5


)

WHERE

    RNUM>=3;





SELECT

EMP_NO

,EMP_NAME

,SALARY

FROM

(SELECT E.*, ROWNUM RNUM FROM

(SELECT * FROM EMPLOYEE ORDER BY SALARY DESC) E

)

WHERE RNUM>=3 AND RNUM<=5;


SELECT


EMP_NO

,EMP_NAME

,SALARY


FROM


(SELECT RANK() OVER (ORDER BY SALARY DESC) AS RANK, EMPLOYEE.*

    FROM EMPLOYEE

    )


WHERE

RANK<=5 AND RANK>=3;



SELECT


EMP_NO

,EMP_NAME

,SALARY


FROM


( SELECT * FROM (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC)

WHERE ROWNUM <=5


WHERE


EMP_NO NOT IN(


    SELECT EMP_NO FROM (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC)

    WHERE ROWNUM<=2

    )



//연봉 상위 3위1~5위 직원의 직원번호 직원명 연봉을 검색하면?


//직원번호 직원명 연봉 연봉순위를 출력하면 단 연봉순위를 오름차순 유지






//직원번호 직원명 연봉 연봉순위를 출력하면 단 연봉순위를 오름차순 유지




SELECT EXTRACT(YEAR FROM HIRE_DATE) ,ADD_MONTHS(HIRE_DATE , 2) FROM EMPLOYEE

























//22쪽 연습문제




//EMPLOYEE 테이블에서 최소연봉 최대연봉 평균연봉 연봉총합 총인원수을 검색해서 출력하면?


SELECT


MIN(SALARY)      AS "최소연봉"

,MAX(SALARY)     AS "최대연봉"

,AVG(SALARY)     AS "평균연봉"

,SUM(SALARY)     AS "연봉총합"

,COUNT(EMP_NAME) AS "총인원수"


FROM


EMPLOYEE


//EMPLOYEE 테이블에서 최소연봉 최대연봉 평균연봉 연봉총합 총인원수을 검색해서 출력하면?



//EMPLOYEE 테이블에서 소속 부서 총개수를 검색해서 출력하면 ?


SELECT COUNT(DISTINCT(DEP_NO)) "총개수"FROM EMPLOYEE


//EMPLOYEE 테이블에서 소속 부서 총개수를 검색해서 출력하면 ?


//CUSTOMER 테이블에서 담당직원이 있는 고객수를 검색해서 출력하려면?



SELECT COUNT(*)"고객수" FROM CUSTOMER WHERE EMP_NO IS NOT NULL



//CUSTOMER 테이블에서 담당직원이 있는 고객수를 검색해서 출력하려면?


//EMPLOYEE 테이블에서 직원번호 직원명 입사분기를 검색해서 출력하려면?


SELECT EMP_NO, EMP_NAME,TO_CHAR(HIRE_DATE,'Q')||'분기' AS "입사분기"  FROM EMPLOYEE


//EMPLOYEE 테이블에서 직원번호 직원명 입사분기를 검색해서 출력하려면?


// EMPLOYEE 테이블에서 직원번호 직원명 근무년차를 검색해서 출력하면?


SELECT EMP_NO "직원번호", EMP_NAME "직원 이름", CEIL((SYSDATE-HIRE_DATE)/365)-1||'년차' AS "근무년차" FROM EMPLOYEE;


// EMPLOYEE 테이블에서 직원번호 직원명 근무년차를 검색해서 출력하면?


// EMPLOYEE 테이블에서 직원번호 직원명 성별을 검색해서 출력하면?


SELECT EMP_NO "직원번호", EMP_NAME "직원 이름", CASE SUBSTR(JUMIN_NUM,7,1) WHEN '1' THEN '남' WHEN '2' THEN '여' ELSE '맙소사' END "성별" FROM EMPLOYEE;


// EMPLOYEE 테이블에서 직원번호 직원명 성별을 검색해서 출력하면?


//CUSTOMER 테이블에서 고객번호 고객명 담당직원번호를 검색해서 출력하면 ? 단 직원번호가 없으면 없음으로 표시하시오.


SELECT CUS_NO,CUS_NAME,NVL(TO_CHAR(EMP_NO),'없음') AS "담당직원번호" FROM CUSTOMER;


//CUSTOMER 테이블에서 고객번호 고객명 담당직원번호를 검색해서 출력하면 ? 단 직원번호가 없으면 없음으로 표시하시오.


//CUSTOMER 테이블에서 고객번호 고객명 담당직원존여부를 검색해서 출력하면 ? 단 직원번호가 있으면 있음 없으면 없음으로 표시하시오.


SELECT CUS_NO,CUS_NAME,NVL2(TO_CHAR(EMP_NO),'있음','없음') AS "담당직원존재여부" FROM CUSTOMER;


//CUSTOMER 테이블에서 고객번호 고객명 담당직원존여부를 검색해서 출력하면 ? 단 직원번호가 있으면 있음 없으면 없음으로 표시하시오.


//EMPLOYEE 테이블에서 직원번호 직원명 나이 연령대를 검색해서 출력하면?


SELECT EMP_NO, EMP_NAME, (TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-TO_NUMBER(CONCAT('19',SUBSTR(JUMIN_NUM,1,2))))-1 || '세' AS "연령",

CASE SUBSTR(TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-TO_NUMBER(CONCAT('19',SUBSTR(JUMIN_NUM,1,2))),1,1) WHEN '1' THEN '10대' WHEN '2' THEN '20대' WHEN '3' THEN '30대' WHEN '4' THEN '40대' WHEN '5' THEN '50대'


WHEN '6' THEN '60대' ELSE '로진' END AS "연령대"

  FROM EMPLOYEE;


//EMPLOYEE 테이블에서 직원번호 직원명 나이 연령대를 검색해서 출력하면?


//EMPLOYEE 테이블에서 직급순서대로  출력하면?


SELECT * FROM EMPLOYEE ORDER BY


CASE JIKUP


   WHEN '사장' THEN 1

        WHEN '부장' THEN 2

        WHEN '과장' THEN 3

        WHEN '대리' THEN 4

        WHEN '사원' THEN 5 END ASC;


SELECT * FROM EMPLOYEE ORDER BY


    CASE

        WHEN JIKUP='사장' THEN 1

        WHEN JIKUP='부장' THEN 2

        WHEN JIKUP='과장' THEN 3

        WHEN JIKUP='대리' THEN 4

        WHEN JIKUP='사원' THEN 5 END


        ASC;


//EMPLOYEE 테이블에서 직급순서대로  출력하면?


//다음 테이블에서 제품총개수를 내림차순으로 제일 많은 것을 정렬하여 보이려면?


SELECT * FROM PRODUCT ORDER BY TO_NUMBER(TOT_CNT)DESC;


//다음 테이블에서 제품총개수를 내림차순으로 제일 많은 것을 정렬하여 보이려면?




//27쪽 연습문제


//EMPLOYEE 테이블에서 직급이 과장인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE JIKUP='과장';


//EMPLOYEE 테이블에서 직급이 과장인 직원을 검색하면?


//EMPLOYEE 테이블에서 직급이 과장이 아닌 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE JIKUP!='과장';


SELECT * FROM EMPLOYEE WHERE JIKUP<>'과장';


//EMPLOYEE 테이블에서 직급이 과장이 아닌 직원을 검색하면?


//EMPLOYEE 테이블에서 부서번호가 10번 이고 직급이 과장인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE DEP_NO=10 AND JIKUP='과장';


//EMPLOYEE 테이블에서 부서번호가 10번 이고 직급이 과장인 직원을 검색하면?


//EMPLOYEE 테이블에서 직급이 과장 또는 부장인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE JIKUP='부장' OR JIKUP='과장';


SELECT * FROM EMPLOYEE WHERE JIKUP IN ('부장','과장');


SELECT * FROM EMPLOYEE WHERE JIKUP=ANY('부장','과장');


//EMPLOYEE 테이블에서 직급이 과장 또는 부장인 직원을 검색하면?


//EMPLOYEE 테이블에서 10번,20번 부서 중에 직급이 과장인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE (DEP_NO=ANY(10,20)) AND JIKUP='과장';


//EMPLOYEE 테이블에서 10번,20번 부서 중에 직급이 과장인 직원을 검색하면?


//CUSTOMER 테이블에서 담당직원이 없는 고객을 검색하면?


SELECT * FROM CUSTOMER WHERE EMP_NO IS NULL;


//CUSTOMER 테이블에서 담당직원이 없는 고객을 검색하면?


//CUSTOMER 테이블에서 담당직원이 있는 고객을 검색하면?


SELECT * FROM CUSTOMER WHERE EMP_NO IS NOT NULL;


//CUSTOMER 테이블에서 담당직원이 있는 고객을 검색하면?


//CUSTOMER 테이블에서 담당직원 번호가 9번이 아닌 고객을 검색하면?


SELECT * FROM CUSTOMER WHERE EMP_NO != 9 AND EMP_NO IS NOT NULL;


//CUSTOMER 테이블에서 담당직원 번호가 9번이 아닌 고객을 검색하면?


//EMPLOYEE 테이블에서 연봉이 4000만원 이상인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE SALARY>=4000;


//EMPLOYEE 테이블에서 연봉이 4000만원 이상인 직원을 검색하면?


//EMPLOYEE 테이블에서 연봉이 3000만원 ~ 4000만원 사이인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE SALARY<=4000 AND SALARY>=3000;


SELECT * FROM EMPLOYEE WHERE SALARY BETWEEN 3000 AND 4000;


//EMPLOYEE 테이블에서 연봉이 3000만원 ~ 4000만원 사이인 직원을 검색하면?


//EMPLOYEE 테이블에서 연봉이 5%로 인상할 경우에 3000 이상인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE (SALARY+SALARY*0.05)>=3000;


//EMPLOYEE 테이블에서 연봉이 5%로 인상할 경우에 3000 이상인 직원을 검색하면?


//EMPLOYEE 테이블에서 입사일이 1995년도 이상인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE HIRE_DATE>=TO_DATE('1995-01-01','YYYY,MM,DD');


//EMPLOYEE 테이블에서 입사일이 1995년도 이상인 직원을 검색하면?


//EMPLOYEE 테이블에서 입사일이 1990년~1999년 사이인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE HIRE_DATE>=TO_DATE('1990-01-01','YYYY,MM,DD') AND HIRE_DATE<=TO_DATE('1999-12-31','YYYY,MM,DD');


//EMPLOYEE 테이블에서 입사일이 1990년~1999년 사이인 직원을 검색하면?


//EMPLOYEE 테이블에서 부서번호가 10번 또는 30번인 직원 중에 연봉이 3000 미만이고 입사일이 '1996-01-01' 미만 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE (DEP_NO=10 OR DEP_NO=30) AND SALARY<3000 AND HIRE_DATE<TO_DATE('1996-01-01','YYYY,MM,DD');


//EMPLOYEE 테이블에서 부서번호가 10번 또는 30번인 직원 중에 연봉이 3000 미만이고 입사일이 '1996-01-01' 미만 직원을 검색하면?


//EMPLOYEE 테이블에서 부서번호가 10번 중에 연봉 1000만 미만 또는 20번인 직원 중에 연봉이 5000 이상 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE (DEP_NO=10 AND SALARY<1000) OR (DEP_NO=20 AND SALARY>=5000);


//EMPLOYEE 테이블에서 부서번호가 10번 중에 연봉 1000만 미만 또는 20번인 직원 중에 연봉이 5000 이상 직원을 검색하면?


//EMPLOYEE 테이블에서 성이 김씨인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE EMP_NAME LIKE '김%';


//EMPLOYEE 테이블에서 성이 김씨인 직원을 검색하면?


//EMPLOYEE 테이블에서 성이 김씨이고 3글자인 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE EMP_NAME LIKE '김__';


//EMPLOYEE 테이블에서 성이 김씨이고 3글자인 직원을 검색하면?


//EMPLOYEE 테이블에서 이름 중간에만 김이 들어간 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE EMP_NAME LIKE '_%김%_';


SELECT * FROM EMPLOYEE WHERE EMP_NAME LIKE '_%궁%_';


SELECT * FROM EMPLOYEE WHERE EMP_NAME LIKE '_%미%_';


//EMPLOYEE 테이블에서 이름 중간에만 김이 들어간 직원을 검색하면?


//EMPLOYEE 테이블에서 여자 직원을 검색하면?


SELECT * FROM EMPLOYEE WHERE SUBSTR(JUMIN_NUM,7,1)=2;


SELECT * FROM EMPLOYEE WHERE JUMIN_NUM LIKE '______2%';


//EMPLOYEE 테이블에서 여자 직원을 검색하면?


//EMPLOYEE 테이블에서 60년대,70년대 출생자중 남자만 검색하면?


SELECT * FROM EMPLOYEE WHERE (TO_NUMBER(SUBSTR(JUMIN_NUM,1,2))>=60 AND TO_NUMBER(SUBSTR(JUMIN_NUM,1,2))<=69) OR (TO_NUMBER(SUBSTR(JUMIN_NUM,1,2))>=70 AND TO_NUMBER(SUBSTR(JUMIN_NUM,1,2))<=79) ;


SELECT * FROM EMPLOYEE WHERE (TO_NUMBER(SUBSTR(JUMIN_NUM,1,2))>=60 AND TO_NUMBER(SUBSTR(JUMIN_NUM,1,2))<=79);


//EMPLOYEE 테이블에서 60년대,70년대 출생자중 남자만 검색하면?







SELECT DEP_NO, AVG(SALARY)


FROM EMPLOYEE


GROUP BY DEP_NO;













//44쪽 연습문제



//평균 연봉 이상 연봉을 받는 직원을 출력하면?


SELECT * FROM EMPLOYEE WHERE SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE);


//평균 연봉 이상 연봉을 받는 직원을 출력하면?


//연봉총합 평균연봉 최대연봉 최저연봉 최저입사일을 출력하면?


SELECT SUM(SALARY), AVG(SALARY),MAX(SALARY),MIN(SALARY),MIN(HIRE_DATE) FROM EMPLOYEE;


//연봉총합 평균연봉 최대연봉 최저연봉 최저입사일을 출력하면?


//고객총수 담당직원 있는 고객총수 고객담당직원수(중복제거)를 출력하면?


SELECT COUNT(CUS_NAME),COUNT(EMP_NO),COUNT(DISTINCT EMP_NO) FROM CUSTOMER;


//고객총수 담당직원 있는 고객총수 고객담당직원수(중복제거)를 출력하면?


//부서별로 부서번호 금여합 평균급여 인원수를 출력하면?


SELECT DEP_NO, SUM(SALARY), ROUND(AVG(SALARY),0), COUNT(*) FROM EMPLOYEE GROUP BY DEP_NO;


//부서별로 부서번호 금여합 평균급여 인원수를 출력하면?


//직급별로 직극 급여합 평균급여 인원수를 출력하면?


SELECT JIKUP, SUM(SALARY), SUM(SALARY),ROUND(AVG(SALARY),0), COUNT(*)FROM EMPLOYEE GROUP BY JIKUP;


//직급별로 직급 급여합 평균급여 인원수를 출력하면?


//부서별, 직급별 부서번호 직급 급여합 평균급여 인원수를 출력하면?


SELECT DEP_NO, JIKUP, SUM(SALARY),ROUND(AVG(SALARY),0),COUNT(*) FROM EMPLOYEE GROUP BY DEP_NO,JIKUP;


//부서별, 직급별 부서번호 직급 급여합 평균급여 인원수를 출력하면?


//부서별, 직급별 부서번호 직급 급여합 평균급여 인원수를 출력하되 3명 이상을 출력하면?


SELECT DEP_NO, JIKUP, SUM(SALARY),ROUND(AVG(SALARY),0),COUNT(*) FROM EMPLOYEE GROUP BY DEP_NO,JIKUP HAVING COUNT(*)>=3;


SELECT * FROM (SELECT DEP_NO, JIKUP, SUM(SALARY),ROUND(AVG(SALARY),0),COUNT(*) "EMP" FROM EMPLOYEE GROUP BY DEP_NO,JIKUP) WHERE "EMP">=3;


//FROM 뒤에 인라인 뷰이면서 알리아스가 나중에 컬럼명으로 사용이 가능합니다.


//부서별, 직급별 부서번호 직급 급여합 평균급여 인원수를 출력하되 3명 이상을 출력하면?


//부서별 성별로 부서번호 성 급여합 평균급여 인원수를 출력하면?


SELECT DEP_NO, CASE SUBSTR(JUMIN_NUM,7,1) WHEN '1' THEN '남' WHEN '2' THEN '여' END, SUM(SALARY),ROUND(AVG(SALARY),0),COUNT(*) FROM EMPLOYEE


GROUP BY DEP_NO, CASE SUBSTR(JUMIN_NUM,7,1) WHEN '1' THEN '남' WHEN '2' THEN '여' END  ORDER BY DEP_NO;


//부서별 성별로 부서번호 성 급여합 평균급여 인원수를 출력하면?


//입사년도별로 입사년도 인원수를 출력하고 년도별로 오름차순 하면?


SELECT

 CASE WHEN (TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))>=1980 AND TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))<=1989) THEN '1980'

WHEN (TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))>=1990 AND TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))<=1999) THEN '1990'  END

 "입사년도",COUNT(*)

 FROM EMPLOYEE

GROUP BY

   CASE

    WHEN (TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))>=1980 AND TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))<=1989) THEN '1980'

    WHEN (TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))>=1990 AND TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))<=1999) THEN '1990'  END


ORDER BY "입사년도";


SELECT

TO_CHAR(HIRE_DATE,'YYYY')"입사년도"

,COUNT(*)

 FROM EMPLOYEE

GROUP BY TO_CHAR(HIRE_DATE,'YYYY')


ORDER BY "입사년도";



//입사년도별로 입사년도 인원수를 출력하고 년도별로 오름차순 하면?


//직원명 생일 년 월 일 나이를 출력하면?


SELECT

EMP_NAME "직원명"

,TO_CHAR(TO_DATE('19'||SUBSTR(JUMIN_NUM,1,6),'YYYYMMDD'),'YYYY-MM-DD')  "생일"

,(TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-TO_NUMBER('19'||SUBSTR(JUMIN_NUM,1,2)))+1 "나이"

 FROM EMPLOYEE


//직원명 생일 년 월 일 나이를 출력하면?


//부서별로 부서번호 평균근무년수를 출력하면? 근년수는 소수점 1째 자리까지 반올림 할 것.


SELECT

  DEP_NO

  ,ROUND( (AVG(TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY')))

 ),1 )

 FROM EMPLOYEE

 GROUP BY DEP_NO;


 SELECT

  DEP_NO

  ,ROUND(AVG((SYSDATE-HIRE_DATE)/365),1)

 FROM EMPLOYEE

 GROUP BY DEP_NO;


//부서별로 부서번호 평균근무년수를 출력하면? 근년수는 소수점 1째 자리까지 반올림 할 것.


//입사분기별로 입사분기 인원수 출력하면?


SELECT


TO_CHAR(HIRE_DATE,'Q') || '분기'"입사분기"

,COUNT(*)


FROM EMPLOYEE

 GROUP BY TO_CHAR(HIRE_DATE,'Q') || '분기'

 ORDER BY "입사분기";


 SELECT


TO_CHAR(HIRE_DATE,'Q')|| '분기' "입사분기"

,COUNT(*)


FROM EMPLOYEE

WHERE DEP_NO=10

 GROUP BY TO_CHAR(HIRE_DATE,'Q') || '분기'

 ORDER BY "입사분기";


//입사분기별로 입사분기 인원수 출력하면?


//입사분기별로 입사분기 인원수 출력하면 단 1분기만 보여라.



SELECT


TO_CHAR(HIRE_DATE,'Q') "입사분기"

,COUNT(*)


FROM EMPLOYEE

 GROUP BY TO_CHAR(HIRE_DATE,'Q')


HAVING TO_CHAR(HIRE_DATE,'Q')='1'

 ORDER BY "입사분기";


//입사분기별로 입사분기 인원수 출력하면 단 1분기만 보여라.


//입사연대별 성별로 입사연대 성 연대별입사자수 출력하면?


SELECT


 CASE WHEN (TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))>=1980 AND TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))<=1989) THEN '1980'

WHEN (TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))>=1990 AND TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))<=1999) THEN '1990'  END

 "입사년도"

 ,CASE SUBSTR(JUMIN_NUM,7,1) WHEN '1' THEN '남' WHEN '2' THEN '여' END "성별"

 ,COUNT(*)


 FROM EMPLOYEE


 GROUP BY CASE WHEN (TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))>=1980 AND TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))<=1989) THEN '1980'

WHEN (TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))>=1990 AND TO_NUMBER(TO_CHAR(HIRE_DATE,'YYYY'))<=1999) THEN '1990'  END

,CASE SUBSTR(JUMIN_NUM,7,1) WHEN '1' THEN '남' WHEN '2' THEN '여' END

ORDER BY "입사년도";


//입사연대별 성별로 입사연대 성 연대별입사자수 출력하면?


//직원명 입사일[ 년 월 일 분기 요일 ] 퇴직일  [년 월 일] 출력하면 ? 단 퇴직일은 입사 후 20년 5개월 10일 후


SELECT


EMP_NAME

,CONCAT(TO_CHAR(HIRE_DATE,'YYYY-MM-DD'),' ')||CONCAT(CONCAT(TO_CHAR(HIRE_DATE,'Q'),'분기'),' ')||TO_CHAR(HIRE_DATE,'DAY','NLS_DATE_LANGUAGE = KOREAN')

,TO_CHAR(ADD_MONTHS((HIRE_DATE+((365*20)+10)),5),'YYYY-MM-DD' )


FROM EMPLOYEE



//직원명 입사일[ 년 월 일 분기 요일 ] 퇴직일  [년 월 일] 출력하면 ? 단 퇴직일은 입사 후 20년 5개월 10일 후


//부서별로 부서번호 부서위치 직원수를 출력하면?


SELECT

E.DEP_NO "부서번호"

,D.LOC "부서위치"

,COUNT(E.EMP_NAME) "직원수"


FROM EMPLOYEE E, DEPT D

WHERE E.DEP_NO = D.DEP_NO

GROUP BY  E.DEP_NO, D.LOC


//부서별로 부서번호 부서위치 직원수를 출력하면?


//월별로 입사월 인원수를 검색하면 입사월 오름차순 유지


SELECT


SUBSTR(TO_CHAR(HIRE_DATE,'YYYYMM'),5,2) "입사월"

,COUNT(*)

FROM EMPLOYEE


GROUP BY SUBSTR(TO_CHAR(HIRE_DATE,'YYYYMM'),5,2)

ORDER BY "입사월";


SELECT


SUBSTR(TO_CHAR(HIRE_DATE,'YYYYMM'),5,2) "입사월"

,COUNT(*)

FROM EMPLOYEE


GROUP BY SUBSTR(TO_CHAR(HIRE_DATE,'YYYYMM'),5,2)

ORDER BY 1;


SELECT


SUBSTR(TO_CHAR(HIRE_DATE,'YYYYMM'),5,2) "입사월"

,COUNT(*)

FROM EMPLOYEE


GROUP BY SUBSTR(TO_CHAR(HIRE_DATE,'YYYYMM'),5,2)

ORDER BY SUBSTR(TO_CHAR(HIRE_DATE,'YYYYMM'),5,2);

//월별로 입사월 인원수를 검색하면 입사월 오름차순 유지


//위 결과에서 2월,9월은 없어서 빠진다. 2월,9월 도 포함 시키고 인원수는 0으로 포함하려면?

SELECT '02' "입사월", '0' "입사인원수" FROM DUAL

UNION

SELECT '09' "입사월", '0' "입사인원수" FROM DUAL

UNION

SELECT


SUBSTR(TO_CHAR(HIRE_DATE,'YYYYMM'),5,2) "입사월"

,TO_CHAR(COUNT(*))"입사인원수"

FROM EMPLOYEE


GROUP BY SUBSTR(TO_CHAR(HIRE_DATE,'YYYYMM'),5,2)

ORDER BY "입사월";


//위 결과에서 2월,9월은 없어서 빠진다. 2월,9월 도 포함 시키고 인원수는 0으로 포함하려면?


//EMPLOYEE 테이블에서 직급순서대로 정렬하여 직극별로 직급평균연봉 인원수를 검색하면?


SELECT


JIKUP "직급"

,ROUND(AVG(SALARY),1)

,COUNT(*)


FROM EMPLOYEE


GROUP BY JIKUP


ORDER BY CASE JIKUP WHEN '사장' THEN '1'WHEN '부장' THEN '2'WHEN '과장' THEN '3' WHEN '대리' THEN '4'WHEN '사원' THEN '5' END


//EMPLOYEE 테이블에서 직급순서대로 정렬하여 직극별로 직급평균연봉 인원수를 검색하면?




SELECT


E.EMP_NO "직원번호"

,E.EMP_NAME "직원명"

,CEIL((SYSDATE-HIRE_DATE)/365) "근무년차"

,CONCAT(TO_CHAR(TO_DATE('19'||SUBSTR(JUMIN_NUM,1,6),'YYYYMMDD'),'YYYY-MM-DD'),TO_CHAR(TO_DATE('19'||SUBSTR(JUMIN_NUM,1,6),'YYYYMMDD'),'DAY','NLS_DATE_LANGUAGE = KOREAN') ) "생일"

,60-((TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-TO_NUMBER(TO_CHAR(TO_DATE('19'||SUBSTR(JUMIN_NUM,1,2),'YYYY'),'YYYY')))+1)"퇴직일까지 남은 년도"

,D.DEP_NAME "소속부서명"




FROM EMPLOYEE E, DEPT D, EMPLOYEE EE


WHERE E.DEP_NO=D.DEP_NO AND E.EMP_NO = EE.MGR_EMP_NO





//50쪽 연습문제


//1번


INSERT INTO EMPLOYEE(EMP_NO,EMP_NAME,DEP_NO,JIKUP,SALARY,HIRE_DATE,JUMIN_NUM,PHONE_NUM,MGR_EMP_NO)VALUES((SELECT NVL(MAX(EMP_NO)+1,1) FROM EMPLOYEE),'장보고',40,'대리',3500,TO_DATE('2012-05-28','YYYY-MM-DD'),'8311091109310','01092499215',3);


//1번




//EMPLOYEE 테이블에서 주민번호 8203121977315 이름 강감찬 직원의 직급을 주임으로 수정하려면?


UPDATE EMPLOYEE SET JIKUP='주임' WHERE JUMIN_NUM='8203121977315' AND EMP_NAME='강감찬' ;


//EMPLOYEE 테이블에서 주민번호 8203121977315 이름 강감찬 직원의 직급을 주임으로 수정하려면?




//EMPLOYEE 테이블에서 주민번호 8410031281312 이름 공부해 직원의 연봉을 10% 인상하면?


UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE JUMIN_NUM='8410031281312' AND EMP_NAME='공부해' ;


//EMPLOYEE 테이블에서 주민번호 8410031281312 이름 공부해 직원의 연봉을 10% 인상하면?




//EMPLOYEE 테이블에서 연봉 4000만원 이상의 직원 연봉을 2% 삭감하면?



UPDATE EMPLOYEE SET SALARY=SALARY-SALARY*0.02  WHERE SALARY>=4000;



//EMPLOYEE 테이블에서 연봉 4000만원 이상의 직원 연봉을 2% 삭감하면?


//EMPLOYEE 테이블에서 평균 연봉 이상의 직원을 2% 삭감하면?


UPDATE EMPLOYEE SET SALARY=SALARY-SALARY*0.02  WHERE SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE);


//EMPLOYEE 테이블에서 평균 연봉 이상의 직원을 2% 삭감하면?



//담당 고객이 있는 직원의 급여를 10% 인상하면?



UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE EMP_NO=ANY(SELECT EMP_NO FROM CUSTOMER WHERE EMP_NO IS NOT NULL ) ;


UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE EMP_NO=ANY(SELECT DISTINCT(EMP_NO) FROM CUSTOMER WHERE EMP_NO IS NOT NULL ) ;


UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE EMP_NO IN (SELECT DISTINCT(EMP_NO) FROM CUSTOMER WHERE EMP_NO IS NOT NULL ) ;



//담당 고객이 있는 직원의 급여를 10% 인상하면?




//평균 연봉 보다 적은 연봉자의 연봉을 50만원 인상하면?



UPDATE EMPLOYEE SET SALARY=SALARY+50 WHERE SALARY<(SELECT AVG(SALARY) FROM EMPLOYEE);



//평균 연봉 보다 적은 연봉자의 연봉을 50만원 인상하면?




//연봉 서열 5위까지의 연봉을 10% 인하하면?



UPDATE EMPLOYEE SET SALARY=SALARY*0.90 WHERE EMP_NO = ANY(SELECT EMP_NO FROM (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC) WHERE ROWNUM<=5)



//연봉 서열 5위까지의 연봉을 10% 인하하면?



//평균 연봉 보다 적은 연봉자의 연봉을 1% 인상하면?



UPDATE EMPLOYEE SET SALARY=SALARY*1.01 WHERE SALARY<(SELECT AVG(SALARY) FROM EMPLOYEE);



//평균 연봉 보다 적은 연봉자의 연봉을 1% 인상하면?



//EMPLOYEE 테이블과 데이터를 그대로 복사하여 EMPLOYEE2 테이블을 만들면 ?



CREATE TABLE EMPLOYEE2 AS SELECT * FROM EMPLOYEE;




CREATE TABLE EMPLOYEE2 AS SELECT * FROM EMPLOYEE WHERE 1=2;      //이거는 테이블 구조만 복사한다


INSERT INTO EMPLOYEE2 SELECT * FROM EMPLOYEE;   //이거는 데이터를 주입한다.




//EMPLOYEE 테이블과 데이터를 그대로 복사하여 EMPLOYEE2 테이블을 만들면 ?



//EMPLOYEE 테이블에서 평균급여 이상인 직원의 EMP_NAME,JIKUP,SALARY 컬럼만 추출하여  EMPLOYEE3 테이블을 만들면?



 CREATE TABLE EMPLOYEE3 AS SELECT EMP_NAME,JIKUP,SALARY FROM EMPLOYEE WHERE SALARY>AVG(SALARY);


 CREATE TABLE EMPLOYEE3 AS SELECT EMP_NAME,JIKUP,SALARY FROM EMPLOYEE WHERE SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE);


 SELECT * FROM EMPLOYEE3



//EMPLOYEE 테이블에서 평균급여 이상인 직원의 EMP_NAME,JIKUP,SALARY 컬럼만 추출하여  EMPLOYEE3 테이블을 만들면?


//직원번호 직원명 부서번호 담당고객번호 담당고객명 이 저장되는 테이블 EMPLOYEE4 테이블을 만들면 데이터 카피는 하지 말것?



CREATE TABLE EMPLOYEE4


 AS


 SELECT E.EMP_NO, E.EMP_NAME, E.DEP_NO, C.CUS_NO, C.CUS_NAME

 FROM EMPLOYEE E, CUSTOMER C

 WHERE 1=2;



SELECT * FROM EMPLOYEE4


//테이블 컬럼만 복사하기 때문에 조인은 필요없음.



//직원번호 직원명 부서번호 담당고객번호 담당고객명 이 저장되는 테이블 EMPLOYEE4 테이블을 만들면 데이터 카피는 하지 말것?


//INSERT 구문을 사용하여 위 EMPLOYEE4 테이블에 직원번호 직원명 부서번호 담당고객번호 담당고객명 를 저장하면?


INSERT INTO EMPLOYEE4(EMP_NO,EMP_NAME,DEP_NO,CUS_NO,CUS_NAME)

 SELECT E.EMP_NO, E.EMP_NAME, E.DEP_NO, C.CUS_NO, C.CUS_NAME

 FROM EMPLOYEE E, CUSTOMER C

 WHERE E.EMP_NO=C.EMP_NO;


SELECT * FROM EMPLOYEE4

 SELECT * FROM DEPT



//INSERT 구문을 사용하여 위 EMPLOYEE4 테이블에 직원번호 직원명 부서번호 담당고객번호 담당고객명 를 저장하면?




















//32쪽 연습문제


//부서번호 부서명 직원명 직급 을 검색하면?


SELECT


D.DEP_NO "부서번호"

,D.DEP_NAME "부서명"

,E.EMP_NAME "직원명"

,E.JIKUP    "직급"


FROM DEPT D, EMPLOYEE E


WHERE


D.DEP_NO = E.DEP_NO


SELECT


(SELECT DEP_NO FROM DEPT D WHERE D.DEP_NO=E.DEP_NO)

,(SELECT DEP_NAME FROM DEPT D WHERE D.DEP_NO=E.DEP_NO )

,EMP_NAME

,JIKUP


FROM EMPLOYEE E //상관쿼리


//부서번호 부서명 직원명 직급 을 검색하면?


//고객명 고객전화번호 담당직원명 담당직원직급을 검색하면?



SELECT


C.CUS_NAME

,C.TEL_NUM

,E.EMP_NAME

,E.JIKUP


FROM


CUSTOMER C, EMPLOYEE E


WHERE


E.EMP_NO = C.EMP_NO


//고객명 고객전화번호 담당직원명 담당직원직급을 검색하면?


//고객명 고객전화번호 담당직원명 담당직원직급을 출력하면? 10번부서의 담당직원이 있는 고객만 출력 하세요.


SELECT


C.CUS_NAME

,C.TEL_NUM

,E.EMP_NAME

,E.JIKUP


FROM


CUSTOMER C, EMPLOYEE E


WHERE


(E.EMP_NO = C.EMP_NO) AND E.DEP_NO=10;


//주의 E. 붙히는게 중요합니다.


//고객명 고객전화번호 담당직원명 담당직원직급을 출력하면? 10번부서의 담당직원이 있는 고객만 출력 하세요.


//고객명 고객전화번호 담당직원명 담당직원직급을 출력하면? 연봉이 3000만원 이상인 분만 골라주세요.


SELECT


C.CUS_NAME

,C.TEL_NUM

,E.EMP_NAME

,E.JIKUP

,E.SALARY


FROM


CUSTOMER C, EMPLOYEE E


WHERE


(E.EMP_NO = C.EMP_NO) AND E.SALARY>=3000;


//주의 E. 붙히는게 중요합니다.



//고객명 고객전화번호 담당직원명 담당직원직급을 출력하면? 연봉이 3000만원 이상인 분만 골라주세요.


//직원부서명 직원명 직원직급 담당고객명 고객전화 출력하면 직원 이름 오름차순 정렬 해주세요.



SELECT


D.DEP_NAME

,E.EMP_NAME

,E.JIKUP

,C.CUS_NAME

,C.TEL_NUM


FROM DEPT D, EMPLOYEE E, CUSTOMER C


WHERE (E.DEP_NO=D.DEP_NO) AND (E.EMP_NO=C.EMP_NO)


//직원부서명 직원명 직원 직급 담당고객명 고객전화 출력하면 직원 이름 오름차순 정렬 해주세요.




//54쪽 연습문제


// EMPLOYEE 테이블로 부터 SALARY 컬럼만 제외하고 뷰 EMPLOYEE_VW1 를 생성하면?



CREATE VIEW EMPLOYEE_VW1 AS

SELECT EMP_NO, EMP_NAME, DEP_NO, JIKUP, HIRE_DATE, JUMIN_NUM, PHONE_NUM, MGR_EMP_NO

FROM EMPLOYEE;



// EMPLOYEE 테이블로 부터 SALARY 컬럼만 제외하고 뷰 EMPLOYEE_VW1 를 생성하면?


// EMPLOYEE_VW1 테이블에 데이터 <'이승엽',40,'과장',TO_DATE('1990-09-01','YYYY-MM-DD'),'7811231452719','01090056376',1> 를 입력하면?



INSERT INTO EMPLOYEE_VW1 (EMP_NO, EMP_NAME, DEP_NO, JIKUP, HIRE_DATE, JUMIN_NUM,PHONE_NUM, MGR_EMP_NO)

VALUES((SELECT MAX(EMP_NO)+1 FROM EMPLOYEE_VW1),'이승엽',40,'과장',TO_DATE('1990-09-01','YYYY-MM-DD'),'7811231452719','01090056376',1);



// EMPLOYEE_VW1 테이블에 데이터 <'이승엽',40,'과장',TO_DATE('1990-09-01','YYYY-MM-DD'),'7811231452719','01090056376',1> 를 입력하면?


//7번문제

CREATE VIEW EMPLOYEE_VW3 AS

SELECT D.DEP_NO,D.DEP_NAME,E.JIKUP,AVG(E.SALARY)"SDFE" FROM DEPT D, EMPLOYEE E WHERE D.DEP_NO=E.DEP_NO GROUP BY D.DEP_NO,D.DEP_NAME,E.JIKUP


//그룹을 하려면 무조건 알리어스를 주어여한다.

//7번문제



INSERT INTO DEPT VALUES(60,'전략부','부산');

CREATE VIEW DEP_VW1 AS

SELECT DEP_NO,DEP_NAME,LOC FROM DEPT WHERE DEP_NO=60 WITH CHECK OPTION;


SELECT * FROM DEP_VW1


DELETE FROM DEP_VW1 WHERE DEP_NO=60;




COMMIT;

UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE EMP_NO=11;

SELECT *FROM EMPLOYEE WHERE EMP_NO=11;

ROLLBACK TO UP_3;

SELECT *FROM EMPLOYEE WHERE EMP_NO=11;



UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE EMP_NO=11;

SAVEPOINT UP_1;

UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE EMP_NO=12;

SAVEPOINT UP_2;

UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE EMP_NO=13;

SAVEPOINT UP_3;


SELECT *FROM EMPLOYEE WHERE EMP_NO IN(11,12,13);


===================================================================================

1. EMPLOYEE 테이블에서 최소연봉, 최대연봉, 평균연봉, 연봉총합, 총인원수를 검색하면?

===================================================================================


SELECT


MIN(SALARY)      AS "최소연봉"

,MAX(SALARY)     AS "최대연봉"

,AVG(SALARY)     AS "평균연봉"

,SUM(SALARY)     AS "연봉총합"

,COUNT(EMP_NAME) AS "총인원수"


FROM EMPLOYEE;


=========================================================================

2. EMPLOYEE 테이블에서 소속부서 총개수를 검색하면? 회사에 있는 총부서는 X

=========================================================================


SELECT COUNT(DISTINCT(DEP_NO)) "총개수"FROM EMPLOYEE;


====================================================================

3. CUSTOMER 테이블에서 담당직원이 있는 고객수를 검색해서 출력하려면?

====================================================================


SELECT COUNT(*)"고객수" FROM CUSTOMER WHERE EMP_NO IS NOT NULL;


======================================================================

4. EMPLOYEE 테이블에서 직원번호 직원명 입사분기를 검색해서 출력하려면?

======================================================================


SELECT EMP_NO, EMP_NAME,TO_CHAR(HIRE_DATE,'Q')||'분기' AS "입사분기" FROM EMPLOYEE;


====================================================================

5. EMPLOYEE 테이블에서 직원번호 직원명 근무년차를 검색해서 출력하면?

====================================================================


SELECT EMP_NO "직원번호", EMP_NAME "직원 이름", CEIL((SYSDATE-HIRE_DATE)/365)-1||'년차' AS "근무년차" FROM EMPLOYEE;


===============================================================

6. EMPLOYEE 테이블에서 직원번호 직원명 성별을 검색해서 출력하면?

===============================================================


SELECT EMP_NO "직원번호", EMP_NAME "직원 이름", CASE SUBSTR(JUMIN_NUM,7,1) WHEN '1' THEN '남' WHEN '2' THEN '여' ELSE '맙소사' END "성별" FROM EMPLOYEE;


===================================================================================================================

7. CUSTOMER 테이블에서 고객번호 고객명 담당직원번호를 검색해서 출력하면 ? 단 직원번호가 없으면 없음으로 표시하시오.

===================================================================================================================


SELECT CUS_NO,CUS_NAME,NVL(TO_CHAR(EMP_NO),'없음') AS "담당직원번호" FROM CUSTOMER;


=================================================================================================================================

8. CUSTOMER 테이블에서 고객번호 고객명 담당직원존여부를 검색해서 출력하면 ? 단 직원번호가 있으면 있음 없으면 없음으로 표시하시오.

=================================================================================================================================


SELECT CUS_NO,CUS_NAME,NVL2(TO_CHAR(EMP_NO),'있음','없음') AS "담당직원존재여부" FROM CUSTOMER;


=======================================================================

9. EMPLOYEE 테이블에서 직원번호 직원명 나이 연령대를 검색해서 출력하면?

=======================================================================


SELECT

EMP_NO

,EMP_NAME

,(TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-TO_NUMBER(CONCAT('19',SUBSTR(JUMIN_NUM,1,2))))-1 || '세' AS "연령"

,CASE SUBSTR(TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-TO_NUMBER(CONCAT('19',SUBSTR(JUMIN_NUM,1,2))),1,1) WHEN '1' THEN '10대' WHEN '2' THEN '20대' WHEN '3' THEN '30대' WHEN '4' THEN '40대' WHEN '5' THEN '50대'

WHEN '6' THEN '60대' ELSE '로진' END AS "연령대"

FROM EMPLOYEE;


==============================================

10. EMPLOYEE 테이블에서 직급순서대로 출력하면?

==============================================


SELECT

*

FROM EMPLOYEE

ORDER BY

CASE JIKUP

WHEN '사장' THEN 1

WHEN '부장' THEN 2

WHEN '과장' THEN 3

WHEN '대리' THEN 4

WHEN '사원' THEN 5 END ASC;


===============================================================================

11. 다음 테이블에서 제품총개수를 내림차순으로 제일 많은 것을 정렬하여 보이려면?

===============================================================================


CREATE TABLE PRODUCT(

  P_NO NUMBER(3)

  ,P_NAME VARCHAR2(20) NOT NULL UNIQUE

  ,TOT_CNT VARCHAR2(20) NOT NULL

);


INSERT INTO PRODUCT VALUES(1, '컴퓨터1', '20');

INSERT INTO PRODUCT VALUES(2, '컴퓨터2', '2');

INSERT INTO PRODUCT VALUES(3, '컴퓨터3', '4');

INSERT INTO PRODUCT VALUES(4, '컴퓨터4', '2');

INSERT INTO PRODUCT VALUES(5, '컴퓨터5', '16');

INSERT INTO PRODUCT VALUES(6, '컴퓨터6', '60');

INSERT INTO PRODUCT VALUES(7, '컴퓨터7', '30');

INSERT INTO PRODUCT VALUES(8, '컴퓨터8', '27');

INSERT INTO PRODUCT VALUES(9, '컴퓨터9', '25');

INSERT INTO PRODUCT VALUES(10, '컴퓨터10', '22');

INSERT INTO PRODUCT VALUES(11, '컴퓨터11', '34');

INSERT INTO PRODUCT VALUES(12, '컴퓨터12', '50');

INSERT INTO PRODUCT VALUES(13, '컴퓨터13', '8');

INSERT INTO PRODUCT VALUES(14, '컴퓨터14', '9');

INSERT INTO PRODUCT VALUES(15, '컴퓨터15', '10');

INSERT INTO PRODUCT VALUES(16, '컴퓨터16', '15');

INSERT INTO PRODUCT VALUES(17, '컴퓨터17', '20');

INSERT INTO PRODUCT VALUES(18, '컴퓨터18', '30');

INSERT INTO PRODUCT VALUES(19, '컴퓨터19', '40');

INSERT INTO PRODUCT VALUES(20, '컴퓨터20', '50');


SELECT * FROM PRODUCT ORDER BY TO_NUMBER(TOT_CNT)DESC;







SELECT


MIN(SALARY) 최소연봉

,MAX(SALARY) 최대연봉

,AVG(SALARY) 평균연봉

,SUM(SALARY) 연봉총합

,COUNT(EMP_NAME) 총인원수


FROM EMPLOYEE;


SELECT


COUNT(DISTINCT(DEP_NO))


FROM EMPLOYEE;



SELECT


COUNT(CUS_NAME)


FROM


CUSTOMER


WHERE EMP_NO IS NOT NULL;


SELECT


EMP_NO

,EMP_NAME

,TO_CHAR(HIRE_DATE,'Q')


FROM EMPLOYEE;


SELECT


EMP_NO

,EMP_NAME

,ROUND((SYSDATE-HIRE_DATE)/365)-1


FROM EMPLOYEE;


SELECT


EMP_NO

,EMP_NAME

,CASE SUBSTR(JUMIN_NUM,7,1)

WHEN '1' THEN '남'

WHEN '2' THEN '여'



END



FROM EMPLOYEE;



SELECT


EMP_NO

,EMP_NAME

,DECODE(

SUBSTR(JUMIN_NUM,7,1),

'1','남자'

,'2','여자')



FROM EMPLOYEE;




SELECT


CUS_NO

,CUS_NAME

,NVL(EMP_NO||'','없음')


FROM


CUSTOMER;



SELECT


CUS_NO

,CUS_NAME

,NVL2(EMP_NO||'','있음' ,'없음')


FROM


CUSTOMER;


SELECT


EMP_NO

,EMP_NAME

,((TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-TO_NUMBER('19'||SUBSTR(JUMIN_NUM,1,2)))+1) "나이"

,CASE SUBSTR(((TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-TO_NUMBER('19'||SUBSTR(JUMIN_NUM,1,2)))+1),1,1)

WHEN '1' THEN '10대'

WHEN '2' THEN '20대'

WHEN '3' THEN '30대'

WHEN '4' THEN '40대'

WHEN '5' THEN '50대'

WHEN '6' THEN '60대'

WHEN '7' THEN '70대'

WHEN '8' THEN '80대'




ELSE '헐'


END   "연령대"



FROM EMPLOYEE;



SELECT


*


FROM EMPLOYEE


EMPLOYEE


ORDER BY CASE JIKUP WHEN '사장' THEN 1

  WHEN '부장' THEN 2

  WHEN '과장' THEN 3

  WHEN '대리' THEN 4

  WHEN '사원' THEN 5 END ASC;


;



SELECT


*


FROM PRODUCT


ORDER BY TO_NUMBER(TOT_CNT) DESC


SELECT

    E.EMP_NAME

    ,D.DEP_NAME

    ,E.JIKUP

    ,DEP_NO


FROM

    EMPLOYEE E INNER JOIN DEPT D


USING(DEP_NO)



SELECT


    C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP


FROM


    CUSTOMER C, EMPLOYEE E


WHERE C.EMP_NO=E.EMP_NO(+)


SELECT


    C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP


FROM


    CUSTOMER C, EMPLOYEE E


WHERE C.EMP_NO=E.EMP_NO


SELECT


    C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP


FROM


    CUSTOMER C INNER JOIN EMPLOYEE E


ON


    C.EMP_NO=E.EMP_NO


SELECT


    C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP


FROM


    CUSTOMER C INNER JOIN EMPLOYEE E


USING(EMP_NO)


SELECT

     C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP


FROM


    CUSTOMER C, EMPLOYEE E


WHERE


    (C.EMP_NO=E.EMP_NO) AND E.DEP_NO = 10;


SELECT

     C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP


FROM


    CUSTOMER C INNER JOIN EMPLOYEE E


ON


    C.EMP_NO=E.EMP_NO


WHERE E.DEP_NO = 10;


SELECT

     C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP


FROM


    CUSTOMER C, EMPLOYEE E


WHERE


    (C.EMP_NO=E.EMP_NO) AND E.SALARY>=3000;


SELECT

     C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP


FROM


    CUSTOMER C INNER JOIN EMPLOYEE E


ON


    C.EMP_NO=E.EMP_NO

WHERE


     E.SALARY>=3000;



SELECT


    D.DEP_NAME

    ,E.EMP_NAME

    ,E.JIKUP

    ,C.CUS_NAME

    ,C.TEL_NUM


FROM


    EMPLOYEE E, DEPT D, CUSTOMER C


WHERE


    (D.DEP_NO=E.DEP_NO) AND (E.EMP_NO=C.EMP_NO)


ORDER BY E.EMP_NAME  ;





SELECT


    D.DEP_NAME

    ,E.EMP_NAME

    ,E.JIKUP

    ,C.CUS_NAME

    ,C.TEL_NUM


FROM


    EMPLOYEE E, DEPT D, CUSTOMER C


WHERE


    (D.DEP_NO=E.DEP_NO) AND (E.EMP_NO=C.EMP_NO)


ORDER BY 2  ;



SELECT


    D.DEP_NAME

    ,E.EMP_NAME

    ,E.JIKUP

    ,C.CUS_NAME

    ,C.TEL_NUM


FROM


    (EMPLOYEE E INNER JOIN DEPT D  ON E.DEP_NO=D.DEP_NO) INNER JOIN CUSTOMER C


    ON E.EMP_NO=C.EMP_NO


    ORDER BY 2;




SELECT


    D.DEP_NAME

    ,E.EMP_NAME

    ,E.JIKUP

    ,S.SAL_GRADE_NO


FROM


    DEPT D, EMPLOYEE E, SALARY_GRADE S


WHERE


    (D.DEP_NO=E.DEP_NO) AND E.SALARY>=S.MIN_SAL AND E.SALARY<=S.MAX_SAL



SELECT DEP.DEP_NAME, EMP.EMP_NAME, EMP.JIKUP, S.SAL_GRADE_NO


 FROM  EMPLOYEE EMP, SALARY_GRADE S, DEPT DEP


 WHERE (EMP.DEP_NO=DEP.DEP_NO) AND EMP.SALARY BETWEEN S.MIN_SAL AND S.MAX_SAL;


 SELECT DEP.DEP_NAME, EMP.EMP_NAME, EMP.JIKUP, S.SAL_GRADE_NO


 FROM  EMPLOYEE EMP, SALARY_GRADE S, DEPT DEP


 WHERE (EMP.DEP_NO=DEP.DEP_NO) AND EMP.SALARY>= S.MIN_SAL AND EMP.SALARY<=S.MAX_SAL;




















 ======================================================

 6. 직원부서명 직원명 직원직급 연봉등급을 출력해주세요.

 ======================================================




 =====================================================================================

 7. 직원명 직원직급 상관명 직속상관직급을 출력하면? <조건>직속상관이 있는 직원만 포함.

 =====================================================================================


 =====================================================================================

 8. 직원명 직원직급 직속부하 직속부하직급 출력하면? <조건>직속부하가 있는 직원만 포함.

 =====================================================================================



 SELECT


    E1.EMP_NAME

    ,E1.JIKUP

    ,E2.EMP_NAME

    ,E2.JIKUP


 FROM


    EMPLOYEE E1, EMPLOYEE E2


 WHERE


    E1.MGR_EMP_NO=E2.EMP_NO


 SELECT


    E1.EMP_NAME

    ,E1.JIKUP

    ,E2.EMP_NAME

    ,E2.JIKUP


 FROM


    EMPLOYEE E1, EMPLOYEE E2


 WHERE


    E1.EMP_NO=E2.MGR_EMP_NO






 ===========================================================================

 9. 부서명 직원명 직원직급 연봉등급 직속상관 직속상관직급 고객명 출력하세요.

 ===========================================================================






 =============================================================================================

 10. 고객명 고객전화번호 담당직원명 담당직원직급을 출력하면?<조건>담당직원이 없는 고객도 포함.

 =============================================================================================


 SELECT CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP


 FROM CUSTOMER CUS, EMPLOYEE EMP


 WHERE CUS.EMP_NO=EMP.EMP_NO(+);


 SELECT CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP


 FROM CUSTOMER CUS OUTTER JOIN EMPLOYEE EMP






 ===============================================================================================================================

 11. 고객번호 고객명 고객전화번호 담당직원명 담당직원직급을 출력하면?<조건>고객정보는 모두 보이고 직원정보는 10번 부서만 보일것.

 ===============================================================================================================================


 SELECT CUS.CUS_NO,CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP


 FROM CUSTOMER CUS, EMPLOYEE EMP


 WHERE CUS.EMP_NO=EMP.EMP_NO(+) AND EMP.DEP_NO(+)=10;


 ==============================================================================================================================

 12. 고객번호 고객명 고객전화번호 담당직원명 담당직원직급 담당직원 연봉등급을 출력하면?<조건>담당직원 없는 고객도 출력해주세요.

 ==============================================================================================================================


 SELECT CUS.CUS_NO,CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP,S.SAL_GRADE_NO


 FROM CUSTOMER CUS, EMPLOYEE EMP, SALARY_GRADE S


 WHERE CUS.EMP_NO=EMP.EMP_NO(+) AND EMP.SALARY>=S.MIN_SAL(+) AND EMP.SALARY<=S.MAX_SAL(+)


 ORDER BY CUS.CUS_NO;












 ===========================================================================

 9. 부서명 직원명 직원직급 연봉등급 직속상관 직속상관직급 고객명 출력하세요.

 ===========================================================================


 SELECT DEP.DEP_NAME,EMP.EMP_NAME,EMP.JIKUP,S.SAL_GRADE_NO,EMP1.EMP_NAME,EMP1.JIKUP,CUS.CUS_NAME


 FROM EMPLOYEE EMP , EMPLOYEE EMP1 ,DEPT DEP, SALARY_GRADE S, CUSTOMER CUS


 WHERE (EMP.EMP_NO=CUS.EMP_NO) AND (EMP.DEP_NO=DEP.DEP_NO) AND (EMP.MGR_EMP_NO=EMP1.EMP_NO) AND EMP.MGR_EMP_NO IS NOT NULL AND EMP.SALARY BETWEEN S.MIN_SAL AND S.MAX_SAL;


 SELECT DEP.DEP_NAME,EMP.EMP_NAME,EMP.JIKUP,S.SAL_GRADE_NO,EMP1.EMP_NAME,EMP1.JIKUP,CUS.CUS_NAME


 FROM((((EMPLOYEE EMP INNER JOIN EMPLOYEE EMP1 ON EMP.MGR_EMP_NO=EMP1.EMP_NO) INNER JOIN DEPT DEP ON EMP.DEP_NO=DEP.DEP_NO) INNER JOIN CUSTOMER CUS ON EMP.EMP_NO=CUS.EMP_NO) INNER JOIN SALARY_GRADE S ON EMP.SALARY BETWEEN S.MIN_SAL AND S.MAX_SAL)


 WHERE EMP.MGR_EMP_NO IS NOT NULL ;



 =============================================================================================

 10. 고객명 고객전화번호 담당직원명 담당직원직급을 출력하면?<조건>담당직원이 없는 고객도 포함.

 =============================================================================================


 SELECT CUS.CUS_NO,CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP,EMP.DEP_NO


 FROM CUSTOMER CUS, EMPLOYEE EMP


 WHERE CUS.EMP_NO=EMP.EMP_NO(+);



 SELECT CUS.CUS_NO,CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP,EMP.DEP_NO


 FROM CUSTOMER CUS LEFT OUTER JOIN EMPLOYEE EMP ON CUS.EMP_NO=EMP.EMP_NO;


 ===============================================================================================================================

 11. 고객번호 고객명 고객전화번호 담당직원명 담당직원직급을 출력하면?<조건>고객정보는 모두 보이고 직원정보는 10번 부서만 보일것.

 ===============================================================================================================================


 SELECT CUS.CUS_NO,CUS.CUS_NO,CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP,EMP.DEP_NO


 FROM CUSTOMER CUS, EMPLOYEE EMP


 WHERE CUS.EMP_NO=EMP.EMP_NO(+) AND EMP.DEP_NO(+)=10;


 SELECT CUS.CUS_NO,CUS.CUS_NO,CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP,EMP.DEP_NO


 FROM CUSTOMER CUS LEFT OUTER JOIN EMPLOYEE EMP ON CUS.EMP_NO=EMP.EMP_NO AND EMP.DEP_NO=10;


 SELECT CUS.CUS_NO,CUS.CUS_NO,CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP,EMP.DEP_NO


 FROM EMPLOYEE EMP RIGHT OUTER JOIN CUSTOMER CUS  ON CUS.EMP_NO=EMP.EMP_NO AND EMP.DEP_NO=10;


 ==============================================================================================================================

 12. 고객번호 고객명 고객전화번호 담당직원명 담당직원직급 담당직원 연봉등급을 출력하면?<조건>담당직원 없는 고객도 출력해주세요.

 ==============================================================================================================================


 SELECT CUS.CUS_NO,CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP,S.SAL_GRADE_NO


 FROM CUSTOMER CUS, EMPLOYEE EMP, SALARY_GRADE S


 WHERE CUS.EMP_NO=EMP.EMP_NO(+) AND EMP.SALARY>=S.MIN_SAL(+) AND EMP.SALARY<=S.MAX_SAL(+)


 ORDER BY CUS.CUS_NO;




 SELECT CUS.CUS_NO,CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP,S.SAL_GRADE_NO


 FROM CUSTOMER CUS, EMPLOYEE EMP, SALARY_GRADE S


 WHERE CUS.EMP_NO=EMP.EMP_NO(+) AND EMP.SALARY BETWEEN S.MIN_SAL(+) AND S.MAX_SAL(+)


 ORDER BY CUS.CUS_NO;



 SELECT CUS.CUS_NO,CUS.CUS_NAME,CUS.TEL_NUM,EMP.EMP_NAME,EMP.JIKUP,S.SAL_GRADE_NO


 FROM (CUSTOMER CUS LEFT OUTER JOIN EMPLOYEE EMP ON CUS.EMP_NO=EMP.EMP_NO) LEFT OUTER JOIN SALARY_GRADE S ON EMP.SALARY BETWEEN S.MIN_SAL AND S.MAX_SAL



 ORDER BY CUS.CUS_NO;






 SELECT


    C.CUS_NO

    ,C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP

    ,S.SAL_GRADE_NO


 FROM


    CUSTOMER C, EMPLOYEE E, SALARY_GRADE S


 WHERE


    C.EMP_NO=E.EMP_NO(+) AND E.SALARY BETWEEN S.MIN_SAL(+) AND S.MAX_SAL(+)


 ORDER BY


    C.CUS_NO;



 SELECT


    C.CUS_NO

    ,C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP

    ,S.SAL_GRADE_NO


 FROM


    ((CUSTOMER C LEFT OUTER JOIN EMPLOYEE E ON C.EMP_NO=E.EMP_NO) LEFT OUTER JOIN  SALARY_GRADE S ON E.SALARY BETWEEN S.MIN_SAL AND S.MAX_SAL)



 ORDER BY


    C.CUS_NO;





SELECT


    C.CUS_NO

    ,C.CUS_NAME

    ,C.TEL_NUM

    ,E.EMP_NAME

    ,E.JIKUP

    ,S.SAL_GRADE_NO


 FROM


    ((CUSTOMER C LEFT OUTER JOIN EMPLOYEE E ON C.EMP_NO=E.EMP_NO) LEFT OUTER JOIN  SALARY_GRADE S ON E.SALARY>=S.MIN_SAL AND E.SALARY<=S.MAX_SAL)



 ORDER BY


    C.CUS_NO;






SELECT * FROM EMPLOYEE WHERE SALARY=(SELECT MAX(SALARY) FROM EMPLOYEE);


SELECT * FROM EMPLOYEE WHERE SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE);


SELECT * FROM EMPLOYEE WHERE SALARY=(SELECT MAX(SALARY) FROM EMPLOYEE WHERE DEP_NO = 20);


SELECT


    EMP_NAME

    ,JIKUP

    ,SALARY

    ,TO_CHAR(SALARY/(SELECT SUM(SALARY) FROM EMPLOYEE)*100, '999')||'%'


FROM EMPLOYEE;





  직원번호 직원이름 주민 연봉 전체연봉











SELECT


    EMP_NO

    ,EMP_NAME

    ,JUMIN_NUM

    ,SALARY

    ,TO_CHAR(TRUNC((SALARY/(SELECT SUM(SALARY) FROM EMPLOYEE))*100,1))||'%' "A"



FROM EMPLOYEE
















=============================================================

6. 최고 연봉 직원의 직원번호 직원명 부서명 연봉을 검색하세요.

=============================================================


SELECT EMP.EMP_NO,EMP.EMP_NAME,DEP.DEP_NAME


FROM EMPLOYEE EMP, DEPT DEP


WHERE EMP.DEP_NO=DEP.DEP_NO AND EMP.SALARY=(SELECT MAX(SALARY) FROM EMPLOYEE);




SELECT EMP.EMP_NO,EMP.EMP_NAME,DEP.DEP_NAME


FROM EMPLOYEE EMP INNER JOIN DEPT DEP ON EMP.DEP_NO=DEP.DEP_NO AND EMP.SALARY=(SELECT MAX(SALARY) FROM EMPLOYEE);



==================================================================================================

7. 10번 부서 직원들 보다 연봉을 더 많이 받는 20번 부서의 직원의 직원번호 직원명 연봉을 검색하세요.

==================================================================================================


SELECT EMP_NO,EMP_NAME,SALARY


FROM EMPLOYEE


WHERE DEP_NO=20 AND SALARY>(SELECT MIN(SALARY) FROM EMPLOYEE WHERE DEP_NO=10);


=============================================

8. 부장들 보다 연봉이 많은 과장을 검색하세요.

=============================================


SELECT *


FROM EMPLOYEE


WHERE JIKUP='과장' AND SALARY>(SELECT MIN(SALARY) FROM EMPLOYEE WHERE  JIKUP='부장');



============================================

9. 한국남과 직급이 동일한 직원을 검색하세요.

============================================


SELECT *


FROM EMPLOYEE


WHERE JIKUP IN (SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='한국남');


SELECT *


FROM EMPLOYEE


WHERE JIKUP = ANY (SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='한국남');


=============================================

10. 무궁화와 직급이 동일한 직원을 검색하세요.

=============================================


SELECT *


FROM EMPLOYEE


WHERE JIKUP IN (SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='무궁화');


SELECT *


FROM EMPLOYEE


WHERE JIKUP = ANY (SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='무궁화');


==========================================

11. 직원번호 직원명 소속부서명을 검색하면?

==========================================


SELECT E.EMP_NO, E.EMP_NAME, D.DEP_NAME


FROM EMPLOYEE E, DEPT D


WHERE E.DEP_NO=D.DEP_NO;


SELECT E.EMP_NO, E.EMP_NAME, D.DEP_NAME


FROM EMPLOYEE E INNER JOIN DEPT D  ON  E.DEP_NO=D.DEP_NO;



SELECT E.EMP_NO, E.EMP_NAME, (SELECT D.DEP_NAME FROM DEPT D WHERE D.DEP_NO=E.DEP_NO)


FROM EMPLOYEE E




=========================================================================================

12. 평균 연봉 이상이고 최대 연봉 미만의 직원명 연봉 전체평균연봉 전체최대연봉을 출력하면?

=========================================================================================


SELECT


EMP_NAME "직원명"

,SALARY "연봉"

,(SELECT AVG(SALARY) FROM EMPLOYEE)"전체평균연봉"

,(SELECT MAX(SALARY) FROM EMPLOYEE) "전체최대연봉"


FROM


EMPLOYEE


WHERE


SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE) AND SALARY<(SELECT MAX(SALARY) FROM EMPLOYEE);



SELECT


E1.EMP_NAME

,E1.SALARY

,E2.SAL_AVG

,E2.SAL_MAX


FROM


EMPLOYEE E1, (SELECT AVG(SALARY) "SAL_AVG", MAX(SALARY) "SAL_MAX" FROM EMPLOYEE ) E2


WHERE

E1.SALARY>=E2.SAL_AVG AND E1.SALARY<E2.SAL_MAX;


====================================

13. 연봉 상위 5명의 직원을 검색하면?

====================================


SELECT *


FROM (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC)


WHERE ROWNUM<=5;


SELECT *


FROM (SELECT RANK() OVER(ORDER BY SALARY DESC) RANK, EMPLOYEE.* FROM EMPLOYEE)


WHERE RANK<=5;


=============================================================

14. 연봉 상위 3위~5위 직원의 직원번호 직원명 연봉을 검색하면?

=============================================================


SELECT


EMP_NO

,EMP_NAME

,SALARY


FROM


(SELECT RANK() OVER (ORDER BY SALARY DESC) AS RANK, EMPLOYEE.*

    FROM EMPLOYEE

    )


WHERE

RANK<=5 AND RANK>=3;







SELECT


EMP_NO

,EMP_NAME

,SALARY

,RNUM


FROM


( SELECT E.*, ROWNUM RNUM


 FROM

        (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC) E


WHERE

                ROWNUM<=5


)

WHERE

    RNUM>=3;



SELECT

EMP_NO

,EMP_NAME

,SALARY

FROM

(SELECT E.*, ROWNUM RNUM FROM

                              (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC) E

)

WHERE RNUM>=3 AND RNUM<=5;



==========================================================================

15. 직원번호 직원명 연봉 연봉 순위를 출력하면? 단 연봉순위를 오름차순 유지

==========================================================================


SELECT


EMP_NO

,EMP_NAME

,SALARY

,RANK() OVER(ORDER BY SALARY DESC) AS "연봉순위"


FROM EMPLOYEE;


SELECT


EMP_NO

,EMP_NAME

,SALARY

,RANK() OVER(ORDER BY SALARY DESC) AS "연봉순위"


FROM EMPLOYEE;



====================================================================================================================

16. 직원번호 직원명 주민번호 탄생열순위 출력하면? 단 탄생서열순위를 오름차순 유지 같은날 태어났으면 서열순위는 동일.

====================================================================================================================


SELECT


EMP_NO

,EMP_NAME

,JUMIN_NUM

,RANK() OVER(ORDER BY JUMIN_NUM ASC) AS "탄생서열순위"


FROM EMPLOYEE;


=================================================================================

17. 직원번호 직원명 직급 직급서열순위를 출력하면? 단 직급서열순위를 오름차순 유지

=================================================================================


SELECT


EMP_NO AS "직원번호"

,EMP_NAME AS "직원명"

,JIKUP AS "직급"

,CASE JIKUP

WHEN '사장' THEN 1

WHEN '부장' THEN 2

WHEN '과장' THEN 3

WHEN '대리' THEN 4

WHEN '사원' THEN 5

ELSE 6 END AS "직급서열순위"


FROM EMPLOYEE


ORDER BY "직급서열순위";


SELECT


EMP_NO AS "직원번호"

,EMP_NAME AS "직원명"

,JIKUP AS "직급"

,CASE JIKUP

WHEN '사장' THEN 1

WHEN '부장' THEN 2

WHEN '과장' THEN 3

WHEN '대리' THEN 4

WHEN '사원' THEN 5

ELSE 6 END AS "직급서열순위"


FROM EMPLOYEE


ORDER BY 4;



==========================================

18. 직원번호 직원명 담당고객수를 출력하면?

==========================================


SELECT

E.DEP_NO

,E.EMP_NO "직원번호"

,E.EMP_NAME "직원명"

,(SELECT COUNT(EMP_NO) FROM CUSTOMER C WHERE C.EMP_NO=E.EMP_NO) ||'명' "담당고객수"


FROM EMPLOYEE E


================================================

19. 부서명 부서직원수 부서담당고객수를 출력하면?

================================================


SELECT


DEP_NAME "부서명"

,(SELECT COUNT(*) FROM EMPLOYEE E WHERE E.DEP_NO=D.DEP_NO) ||'명' "부서직원수"

,(SELECT COUNT(*) FROM EMPLOYEE E, CUSTOMER C WHERE E.DEP_NO=D.DEP_NO AND E.EMP_NO=C.EMP_NO) ||'명' "담당총고객수"


FROM DEPT D;


SELECT


DEP_NAME "부서명"

,(SELECT COUNT(*) FROM EMPLOYEE E WHERE E.DEP_NO=D.DEP_NO) ||'명' "부서직원수"

,(SELECT COUNT(*) FROM EMPLOYEE E, CUSTOMER C WHERE E.DEP_NO=D.DEP_NO AND E.EMP_NO=C.EMP_NO) ||'명' "담당총고객수"


FROM DEPT D;


=============================================================================================

20. 고객명 고객전화번호 담당직원명 담당직원직급을 출력하면? <조건>담당직원이 없는 고객도 포함

=============================================================================================


SELECT


ROWNUM "고객번호"

,C.CUS_NAME "고객명"

,C.TEL_NUM "고객전화번호"

,E.EMP_NAME "담당직원이름"

,E.JIKUP "담당직원직급"

,E.DEP_NO "부서번호"



FROM CUSTOMER C, EMPLOYEE E


WHERE C.EMP_NO=E.EMP_NO(+);


SELECT


ROWNUM "고객번호"

,C.CUS_NAME "고객명"

,C.TEL_NUM "고객전화번호"

,E.EMP_NAME "담당직원이름"

,E.JIKUP "담당직원직급"

,E.DEP_NO "부서번호"



FROM CUSTOMER C LEFT OUTER JOIN EMPLOYEE E ON C.EMP_NO=E.EMP_NO(+);


SELECT


    C.CUS_NAME

    ,C.TEL_NUM

    ,(SELECT E.EMP_NAME FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO) "담당직원번호"

    ,(SELECT E.JIKUP FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO)   "담당직원직급"

    ,(SELECT E.DEP_NO FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO)   "부서번호"


FROM


    CUSTOMER C



SELECT


    C.CUS_NAME

    ,C.TEL_NUM

    ,(SELECT E.EMP_NAME FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO) "담당직원번호"

    ,(SELECT E.JIKUP FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO)   "담당직원직급"

    ,(SELECT E.DEP_NO FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO)   "부서번호"


FROM


    CUSTOMER C










===============================================================================================================================

21. 고객번호 고객명 고객전화번호 담당직원명 담당직원직급을 출력하면?<조건>고객정보는 모두 보이고 직원정보는 10번 부서만 보일 것

===============================================================================================================================


SELECT


ROWNUM "고객번호"

,C.CUS_NAME "고객명"

,C.TEL_NUM "고객전화번호"

,(SELECT E.EMP_NAME FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10) "담당직원이름"

,(SELECT E.JIKUP FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10) "담당직원직급"

,(SELECT E.DEP_NO FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10) "부서번호"



FROM CUSTOMER C;




SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM "고객전화번호"

    ,E.EMP_NAME "담당직원명"

    ,E.JIKUP

    ,E.DEP_NO


FROM


    CUSTOMER C, EMPLOYEE E


WHERE


    C.EMP_NO=E.EMP_NO(+) AND DEP_NO(+) = 10 ;


SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM "고객전화번호"

    ,E.EMP_NAME "담당직원명"

    ,E.JIKUP

    ,E.DEP_NO


FROM


    CUSTOMER C LEFT OUTER JOIN EMPLOYEE E ON    C.EMP_NO=E.EMP_NO AND DEP_NO= 10 ;




















SELECT *


FROM EMPLOYEE


WHERE DEP_NO = 20 AND SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE WHERE DEP_NO=20)












SELECT


    C.CUS_NO

    ,C.CUS_NAME

    ,E.EMP_NO


FROM


    CUSTOMER C, EMPLOYEE E


WHERE


    C.EMP_NO=E.EMP_NO AND E.DEP_NO = 10;




SELECT


    C.CUS_NO

    ,C.CUS_NAME

    ,E.EMP_NO


FROM


    CUSTOMER C INNER JOIN EMPLOYEE E ON C.EMP_NO=E.EMP_NO AND E.DEP_NO = 10;







SELECT


    CUS_NO

    ,CUS_NAME

    ,EMP_NO


FROM


    CUSTOMER


WHERE EMP_NO IN (SELECT EMP_NO FROM EMPLOYEE WHERE DEP_NO=10)




SELECT


    E.EMP_NO

    ,E.EMP_NAME

    ,E.JIKUP

    ,D.DEP_NAME

    ,E.SALARY


FROM


    EMPLOYEE E, DEPT D


WHERE


    E.DEP_NO=D.DEP_NO AND E.SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE)


SELECT


    E.EMP_NO

    ,E.EMP_NAME

    ,E.JIKUP

    ,D.DEP_NAME

    ,E.SALARY


FROM


    EMPLOYEE E INNER JOIN DEPT D ON E.DEP_NO=D.DEP_NO AND E.SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE)



SELECT


     E.EMP_NO

    ,E.EMP_NAME

    ,E.JIKUP

    ,(SELECT D.DEP_NAME FROM DEPT D WHERE D.DEP_NO=E.DEP_NO)

    ,E.SALARY



FROM


    EMPLOYEE E


WHERE


    E.SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE)






SELECT


    EMP_NO

    ,EMP_NAME

    ,SALARY


FROM

    EMPLOYEE


WHERE


    DEP_NO = 20 AND SALARY>(SELECT MIN(SALARY) FROM EMPLOYEE WHERE DEP_NO=10)



SELECT


    *


FROM EMPLOYEE


WHERE JIKUP='과장' AND SALARY>(SELECT MIN(SALARY) FROM EMPLOYEE WHERE JIKUP='부장' )




SELECT


    *


FROM


    EMPLOYEE


WHERE


    JIKUP IN (SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='한국남')





SELECT


    *


FROM


    EMPLOYEE


WHERE


    JIKUP IN (SELECT JIKUP FROM EMPLOYEE WHERE EMP_NAME='무궁화')






SELECT


    E.EMP_NO

    ,E.EMP_NAME

    ,D.DEP_NAME


FROM


    EMPLOYEE E, DEPT D


WHERE


    E.DEP_NO=D.DEP_NO



SELECT


    E.EMP_NO

    ,E.EMP_NAME

    ,D.DEP_NAME


FROM


    EMPLOYEE E INNER JOIN DEPT D  ON  E.DEP_NO=D.DEP_NO



SELECT


    E.EMP_NO

    ,E.EMP_NAME

    ,(SELECT D.DEP_NAME FROM DEPT D WHERE D.DEP_NO=E.DEP_NO )


FROM


    EMPLOYEE E





SELECT


    EMP_NAME

    ,SALARY

    ,(SELECT AVG(SALARY) FROM EMPLOYEE)

    ,(SELECT MAX(SALARY) FROM EMPLOYEE)


FROM


    EMPLOYEE






SELECT


    EMP_NAME

    ,SALARY

    ,SAL_AVG

    ,SAL_MAX



FROM


    EMPLOYEE, (SELECT



    (SELECT AVG(SALARY) FROM EMPLOYEE) AS "SAL_AVG"

    ,(SELECT MAX(SALARY) FROM EMPLOYEE) AS "SAL_MAX"


FROM


    EMPLOYEE)




SELECT


    *


FROM


    (SELECT


    *


FROM


    EMPLOYEE


ORDER BY


    SALARY DESC)


WHERE


    ROWNUM <6





(SELECT


    RANK() OVER (ORDER BY SALARY DESC) AS RANK

    ,E.*


FROM


    EMPLOYEE E)




SELECT


     ASD

     ,ASDD

     ,ASDDDD

     ,ASDDDDDD


FROM

(SELECT


    RANK() OVER (ORDER BY SALARY DESC) AS RANK

    ,E.EMP_NO "ASD",E.EMP_NAME "ASDD",E.DEP_NO "ASDDDD",E.JIKUP "ASDDDDDD"


FROM


    EMPLOYEE E


WHERE


   RANK<6 AND RANK>3 )


WHERE

   RANK<6





SELECT


    C.CUS_NO

    ,C.CUS_NAME

    ,C.EMP_NO


FROM CUSTOMER C


WHERE


    EXISTS(SELECT 1 FROM EMPLOYEE E WHERE E.EMP_NO = C.EMP_NO AND E.DEP_NO=10)













SELECT


    C.CUS_NO

    ,C.CUS_NAME

    ,E.EMP_NO


FROM


    CUSTOMER C, EMPLOYEE E


WHERE


C.EMP_NO=E.EMP_NO AND EXISTS(SELECT 1 FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10)



SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM "고객전화번호"

    ,E.EMP_NAME "담당직원명"

    ,E.JIKUP "담당직원직급"

    ,E.DEP_NO "부서번호"

FROM


    CUSTOMER C, EMPLOYEE E


WHERE


    C.EMP_NO=E.EMP_NO(+) AND E.DEP_NO(+)=10




SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM "고객전화번호"

    ,E.EMP_NAME "담당직원명"

    ,E.JIKUP "담당직원직급"

    ,E.DEP_NO "부서번호"

FROM


    CUSTOMER C LEFT OUTER JOIN EMPLOYEE E  ON C.EMP_NO=E.EMP_NO AND E.DEP_NO=10



SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM "고객전화번호"

    ,E.EMP_NAME "담당직원명"

    ,E.JIKUP "담당직원직급"

    ,E.DEP_NO "부서번호"

FROM


    CUSTOMER C LEFT OUTER JOIN EMPLOYEE E  ON C.EMP_NO=E.EMP_NO AND E.DEP_NO=10



SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM "고객전화번호"

    ,(SELECT E.EMP_NAME FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10) "담당직원명"

    ,(SELECT E.JIKUP FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10) "담당직원직급"

    ,(SELECT E.DEP_NO FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10) "부서번호"

FROM


    CUSTOMER C


WHERE






SELECT


    CUS_NO

    ,CUS_NAME

    ,EMP_NO


FROM


    CUSTOMER


WHERE


    EMP_NO IN (SELECT EMP_NO FROM EMPLOYEE WHERE DEP_NO=10)



SELECT


    CUS_NO

    ,CUS_NAME

    ,EMP_NO


FROM


    CUSTOMER C


WHERE


    EXISTS  (SELECT 1 FROM EMPLOYEE E WHERE C.EMP_NO=E.EMP_NO AND E.DEP_NO=10)





SELECT


    *


FROM


    EMPLOYEE  E


WHERE


    EXISTS(SELECT 1 FROM EMPLOYEE E1 WHERE E.EMP_NO=E1.EMP_NO AND E.JIKUP='과장' AND E.SALARY>(SELECT MIN(SALARY) FROM EMPLOYEE WHERE JIKUP='부장'))




SELECT


    *


FROM


    EMPLOYEE


WHERE


    EXISTS(SELECT 1 FROM EMPLOYEE E WHERE E.JIKUP='과장' AND E.SALARY>(SELECT MIN(SALARY) FROM EMPLOYEE WHERE JIKUP='부장'))










SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM "고객전화번호"

    ,E.EMP_NAME "담당직원명"

    ,E.JIKUP "담당직원직급"

    ,E.DEP_NO "부서번호"

FROM


    CUSTOMER C, EMPLOYEE E


WHERE


    C.EMP_NO=E.EMP_NO(+)







SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM "고객전화번호"

    ,E.EMP_NAME "담당직원명"

    ,E.JIKUP "담당직원직급"

    ,E.DEP_NO "부서번호"

FROM


    CUSTOMER C LEFT OUTER JOIN EMPLOYEE E ON  C.EMP_NO=E.EMP_NO(+)




SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM "고객전화번호"

    ,(SELECT E.EMP_NO FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO) "담당직원명"

    ,(SELECT E.JIKUP FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO) "담당직원직급"

    ,(SELECT E.DEP_NO FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO) "부서번호"

FROM


    CUSTOMER C





SELECT


    E.EMP_NO

    ,E.EMP_NAME

    ,D.DEP_NAME

    ,E.SALARY


FROM


    EMPLOYEE E, DEPT D


WHERE


    E.DEP_NO=D.DEP_NO AND E.SALARY IN (SELECT MAX(SALARY) FROM EMPLOYEE )




SELECT


    E.EMP_NO

    ,E.EMP_NAME

    ,D.DEP_NAME

    ,E.SALARY


FROM


    EMPLOYEE E INNER JOIN DEPT D ON  E.DEP_NO=D.DEP_NO AND E.SALARY IN (SELECT MAX(SALARY) FROM EMPLOYEE )






SELECT


    E.EMP_NO

    ,E.EMP_NAME

    ,(SELECT D.DEP_NAME FROM DEPT D WHERE E.DEP_NO=D.DEP_NO)

    ,E.SALARY


FROM


    EMPLOYEE E


WHERE


   E.SALARY IN (SELECT MAX(SALARY) FROM EMPLOYEE )




SELECT


    C.CUS_NAME

    ,(SELECT E.EMP_NO FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO)


FROM


    CUSTOMER C






SELECT


    EMP_NO

    ,EMP_NAME

    ,SALARY


FROM


    EMPLOYEE


WHERE


    DEP_NO=20 AND SALARY > ANY (SELECT SALARY FROM EMPLOYEE WHERE DEP_NO=10)







SELECT


    EMP_NO

    ,EMP_NAME

    ,SALARY


FROM


    EMPLOYEE


WHERE


    DEP_NO=20 AND SALARY >  (SELECT MIN(SALARY) FROM EMPLOYEE WHERE DEP_NO=10)




SELECT


    E.EMP_NAME

    ,E.SALARY

    ,T.AVG1

    ,T.MAX1


FROM


    EMPLOYEE E, (SELECT AVG(SALARY) "AVG1", MAX(SALARY) "MAX1" FROM EMPLOYEE ) T



WHERE E.SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE) AND E.SALARY<(SELECT MAX(SALARY) FROM EMPLOYEE)







(SELECT


    *


FROM


    (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC) E


WHERE


    ROWNUM <6)




SELECT

*


FROM


(SELECT

    ROWNUM  "RWN"

    ,

    E.*


FROM


    (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC) E


WHERE


    ROWNUM <6)




WHERE


RWN=<4 AND RWN>=1






SELECT


    E1.EMP_NO

    ,E1.EMP_NAME

    ,E1.SALARY

    ,E1.JIKUP

    ,(SELECT COUNT(*)+1 FROM EMPLOYEE E2 WHERE E2.SALARY>E1.SALARY) "연봉순위"


FROM


EMPLOYEE E1


ORDER BY  연봉순위



SELECT

    NOO "사원번호"

    ,NAMEE "사원명"

    ,SALARYY "연봉"

    ,JIKUPPPP "직급"

    ,JIKUPP "직급순위"

    ,RANKK "연봉랭킹"

FROM


(

SELECT


    E1.EMP_NO "NOO"

    ,E1.EMP_NAME "NAMEE"

    ,E1.SALARY "SALARYY"

    ,E1.JIKUP "JIKUPPPP"

    ,CASE E1.JIKUP WHEN '사장' THEN'1' WHEN '과장' THEN'2' WHEN '부장' THEN'3' WHEN '대리' THEN'4' WHEN '사원' THEN'5' ELSE '6'END "JIKUPP"

    ,(SELECT COUNT(*)+1 FROM EMPLOYEE E2 WHERE E2.SALARY>E1.SALARY) "RANKK"



FROM


EMPLOYEE E1


ORDER BY JIKUPP,RANKK

)




SELECT


    EMP_NO

    ,EMP_NAME

    ,SALARY

    ,RANK() OVER(ORDER BY SALARY DESC ) "연봉순위"


    FROM


    EMPLOYEE







SELECT


    E1.EMP_NO

    ,E1.EMP_NAME

    ,E1.SALARY

    ,RANK() OVER(ORDER BY SALARY DESC)



FROM EMPLOYEE E1






SELECT


    EMP_NO

    ,EMP_NAME

    ,JUMIN_NUM

    ,RANK() OVER(ORDER BY JUMIN_NUM)


FROM


    EMPLOYEE










SELECT


    E1.EMP_NO "직원번호"

    ,E1.EMP_NAME "직원명"

    ,(SELECT COUNT(*) FROM CUSTOMER C WHERE C.EMP_NO=E1.EMP_NO ) "담당고객명"


FROM EMPLOYEE E1



SELECT


    D.DEP_NAME "부서명"

    ,(SELECT COUNT(*) FROM EMPLOYEE E WHERE E.DEP_NO=D.DEP_NO)||'명' "부서직원수"

    ,(SELECT COUNT(*) FROM EMPLOYEE E, CUSTOMER C WHERE (E.DEP_NO=D.DEP_NO) AND C.EMP_NO=E.EMP_NO )||'명' "부서담당고객수"



FROM


    DEPT D




SELECT


    D.DEP_NAME "부서명"

    ,(SELECT E.EMP_NAME FROM EMPLOYEE E WHERE E.DEP_NO=D.DEP_NO)




FROM


    DEPT D





SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM  "고객전화번호"

    ,E.EMP_NAME  "담당직원명"

    ,E.JIKUP      "담당직원직급"

    ,E.DEP_NO            "부서번호"


FROM


    CUSTOMER C, EMPLOYEE E


WHERE


    C.EMP_NO=E.EMP_NO(+)





SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM  "고객전화번호"

    ,E.EMP_NAME  "담당직원명"

    ,E.JIKUP      "담당직원직급"

    ,E.DEP_NO            "부서번호"


FROM


    CUSTOMER C LEFT OUTER JOIN EMPLOYEE E ON C.EMP_NO=E.EMP_NO







SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM  "고객전화번호"

    ,(SELECT E.EMP_NAME FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO)  "담당직원명"

    ,(SELECT E.JIKUP FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO)      "담당직원직급"

    ,(SELECT E.DEP_NO FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO)          "부서번호"


FROM


    CUSTOMER C






SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM  "고객전화번호"

    ,E.EMP_NAME  "담당직원명"

    ,E.JIKUP      "담당직원직급"

    ,E.DEP_NO            "부서번호"


FROM


    CUSTOMER C, EMPLOYEE E


WHERE


    C.EMP_NO=E.EMP_NO(+) AND E.DEP_NO(+)=10;




SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM  "고객전화번호"

    ,E.EMP_NAME  "담당직원명"

    ,E.JIKUP      "담당직원직급"

    ,E.DEP_NO            "부서번호"


FROM


    CUSTOMER C LEFT OUTER JOIN EMPLOYEE E ON C.EMP_NO=E.EMP_NO AND E.DEP_NO=10;





SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM  "고객전화번호"

    ,(SELECT E.EMP_NAME FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10 )  "담당직원명"

    ,(SELECT E.JIKUP FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10 )      "담당직원직급"

    ,(SELECT E.DEP_NO FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10 )            "부서번호"


FROM


    CUSTOMER C










SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM  "고객전화번호"

    ,E.EMP_NAME  "담당직원명"

    ,E.JIKUP      "담당직원직급"

    ,E.DEP_NO            "부서번호"


FROM


    CUSTOMER C, EMPLOYEE E


WHERE


    C.EMP_NO=E.EMP_NO(+) AND E.DEP_NO(+)=10;





SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM  "고객전화번호"

    ,E.EMP_NAME  "담당직원명"

    ,E.JIKUP      "담당직원직급"

    ,E.DEP_NO            "부서번호"


FROM


    CUSTOMER C LEFT OUTER JOIN EMPLOYEE E ON     C.EMP_NO=E.EMP_NO AND E.DEP_NO=10;



SELECT


    ROWNUM "고객번호"

    ,C.CUS_NAME "고객명"

    ,C.TEL_NUM  "고객전화번호"

    ,(SELECT E.EMP_NAME FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10)  "담당직원명"

    ,(SELECT E.JIKUP FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10)      "담당직원직급"

    ,(SELECT E.DEP_NO FROM EMPLOYEE E WHERE E.EMP_NO=C.EMP_NO AND E.DEP_NO=10)            "부서번호"


FROM


    CUSTOMER C



SELECT


    D.DEP_NAME

    ,(SELECT COUNT(E.EMP_NAME) FROM EMPLOYEE E WHERE E.DEP_NO=D.DEP_NO)


FROM


     DEPT D


GROUP BY  D.DEP_NAME









SELECT * FROM EMPLOYEE WHERE SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE);



SELECT SUM(SALARY),AVG(SALARY),MAX(SALARY),MIN(SALARY),MAX(HIRE_DATE) FROM EMPLOYEE;



SELECT COUNT(CUS_NAME), COUNT(EMP_NO), COUNT(DISTINCT(EMP_NO)) FROM CUSTOMER;



SELECT DEP_NO, SUM(SALARY), ROUND(AVG(SALARY)), COUNT(*) FROM EMPLOYEE GROUP BY DEP_NO ;



SELECT


    JIKUP

    ,SUM(SALARY)

    , ROUND(AVG(SALARY))

    , COUNT(*)


FROM EMPLOYEE GROUP BY JIKUP ;



SELECT


    DEP_NO

    ,JIKUP

    ,SUM(SALARY)

    ,ROUND(AVG(SALARY))

    ,COUNT(*)


FROM EMPLOYEE GROUP BY DEP_NO,JIKUP ORDER BY DEP_NO  ;



SELECT


    DEP_NO

    ,JIKUP

    ,SUM(SALARY)

    ,ROUND(AVG(SALARY))

    ,COUNT(*)


FROM EMPLOYEE GROUP BY DEP_NO,JIKUP


HAVING COUNT(*)  >=3


ORDER BY DEP_NO  ;



SELECT


    DEP_NO "부서번호"

    ,CASE SUBSTR(JUMIN_NUM,7,1) WHEN'1' THEN'남자'  WHEN'2' THEN'여자'  WHEN'3' THEN'남자'  WHEN'4' THEN'여자' ELSE'맙소사' END "성별"

    ,SUM(SALARY) "급여합"

    ,ROUND(AVG(SALARY)) "평균급여"

    ,COUNT(*) "인원수"


FROM


    EMPLOYEE


GROUP BY

    DEP_NO

    ,CASE SUBSTR(JUMIN_NUM,7,1) WHEN'1' THEN'남자'  WHEN'2' THEN'여자'  WHEN'3' THEN'남자'  WHEN'4' THEN'여자' ELSE'맙소사' END


ORDER BY DEP_NO;




SELECT


    TO_CHAR(HIRE_DATE,'YYYY')

    ,COUNT(*)


FROM EMPLOYEE


GROUP BY  TO_CHAR(HIRE_DATE,'YYYY')




SELECT


    EMP_NAME "이름"

    ,CASE SUBSTR(JUMIN_NUM,7,1) WHEN'1' THEN'19' WHEN'2' THEN'19' WHEN'3' THEN'20' WHEN'4' THEN'20' ELSE'18' END||SUBSTR(JUMIN_NUM,1,2)||'-'||SUBSTR(JUMIN_NUM,3,2)||'-'||SUBSTR(JUMIN_NUM,5,2) "생일"

    ,(TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-TO_NUMBER(CASE SUBSTR(JUMIN_NUM,7,1) WHEN'1' THEN'19' WHEN'2' THEN'19' WHEN'3' THEN'20' WHEN'4' THEN'20' ELSE'18' END||SUBSTR(JUMIN_NUM,1,2)))+1 "나이"


FROM



 EMPLOYEE



SELECT


    DEP_NO "부서번호"

    ,ROUND(AVG((TO_NUMBER(SYSDATE-HIRE_DATE)/365)+1))||'년' "평균근무년수"


FROM EMPLOYEE


GROUP BY DEP_NO


ORDER BY DEP_NO


SELECT


    TO_CHAR(HIRE_DATE,'Q')||'분기'

     ,COUNT(*)



FROM EMPLOYEE


GROUP BY TO_CHAR(HIRE_DATE,'Q')||'분기'



SELECT


    TO_CHAR(HIRE_DATE,'Q')||'분기'

     ,COUNT(*)



FROM EMPLOYEE


WHERE DEP_NO =10


GROUP BY TO_CHAR(HIRE_DATE,'Q')||'분기'




SELECT


    TO_CHAR(HIRE_DATE,'Q')||'분기'

     ,COUNT(*)



FROM EMPLOYEE


WHERE DEP_NO =10


GROUP BY TO_CHAR(HIRE_DATE,'Q')||'분기'


HAVING TO_CHAR(HIRE_DATE,'Q')||'분기'='1분기'



SELECT


  TO_CHAR(HIRE_DATE,'YYYY') "입사연대"

  ,CASE SUBSTR(JUMIN_NUM,7,1) WHEN'1' THEN'남자'  WHEN'2' THEN'여자'  WHEN'3' THEN'남자'  WHEN'4' THEN'여자' ELSE'맙소사' END "성별"

  ,COUNT(*)  "연대별입사자수"


FROM


    EMPLOYEE


GROUP BY


      TO_CHAR(HIRE_DATE,'YYYY')

  ,CASE SUBSTR(JUMIN_NUM,7,1) WHEN'1' THEN'남자'  WHEN'2' THEN'여자'  WHEN'3' THEN'남자'  WHEN'4' THEN'여자' ELSE'맙소사' END


ORDER BY "입사연대"



SELECT


    EMP_NAME "직원명"

    ,TO_CHAR(HIRE_DATE,'YYYY-MM-DD  Q')||'/4분기  '||TO_CHAR(HIRE_DATE, 'DAY', 'NLS_DATE_LANGUAGE=KOREAN') "입사일"

    ,TO_CHAR((HIRE_DATE+((365*20)+(30*5)+10)),'YYYY')||'년'||TO_CHAR((HIRE_DATE+((365*20)+(30*5)+10)),'MM')||'월'||TO_CHAR((HIRE_DATE+((365*20)+(30*5)+10)),'DD')||'일' "퇴사일"



FROM EMPLOYEE



SELECT


    E.DEP_NO

    ,D.LOC

    ,COUNT(E.EMP_NAME)


FROM EMPLOYEE E, DEPT D

WHERE E.DEP_NO = D.DEP_NO

GROUP BY  E.DEP_NO, D.LOC










SELECT


    D.DEP_NO  "부서번호"

    ,D.DEP_NAME   "부서명"

    ,COUNT(E.EMP_NAME) "직원수"

    ,COUNT(C.CUS_NAME) "담당고객수"


FROM


    DEPT D, EMPLOYEE E, CUSTOMER C


WHERE


    (D.DEP_NO=E.DEP_NO(+)) AND E.EMP_NO=C.EMP_NO(+)


GROUP BY D.DEP_NO

    ,D.DEP_NAME


ORDER BY  D.DEP_NO



SELECT


    D.DEP_NAME

    ,COUNT(E.EMP_NAME) "담당직원수"

    ,COUNT(C.CUS_NAME) "담당고객수"


FROM


    DEPT D, EMPLOYEE E, CUSTOMER C


WHERE


    (D.DEP_NO=E.DEP_NO(+)) AND E.EMP_NO=C.EMP_NO(+)


GROUP BY D.DEP_NAME


=========================================

1. EMPLOYEE 테이블에서 <'장보고', 40 '대리', 3500, '2012-05-28', '83311091109310', '01092499215', 3> 데이터를 입력하면?

=========================================


INSERT INTO EMPLOYEE(EMP_NO,EMP_NAME,DEP_NO,JIKUP,SALARY,HIRE_DATE,JUMIN_NUM,PHONE_NUM,MGR_EMP_NO)

VALUES((SELECT NVL(MAX(EMP_NO)+1,1) FROM EMPLOYEE),'장보고',40,'대리',3500,TO_DATE('2012-05-28','YYYY-MM-DD'),'8311091109310','01092499215',3);


SELECT * FROM EMPLOYEE;


ROLLBACK;


COMMIT;


=========================================

2. EMPLOYEE 테이블에서 주민번호 8203121977315, 이름 강감찬 직원의 직급을 주임으로 수정하려먼?

=========================================


UPDATE EMPLOYEE SET JIKUP='주임' WHERE JUMIN_NUM='8203121977315' AND EMP_NAME='강감찬';


SELECT * FROM EMPLOYEE WHERE EMP_NAME='강감찬';


ROLLBACK;


COMMIT;


=========================================

3. EMPLOYEE 테이블에서 주민번호 8410031281312 이름 공부해 직원의 연봉을 10% 인상하면?

=========================================


UPDATE EMPLOYEE SET SALARY=(SALARY+SALARY*0.1) WHERE EMP_NAME='공부해' AND JUMIN_NUM='8410031281312';


SELECT * FROM EMPLOYEE WHERE EMP_NAME='공부해';


ROLLBACK;


COMMIT;


=========================================

4. EMPLOYEE 테이블에서 연봉 4000만원 이상의 직원 연봉을 2% 삭감하면?

=========================================


SELECT * FROM EMPLOYEE WHERE SALARY>=4000;


UPDATE EMPLOYEE SET SALARY = (SALARY - SALARY*0.02) WHERE SALARY>=4000;


UPDATE EMPLOYEE SET SALARY=SALARY-SALARY*0.02  WHERE SALARY>=4000;


ROLLBACK;


COMMIT;


=========================================

5. EMPLOYEE 테이블에서 평균 연봉 이상의 직원을 2% 삭감하면?

=========================================


SELECT * FROM EMPLOYEE WHERE SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE);


UPDATE EMPLOYEE SET SALARY = (SALARY - SALARY*0.02) WHERE SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE);


UPDATE EMPLOYEE SET SALARY=SALARY-SALARY*0.02  WHERE SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE);


ROLLBACK;


COMMIT;


=========================================

6. 담당 고객이 있는 직원의 급여를 10% 인상하면?

=========================================


UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE EMP_NO=ANY(SELECT EMP_NO FROM CUSTOMER WHERE EMP_NO IS NOT NULL ) ;


UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE EMP_NO=ANY(SELECT DISTINCT(EMP_NO) FROM CUSTOMER WHERE EMP_NO IS NOT NULL ) ;


UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE EMP_NO IN (SELECT DISTINCT(EMP_NO) FROM CUSTOMER WHERE EMP_NO IS NOT NULL ) ;


ROLLBACK;


COMMIT;


=========================================

7. 평균 연봉 보다 적은 연봉자의 연봉을 50만원 인상하면?

=========================================


UPDATE EMPLOYEE SET SALARY = SALARY + 50 WHERE SALARY<(SELECT AVG(SALARY) FROM EMPLOYEE);


UPDATE EMPLOYEE SET SALARY=SALARY+50 WHERE SALARY<(SELECT AVG(SALARY) FROM EMPLOYEE);


ROLLBACK;


COMMIT;


=========================================

8. 연봉 서열 5위까지의 연봉을 10% 인하하면?

=========================================


UPDATE EMPLOYEE SET SALARY = SALARY * 0.9 WHERE EMP_NO IN (SELECT EMP_NO FROM (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC) WHERE ROWNUM<=5);


UPDATE EMPLOYEE SET SALARY=SALARY*0.90 WHERE EMP_NO = ANY(SELECT EMP_NO FROM (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC) WHERE ROWNUM<=5);


ROLLBACK;


COMMIT;


=========================================

9. 평균 연봉 보다 적은 연봉자의 연봉을 1% 인상하면?

=========================================


UPDATE EMPLOYEE SET SALARY=SALARY*1.01 WHERE SALARY<(SELECT AVG(SALARY) FROM EMPLOYEE);


ROLLBACK;


COMMIT;


=========================================

10. EMPLOYEE 테이블과 데이터를 그대로 복사하여 EMPLOYEE2 테이블을 만들면 ?

=========================================


CREATE TABLE EMPLOYEE2 AS SELECT * FROM EMPLOYEE;


SELECT * FROM EMPLOYEE2;


ROLLBACK;


COMMIT;


CREATE TABLE EMPLOYEE3 AS SELECT * FROM EMPLOYEE WHERE 1=2;          --이거는 테이블 구조만 복사한다.--


SELECT * FROM EMPLOYEE3;


INSERT INTO EMPLOYEE3 SELECT * FROM EMPLOYEE;           --이거는 데이터를 주입한다.--


ROLLBACK;


COMMIT;


=========================================

11. EMPLOYEE 테이블에서 평균급여 이상인 직원의 EMP_NAME,JIKUP,SALARY 컬럼만 추출하여 EMPLOYEE4 테이블을 만들면?

=========================================


CREATE TABLE EMPLOYEE4 AS SELECT EMP_NAME,JIKUP,SALARY FROM EMPLOYEE WHERE SALARY>=(SELECT AVG(SALARY) FROM EMPLOYEE);


SELECT * FROM EMPLOYEE4;


ROLLBACK;


COMMIT;


=========================================

12. 직원번호 직원명 부서번호 담당고객번호 담당고객명 이 저장되는 테이블 EMPLOYEE5 테이블을 만들면 데이터 카피는 하지 말것?

=========================================


CREATE TABLE EMPLOYEE5 AS SELECT E.EMP_NO, E.EMP_NAME, E.DEP_NO, C.CUS_NO, C.CUS_NAME

FROM EMPLOYEE E, CUSTOMER C

WHERE 1=2;


--테이블 컬럼만 복사하기 때문에 조인은 필요없음.--


SELECT * FROM EMPLOYEE5;


ROLLBACK;


COMMIT;


=========================================

13. INSERT 구문을 사용하여 위 EMPLOYEE5 테이블에 직원번호 직원명 부서번호 담당고객번호 담당고객명 를 저장하면?

=========================================


INSERT INTO EMPLOYEE5 (EMP_NO,EMP_NAME,DEP_NO,CUS_NO,CUS_NAME)


SELECT

E.EMP_NO

,E.EMP_NAME

,E.DEP_NO

,C.CUS_NO

,C.CUS_NAME


FROM EMPLOYEE E, CUSTOMER C


WHERE E.EMP_NO=C.EMP_NO


SELECT * FROM EMPLOYEE5;


ROLLBACK;


COMMIT;


INSERT INTO EMPLOYEE5(EMP_NO,EMP_NAME,DEP_NO,CUS_NO,CUS_NAME)

SELECT E.EMP_NO, E.EMP_NAME, E.DEP_NO, C.CUS_NO, C.CUS_NAME

FROM EMPLOYEE E, CUSTOMER C

WHERE E.EMP_NO=C.EMP_NO;


SELECT * FROM EMPLOYEE5;


ROLLBACK;


COMMIT;












Comments