연습문제
11 오늘이 몇일인지 출력하시오
SELECT TO_CHAR(SYSDATE,‘DD’) FROM DUAL
12 오늘이 무슨요일인지 출력하시오
SELECT TO_CHAR(SYSDATE,‘DAY’) FROM DUAL
13 위의 11번과 12을 합쳐서 출력하시오 결과 예제 -> 03목요일
SELECT TO_CHAR(SYSDATE,‘DD’) || TO_CHAR(SYSDATE,‘DAY’) FROM DUAL
14 요일마다 LOGIN 암호를 자동으로 바꿔주는 프로그램을 만든다고 가정하자 월요일엔 해당일자에 01을 붙여서 4자리를 만들고 화요일엔 11, 수요일엔 21, 목요일엔 31, 금요일엔 41, 토요일엔 51, 일요일엔 61, 붙여서 만들고자한다
SELECT TO_CHAR(SYSDATE,'DD') || DECODE(TO_CHAR(SYSDATE,'DAY'), 'MONDAY', 11, 'TUESDAY', 12,
'WEDNESDAY', 13, 'THURSDAY', 14, 'FRIDAY', 15, 'SATURDAY', 16, 'SUNDAY', 17)
FROM DUAL
15 LECTURE 테이블에서 LEC_TIME과 LEC_POINT를 비교해보자 비교한 결과를 이용해 LEC_TIME이 크면 ’실험과목‘ LEC_POINT가 크면 ’기타과목‘, 둘이 같으면 ’일반과목’으로 값을 돌려받고자 한다.
SELECT DECODE(SIGN(LEC_TIME-LEC_POINT), 0, ‘일반과목’, 1, ‘실험과목’, -1, ‘기타과목’) FROM LECTURE
16 강의 시간과 학점이 같거나 강의시간이 학점보다 작으면 ‘일반과목’을 돌려받고 강의시간이 학점보다 큰경우만‘실험과목’을 돌려받고자 한다 두가지 방법 SIGN, LEAST를 사용하자
SELECT LEC_ID, DECODE(LEAST(LEC_TIME,LEC_POINT), LEC_TIME, '일반과목', '실험과목') FROM LECTURE
SELECT LEC_ID, DECODE(SIGN(LEC_TIME-LEC_POINT), 0, '일반과목', -1, '일반과목', 1, '실험과목') FROM LECTURE
17 LECTURE 테이블의 자료중 LEC_TIME과 LEC_POINT가 같다라는 조건을 만족하고 LEC_TIME=3 인 자료는 옆에 ‘중요과목’이라는 비고를 붙이고자한다
SELECT LEC_ID, DECODE(LEC_TIME, LEC_POINT, DECODE(LEC_TIME,3, '중요과목')) FROM LECTURE
18. TEMP의 행을 3개씩 묶어 하나의 번호를 부여하고, 해당 ROWNUM을 3으로 나눈 나머지가 1이면 사번 아니면 NULL, 또 한 번은 1이면 성명 아니면 NULL 이렇게 순차적으로 사번, 성명을 출력하고 이어서 나머지가 2, 0인 경우도 같은 조건으로 출력하여라
SELECT CEIL(ROWNUM/3) C0
,DECODE(MOD(ROWNUM,3), 1, EMP_ID, NULL) C1
,DECODE(MOD(ROWNUM,3), 1, EMP_ID, NULL) C2
,DECODE(MOD(ROWNUM,3), 2, EMP_ID, NULL) C3
,DECODE(MOD(ROWNUM,3), 2, EMP_ID, NULL) C4
,DECODE(MOD(ROWNUM,3), 0, EMP_ID, NULL) C5
,DECODE(MOD(ROWNUM,3), 0, EMP_ID, NULL) C6
FROM TEMP
19 위 예문의 결과를 이용하여 한 행에 사번 성명을 3명씩 보여주는 SQL을 작성하자 (열을 행으로 바꾸는 문제)
SELECT CEIL(ROWNUM/3) C0
, MAX(DECODE(MOD(ROWNUM,3), 1, EMP_ID, NULL)) C1
, MAX(DECODE(MOD(ROWNUM,3), 1, EMP_NAME, NULL)) C2
, MAX(DECODE(MOD(ROWNUM,3), 2, EMP_ID, NULL)) C3
, MAX(DECODE(MOD(ROWNUM,3), 2, EMP_NAME, NULL)) C4
, MAX(DECODE(MOD(ROWNUM,3), 0, EMP_ID, NULL)) C5
, MAX(DECODE(MOD(ROWNUM,3), 0, EMP_NAME, NULL)) C6
FROM TEMP
GROUP BY CEIL(ROWNUM/3)
20 사원 테이블에서 사원을 골라 해당 사원의 연봉이 동일한 직급을 가진 사원의 평균 연봉보다 많은 사원을 출력하라
SELECT A.SALARY, A.EMP_ID, A.EMP_NAME ,B.AVG_SAL
FROM TEMP A ,(SELECT LEV, AVG(SALARY) AVG_SAL
FROM TEMP
GROUP BY LEV ) B
WHERE A.LEV = B.LEV
AND A.SALARY > B.AVG_SAL
'IT_Web > Oracle' 카테고리의 다른 글
Oracle 채번 5, 10사이에 있는 행의 사번 조회, 계층구조 전개 출력, LPAD 출력 (0) | 2020.03.08 |
---|---|
Oracle WINDOW 함수 일자별(아이템별) 판매누적, 3일 평균액, 전 사원번호 출력하기 (0) | 2020.03.08 |
Oracle ROWNUM, 집계함수, DECODE, OUTER JOIN 연습문제 (0) | 2020.02.27 |
Oracle DECODE 활용법 (3) | 2020.02.27 |
Oracle WINDOW 함수 활용법 (0) | 2020.02.27 |