본문 바로가기

Oracle DataBase/SQL

5day

-- 5일차


--(7) 입사일부터 지금까지의 날짜수를 출력하라.


--    부서 번호, 이름, 입사일, 현재일, 근무일수(소수점 이하 절삭),
-- 근무년수(반올림),근무월수(30일 기준,반올림), 근무주수(반올림)를 출력하라.

 

 SELECT DEPTNO, ENAME, HIREDATE, SYSDATE, TRUNC(SYSDATE - HIREDATE) 근무일수,
    ROUND((SYSDATE-HIREDATE)/365) 근무년수,
    ROUND((SYSDATE-HIREDATE)/30) 근무월수,
    ROUND((SYSDATE-HIREDATE)/7) 근무주수 FROM EMP;


--(5) 급여가 $1,500 부터 $3,000 사이의 사람은 급여의 15%를 회비로 지불하기로 하였다.
--    이를 이름, 급여, 회비(-2자리에서 반올림)를 출력하라.

 

SELECT ename, sal, round(sal*0.15, -2) 회비
FROM EMP
where sal >= 1500 and sal <= 3000;


--(18) 각 부서별 같은 업무를 하는 사람의 인원수를 구하여 부서번호, 업무명, 인원수를 출력하라.

 

SELECT deptno, job, count(empno)
FROM EMP
GROUP BY DEPTNO, job
order by deptno;


--(12) 모든 사원의 60일이 지난 후의 'MONDAY'는 몇 년, 몇 월, 몇 일 인가를 구하여
--     이름, 입사일, 'MONDAY'를 출력하라.

 

SELECT ename, hiredate, next_day(hiredate+60, '월') "60일 지난 다음 월요일"
FROM EMP;

 

-- decode, case when then 분기
-- decode(값, 비교값1, 결과값1, 비교값2, 결과값2, 비교값3, 결과값3,...else값)

 

select decode(1, 0, '0이네', 1, '1이네', '아무것도 아니네')
FROM DUAL;
SELECT CASE 1 WHEN 0 THEN '0이네'
               WHEN 1 THEN '1이네'
               else '아무것도 아니네'
        END
FROM DUAL;


SELECT CASE WHEN 1 = 0 THEN '1과 0이 같다'
             WHEN 1 = 1 THEN '1과 1이 같다'
             ELSE '몰라'
        END 결과값
FROM DUAL;


8509161234567 -- 주민번호에서 나이를 출력하세요

 

CREATE TABLE SAWON
(SANO NUMBER PRIMARY KEY
,SNAME NVARCHAR2(100)
,SSN VARCHAR2(13)
,HDATE DATE DEFAULT SYSDATE
,SAL NUMBER(10)
);
INSERT INTO SAWON VALUES(1000, '최반', '8509161234567', '2000-1-1', 1000000);
INSERT INTO SAWON VALUES(2000, '뮬란', '8509212345678', '1995-12-25', 2000000);
INSERT INTO SAWON VALUES(3000, '레슬러도영', '0009123234567', '2010-6-6', 1000000);
commit;
SELECT * FROM SAWON;


-- 나이를 구하세요. (힌트 : ssn의 7번째 자리가 1,2면 1900년대사람,
--                          3,4면 2000년대 사람)

 

SELECT SNAME, EXTRACT(YEAR FROM SYSDATE)
- DECODE(SUBSTR(SSN, 7, 1), 1, SUBSTR(SSN, 1, 2)+1900,
                            2, SUBSTR(SSN, 1, 2)+1900,
                            3, SUBSTR(SSN, 1, 2)+2000,
                            4, substr(ssn, 1, 2)+2000) 나이
FROM SAWON;


-- 근무년수가 5년 미만인 사람은 10%, 5~10년은 15%, 11년 부터는(나머지) 20%
-- 보너스가 지급된다고 할 때 각 사원의 이름과 근무년수, 보너스를 구하시오

-- 계층형 쿼리

 

SELECT EMP.*, LEVEL, SYS_CONNECT_BY_PATH(ENAME, '/'), 
CONNECT_BY_ISLEAF 말단여부, connect_by_root ename "제일 꼭대기"
FROM EMP
START WITH ENAME = 'KING'
connect by prior empno = mgr;

 

'Oracle DataBase > SQL' 카테고리의 다른 글

문제3 조인 & 서브쿼리  (0) 2012.07.11
6day  (0) 2012.07.10
4day  (0) 2012.07.10
문제2 (function)  (0) 2012.07.09
3day  (0) 2012.07.05