데이터베이스
데이터베이스#4
DGeon
2023. 2. 7. 23:00
-- 시스템의 현재 날짜를 출력하여라
select sysdate from dual;
-- 입사한지 120개월 미만인 교수의 교수번호, 입사일, 입사일로 부터 현재일까지의 개월 수, 입사일에서 6개월 후의 날짜를 출력하여라
select profno
, hiredate
, trunc(months_between(Sysdate, hiredate)) as months
, add_months(hiredate, 6)
from professor
where months_between(sysdate, hiredate) <360;
-- 오늘이 속한 달의 마지막 날짜와 다가오는 일요일의 날짜를 출력하여라
select LAST_DAY(sysdate), NEXT_DAY(sysdate, 4) from dual;
--ROUND, TRUNC
select to_char(sysdate + 3/24, 'YY/MM/DD HH24:MI:SS')
, TO_CHAR(ROUND(SYSDATE +3 /24), 'YY/MM/DD HH24:MI:SS')--정오를 기준으로 시간에서 날짜로 반올림한다.
, TO_CHAR(TRUNC(SYSDATE +3 /24), 'YY/MM/DD HH24:MI:SS')--시간자체를 절삭(당일만 출력)
FROM DUAL;
SELECT ROUND(TO_DATE('231224', 'YYMMDD'),'MM') FROM DUAL;--월을 기준으로 반올림
-- 101번 학과 교수들의 입사일을 일, 월, 년을 기준으로 반올림하여 출력하여라
SELECT HIREDATE
, TO_CHAR(HIREDATE, 'YY/MM/DD HH24:MI:SS')
, TO_CHAR(ROUND(HIREDATE, 'DD'), 'YY/MM/DD HH24:MI:SS') AS 일
, TO_CHAR(ROUND(HIREDATE, 'MM'), 'YY/MM/DD HH24:MI:SS') AS 월
, TO_CHAR(ROUND(HIREDATE, 'YY'), 'YY/MM/DD HH24:MI:SS') AS 년
FROM professor
WHERE DEPTNO = '101';
-- 학생 테이블에서 전인하 학생의 학번과 생년월일 중에서 년월만 출력하여라
SELECT NAME, TO_CHAR(birthdate, 'YY/MM') FROM STUDENT WHERE NAME='전인하';
-- 학생 테이블에서 102번 학과 학생의 이름, 학년, 생년월일을 출력하여라
SELECT NAME, GRADE, TO_CHAR(BIRTHDATE, 'DAY MONTH DD, YYYY') FROM STUDENT WHERE DEPTNO=102;
-- 교수 테이블에서 101번 학과 교수의 이름과 입사일을 출력하여라.
SELECT NAME, HIREDATE, DEPTNO, TO_CHAR(HIREDATE, 'MONTH DD, YYYY HH24:MI:SS PM') FROM PROFESSOR WHERE DEPTNO=101;
-- 교수 테이블에서 101번 학과 교수들의 이름, 직급, 입사일을 출력하여라
SELECT NAME, POSITION, TO_CHAR(HIREDATE, 'MONTH "THE" DDTH "OF" YYYY') FROM PROFESSOR WHERE DEPTNO =101;
-- 보직수당을 받는 교수들의 이름, 급여, 보직수당, 그리고 급여와 보직수당을 더한 값에 12를 곱한 결과를 연봉으로 출력하여라.
SELECT NAME, SAL, COMM, TO_CHAR((SAL+COMM)*12, '9,999') FROM PROFESSOR WHERE COMM IS NOT NULL;
-- 주민등록번호에서 생년월일을 추출하여'YY/MM/DD' 형태로 출력하여라.
SELECT IDNUM, TO_CHAR(TO_DATE(SUBSTR(IDNUM,1,6),'YYMMDD'),'YY/MM/DD') FROM STUDENT;
-- 201번 학과 교수의 이름, 직급, 급여, 보직수당, 급여와 보직수당의 합계를 출력하여라. 단, 보직수당이 NULL인 경우에는 보직수당을 0으로 계산한다.
SELECT * FROM PROFESSOR;
SELECT NAME, POSITION, SAL, COMM,
SAL+NVL(COMM,0),
NVL(SAL+COMM, SAL),
NVL2(COMM,SAL+COMM,SAL)
FROM PROFESSOR WHERE DEPTNO=102;
-- 교수 테이블에서 교수의 소속 학과 번호를 학과 이름으로 변환하여 출력하여라. 학과 번호가 101이면'컴퓨터공학과', 102이면 '멀티미디어학과', 201이면 '전자공학과',
-- 나머지 학과 번호는 '기계공학과'(default)로 변환한다
SELECT DECODE(DEPTNO, 101, '컴퓨터공학과', 102,'멀티미디어학과',201,'전자공학과','기계공학과') FROM PROFESSOR;
--학생테이블에서 생년월일 기준으로 탄생월 추출하여 이름, 탄생월, 탄생 계절 조회하시오
SELECT * FROM STUDENT;
SELECT NAME
, TO_CHAR(BIRTHDATE, 'MM') AS "탄생월"
, ADD_MONTHS(BIRTHDATE, -2) AS "ADD_MONTH"
, DECODE(TO_CHAR(ADD_MONTHS(BIRTHDATE, -2),'Q'), 1,'봄', 2, '여름', 3, '가을', 4, '겨울') AS "ADD_MONTH"
, DECODE(TO_CHAR(TO_DATE(SUBSTR(IDNUM,3,2),'MM'),'Q'), 1,'봄', 2, '여름', 3, '가을', 4, '겨울') AS "탄생계절"
, TRUNC(TO_CHAR(BIRTHDATE, 'MM')/3)
, DECODE(TRUNC(TO_CHAR(BIRTHDATE, 'MM')/3),1,'봄', 2, '여름', 3, '가을', '겨울')
FROM STUDENT;
-- 교수 테이블에서 소속 학과에 따라 보너스를 다르게 계산하여 출력하여라. 학과 번호별로 보너스는 다음과 같이 계산한다.
-- 학과 번호가 101이면 보너스는 급여의 10%, 102이면 20%, 201이 면 30%, 나머지 학과는 0%이다.
SELECT PROFNO, NAME, DEPTNO, SAL
, DECODE(DEPTNO, 101, SAL*1.1, 102, SAL*1.2, 201, SAL*1.3, SAL) AS DECODE
, CASE DEPTNO
WHEN 101 THEN SAL*.1
WHEN 102 THEN SAL*.2
WHEN 201 THEN SAL*.3
ELSE 0
END AS CASE문
, CASE
WHEN DEPTNO = 101 THEN SAL*1.1
WHEN DEPTNO = 102 THEN SAL*1.2
WHEN DEPTNO = 201 THEN SAL*1.3
ELSE SAL
END AS CASE문VER2
FROM PROFESSOR;
SELECT * FROM STUDENT;
SELECT NAME, BIRTHDATE
, TO_CHAR(BIRTHDATE, 'MM') AS TOCHAR
, TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM')) AS TONUMBER
, CASE
WHEN TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM'))>=3 AND TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM'))<=5 THEN '봄'
WHEN TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM'))>=6 AND TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM'))<=8 THEN '여름'
WHEN TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM'))>=9 AND TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM'))<=11 THEN '가을'
ELSE '겨울'
END AS A
, CASE TO_NUMBER(TO_CHAR(ADD_MONTHS(BIRTHDATE, -2),'Q'))
WHEN 1 THEN '봄'
WHEN 2 THEN '여름'
WHEN 3 THEN '가을'
ELSE '겨울'
END AS B
, CASE
WHEN TO_CHAR(BIRTHDATE, 'MM') BETWEEN 3 AND 5 THEN '봄'
WHEN TO_CHAR(BIRTHDATE, 'MM') IN(6,7,8)THEN '여름'
WHEN TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM'))>=9 AND TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM'))<=11 THEN '가을'
ELSE '겨울'
END AS C
FROM STUDENT;
SELECT
CASE
WHEN TO_CHAR(BIRTHDATE, 'MM') BETWEEN 3 AND 5 THEN '봄'
WHEN TO_CHAR(BIRTHDATE, 'MM') IN(6,7,8)THEN '여름'
WHEN TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM'))>=9 AND TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM'))<=11 THEN '가을'
ELSE '겨울'
END AS MONTH
FROM(
SELECT STUDENT.*, TO_NUMBER(TO_CHAR(BIRTHDATE, 'MM')) AS MON FROM STUDENT
);