오라클 수동으로 실행하는 방법
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
;