본문으로 바로가기

DB-180302

category 프로그래밍/DB 2018. 3. 5. 22:47

 

오라클 수동으로 실행하는 방법

ORACLE 끄기

 서비스 열기 오라클 OracleServiceXE 속성-

 자동으로-> 수동으로 변경

오라클 OracleServiceXE 복사

메모장 net stop "OracleServiceXE"

oracle_stop.bat 다른이름으로저장(바탕화면)

 

ORACLE 켜기

net start "OracleServiceXE" 다른이름으로저장

(우클릭 관리자권한으로 실행

수동으로 관리가능

 

 

 

--

--.급여등급이 2등급인 사원이 //2)가장 많은 부서의 정보를 출력하시오.

--

--(1) 무엇을구하는가? 가장 많은 부서의 정보(번호, 이름,지역)

--(2) 조건 찾기 : 급여 등급이 2등급(SG.GRADE=2)

                  

                               부서번호로 COUNT했을때 RANK 1

                    가장 많은 부서번호로 DEPT테이블에서

                   

--(3) 주 테이블 찾기 :  부서번호가 포함된 테이블 DEPT D

--(4) 보조 테이블 찾기 : 급여, 등급이 포함된 테이블 EMP , SG테이블

--(5) 안쪽부터 쿼리 작성

--(6) 검증.

 

SELECT D.DEPTNO,D.DNAME,D.LOC,L.GRADE,L.RNK

FROM

(SELECT E.DEPTNO,SG.GRADE,COUNT(*),

RANK() OVER(ORDER BY COUNT(*) DESC) AS RNK

FROM EMP E INNER JOIN SALGRADE SG

ON  SG.GRADE =2 AND E.SAL >= SG.LOSAL AND E.SAL <= SG.HISAL

GROUP BY E.DEPTNO, SG.GRADE) L INNER JOIN DEPT D

ON D.DEPTNO = L.DEPTNO AND L.RNK = 1;

    

    

 

          

 

2.업무가 CLERK인 사원들의 2.상급자의 급여 순위를 포함한 정보를 출력하시오.

SELECT ENAME, JOB,EMPNO,SAL,

RANK() OVER(ORDER BY SAL DESC) AS RNK

FROM EMP

WHERE EMPNO IN (SELECT MGR

                FROM EMP

                WHERE JOB = 'CLERK');

 

 

 

 

3. 가장 많이 입사한 연도에 입사한 사원들의 평균 급여를 구하고평균급여보다 많이 받는 사람의 급여를 50%삭감하여 전체 사원의 정보를 출력하시오.

 

 

 

 

SELECT  B.SAL, B.EMPNO,B.JOB,B.MGR,B.DEPTNO,B.HIREDATE,

                CASE

                WHEN B.SAL > (SELECT AVG(SAL) FROM EMP)

                THEN B.SAL *0.5

                ELSE B.SAL

        END AS RSAL

FROM

 

 

(SELECT *

FROM

(SELECT TO_CHAR(HIREDATE,'YY') AS YEAR, COUNT(TO_CHAR(HIREDATE,'YY')) AS CNT,

RANK() OVER(ORDER BY COUNT(TO_CHAR(HIREDATE,'YY')) DESC) AS RANK

FROM EMP

GROUP BY TO_CHAR(HIREDATE,'YY'))

WHERE RANK =1) A INNER JOIN EMP B ON 1=1;

 

;

 

 

 

--

--4. 1)이름에 'L'이 들어가는 사원이 2) 가장 많은 업무를 구하고 3)그 업무가 가장 많은 부서의 정보를 출력하시오.

 

1) 무엇을 구하는가? L이 들어가는 사원이 가장 많은 업무를 구한다, 그 업무가 가장 많은 부서를 구한다.

2) 조건찾기 ENAME LIKE  ='%L%' 업무별로 가장많이 카운트 된 JOB의 부서 번호를 구한다.

            그 부서번호를 가지고 부서의 정보(DEPTNO, DNAME,LOC)를 출력

             

3) 주테이블 찾기 DEPT D

4) 보조테이블 찾기 EMP E

5) 안쪽부터 쿼리 작성

6) 검증

 

SELECT D.DEPTNO, D.DNAME, D.LOC, B.RANK

FROM

(SELECT DEPTNO ,COUNT(A.JOB), RANK() OVER(ORDER BY COUNT(A.JOB) DESC) AS RANK

FROM

(SELECT JOB

    FROM

        (SELECT JOB,COUNT(*), RANK() OVER(ORDER BY COUNT(*) DESC) AS RNK

                        FROM EMP

                        WHERE  ENAME LIKE '%L%'

                        GROUP BY JOB)

    WHERE RNK = 1) A INNER JOIN EMP E ON A.JOB = E.JOB                 

    GROUP BY DEPTNO) B INNER JOIN DEPT D ON B.DEPTNO = D.DEPTNO

   

                        ;

   

   

  1)  SELECT JOB,COUNT(*), RANK() OVER(ORDER BY COUNT(*) DESC) AS RNK

--                        FROM EMP

--                        WHERE  ENAME LIKE '%L%'

--                        GROUP BY JOB  --- 가장 많은 업무를 구한다(RANK 1)

--                                          WHERE절에서 RANK =1

    2) 가장 많은 업무 : 부서별로 JOB이 많은 부서(RANK 1)

                               또 서브쿼리를 만들되  EMP 테이블을 또 만들어

                               INNER JOIN합니다.

                               그룹별로 GROUP BY DEPTNO를 구하고 COUNT해서

                               JOB의 갯수를 구하여 JOB을 뽑는다.

--  3) 그 부서가 가장 많은 부서 정보 : 여태까지 구한 테이블을 하나의 테이블을 묶어서

                                   부서와 INNER JOIN한다.

--

   

   

 

 

                     A  TABLE                                                B TABLE                           A TABLE 평균값을 사용

--5. 1)부서별 급여 평균을 구하고 2)각각 부서의 사원들의 급여가 3)각각 부서별 급여평균보다 높으면 급여를 20%삭감하여

--사원명, 사원급여,부서명,부서평균급여를 출력하시오.

                                

1) 무엇을 구하는가? 사원명, 사원급여,부서명,부서평균급여를 출력하시오.

               

2) 조건이 무엇인가? 부서별 급여 평균 GROUP BY 부서, AVG(SAL)

                     각각 부서별 급여가  평균보다 높을 때           

                    CASE WHEN  SAL  > AVG(SAL)THEN SAL *0.8 END

3) 주테이블 찾기  부서별 급여 평균이 포함된 테이블 EMP E1 AS AG ---A TABLE

4) 보조테이블 찾기  사원, 급여, 부서명, 부서급여평균급여가 포함된 테이블 EMP  --B TABLE

5) 안쪽부터 쿼리 실행

 

 

 

SELECT B.ENAME,B.SAL,A.DEPTNO,ROUND(A.AG),

                CASE

                    WHEN B.SAL > A.AG

                    THEN B.SAL * 0.8

                    ELSE B.SAL

                END AS RSAL

FROM

EMP B   INNER JOIN 

   

                    (SELECT DEPTNO,AVG(SAL) AS AG

                    FROM EMP

                    GROUP BY DEPTNO)A ON B.DEPTNO =A.DEPTNO

;

 

 

 

 

 

'프로그래밍 > DB' 카테고리의 다른 글

DB-180306  (496) 2018.03.10
DB-180305  (474) 2018.03.05
DB-180228  (491) 2018.03.02
DB-180227  (479) 2018.03.02
180226 DB-4  (487) 2018.02.27