Oracle ROWNUM, 집계함수, DECODE, OUTER JOIN 연습문제
1. TEMP와 TCOM에 존재하는 사번의 교집합을 구한후, TEMP에서 TCOM에 존재하는 사번을 제외시킨 차집합을 구하고, 두결과의 합집합을 구해보자
(SELECT EMP_ID FROM TEMP INTERSECT SELECT EMP_ID FROM TCOM) UNION
(SELECT EMP_ID FROM TEMP MINUS SELECT EMP_ID FROM TCOM);
2. TEMP 테이블과 TCOM의 행의 개수를 카테시안 조인으로 구하여라
SELECT COUNT(*) FROM TEMP, TCOM
3. TEMP에서 사번, 성명, 부서코드, 부서명을 출력하시오
SELECT A.EMP_ID, A.EMP_NAME, A.DEPT_CODE, B.DEPT_NAME
FROM TEMP A, TDEPT B
WHERE B.DEPT_CODE = A.DEPT_CODE;
4. TEMP에 존재하는 직원들 중 과장직급을 가질만한 나이에 포함되는 사람이 누구인지 출력하시오
( EMP_LEVE, TEMP )
SELECT B.EMP_ID,B.BIRTH_DATE FROM EMP_LEVEL A, TEMP B
WHERE B.BIRTH_DATE BETWEEN ADD_MONTHS(SYSDATE,-1* TO_AGE*12)
AND ADD_MONTHS(SYSDATE,-1* FROM_AGE*12)
AND B.LEV='대리';
5. TEMP와 EMP_LEVE를 이용해 과장 직급의 연봉 상한/하한 범위내에 있는 직원 사번 성명 직급 SALARY를 출력
SELECT A.EMP_ID, A.EMP_NAME, A.LEV, A.SALARY
FROM TEMP A, EMP_LEVEL B
WHERE A.SALARY BETWEEN FROM_SAL AND TO_SAL
AND B.LEV='과장';
6. 사번, 이름 SALARY, 연봉 상한 금액을 보고자 한다. TEMP와 EMP_LEVEL을 조인하여 결과를 보여주되 연봉의 상하한이 등록되어있지않은 수습사원은 사번, 이름 SALARY까지만 출력하는 QUERY를 구성해보자
SELECT A.EMP_ID, A.EMP_NAME, A.SALARY, B.TO_SAL
FROM TEMP A, EMP_LEVEL B
WHERE B.LEV(+)=A.LEV;
7. TEMP의 자료를 이용해 NON-EQUI JOIN이면서 SELF JOIN이고 QUTER조인인 QUREY를 하나 만들어 보자
사번, 성명, 생일, 자신보다 생일이 빠른 사람의 수를 읽어와 자신보다 생일이 빠른 사람의 수로 정렬하여 출력
SELECT A.EMP_ID, A.EMP_NAME,A.BIRTH_DATE, COUNT(B.BIRTH_DATE)
FROM TEMP A, TEMP B
WHERE B.BIRTH_DATE(+)<A.BIRTH_DATE
GROUP BY A.EMP_ID, A.EMP_NAME, A.BIRTH_DATE
ORDER BY COUNT(B.BIRTH_DATE)
8. TEMP에 속한 수습사원만 순번을 붙여 출력하시오. 단 5번까지만 출력하시오
SELECT ROWNUM, EMP_ID, EMP_NAME
FROM TEMP
WHERE EMP_ID > 0 AND LEV=’수습‘ AND ROWNUM <= 5
9. TEMP 테이블의 자료를 이용하여 SELECT 결과를 3개행씩 묶어 하나의 번호를 부여하는 SQL을 만들어보자
SELECT ROWNUM, CEIL(ROWNUM/3), EMP_ID, EMP_NAME FROM TEMP WHERE EMP_ID>0
10. 강의 ID와 주당 강의 시간과 학점이 같으면 일반으로 표시하고 아니면 특별로 출력하시오
SELECT LEC_ID, DECODE(LEC_TIME, LEC_POINT,’일반‘,’특별’) FROM LECTURE