블로그 이미지
가야금마스터

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

Tag

'DB/오라클 SQL 문제풀이'에 해당되는 글 2

  1. 2015.03.13 오라클 DB 간단한 문제 풀어보기 (2)
  2. 2015.03.13 오라클 DB 간단한 문제 풀어보기 (1)
2015. 3. 13. 16:28 DB/오라클 SQL 문제풀이

-- 1. EMP 테이블에서 부서 인원이 4명보다 많은 부서의 부서번호, 인원수, 급여의 합을 출력하라.

SELECT

DEPTNO 부서번호,

COUNT(*) 인원수,

SUM(SAL)

FROM EMP

GROUP BY DEPTNO

HAVING COUNT(*) > 4;



-- 2. EMP 테이블에서 가장 많은 사원이 속해있는 부서번호와 사원수를 출력하라.

SELECT

DEPTNO 부서번호,

COUNT(*)

FROM EMP

GROUP BY DEPTNO

HAVING COUNT(*) =

(SELECT MAX(COUNT(*)) FROM EMP GROUP BY DEPTNO);



-- 3. EMP 테이블에서 가장 많은 사원을 갖는 MGR의 사원번호를 출력하라.

SELECT

MGR 사원번호

FROM EMP

GROUP BY MGR

HAVING COUNT(MGR) =

(SELECT MAX(COUNT(*)) FROM EMP GROUP BY  MGR);



-- 4. EMP 테이블에서 부서번호가 10인 사원수와 부서번호가 30인 사원수를 각각 출력하라.

SELECT

COUNT(DECODE(DEPTNO, 10, 0)) "10인 사원수",

COUNT(DECODE(DEPTNO, 30, 0)) "30인 사원수"

FROM EMP;



-- 5. EMP 테이블에서 사원번호가 7521인 사원의 직업과 같고 사원번호가 7934인 사원의 급여(SAL)보다 많은 사원의 사원번호, 이름, 직업, 급여를 출력하라.

SELECT

EMPNO 사원번호,

ENAME 이름,

JOB 직업,

SAL 급여

FROM EMP

WHERE

JOB = (SELECT JOB FROM EMP WHERE EMPNO = 7521)

AND 

SAL > (SELECT SAL FROM EMP WHERE EMPNO = 7934);



-- 6. 직업(JOB)별로 최소 급여를 받는 사원의 정보를 사원번호, 이름, 업무, 부서명을 출력하라.

-- 조건1 : 직업별로 내림차순 정렬

SELECT

A.EMPNO 사원번호,

A.ENAME 이름,

A.JOB 업무,

B.DNAME

FROM EMP A, DEPT B

WHERE

A.DEPTNO = B.DEPTNO

AND

SAL IN 

(SELECT MIN(SAL) FROM EMP GROUP BY JOB)

ORDER BY JOB DESC;



-- 7. 각 사원 별 시급을 계산하여 부서번호, 사원이름, 시급을 출력하라.

-- 조건1. 한달 근무일수는 20일, 하루 근무시간은 8시간이다.

-- 조건2. 시급은 소수 두 번째 자리에서 반올림한다.

-- 조건3. 부서별로 오름차순 정렬

-- 조건4. 시급이 많은 순으로 출력

SELECT

DEPTNO 부서번호,

ENAME 사원이름,

ROUND(((SAL / 20) / 8), 1) 시급

FROM EMP

ORDER BY DEPTNO, 시급 DESC;



-- 8. 각 사원 별 커미션이 0 또는 NULL이고 부서위치가 ‘GO’로 끝나는 사원의 정보를 사원번호, 사원이름, 커미션, 부서번호, 부서명, 부서위치를 출력하라.

-- 조건1. 보너스가 NULL이면 0으로 출력

SELECT

A.EMPNO 사원번호,

A.ENAME 사원이름,

NVL(A.COMM, 0) 커미션,

A.DEPTNO 부서번호,

B.DNAME 부서명,

B.LOC 부서위치

FROM

EMP A ,DEPT B

WHERE

A.DEPTNO = B.DEPTNO

AND

(A.COMM = 0 OR A.COMM IS NULL)

AND

B.LOC LIKE '%GO';



-- 9. 각 부서 별 평균 급여가 2000 이상이면 초과, 그렇지 않으면 미만을 출력하라.

SELECT 

DEPTNO 부서번호,

CASE

WHEN

AVG(SAL) > 2000 

THEN '초과' 

ELSE '미만' 

END

AS "2000 미만 초과"

FROM

EMP

GROUP BY DEPTNO;


-- 10. 각 부서 별 입사일이 가장 오래된 사원을 한 명씩 선별해 사원번호, 사원명, 부서번호, 입사일을 출력하라.

SELECT

EMPNO 사원번호,

ENAME 사원명,

DEPTNO 부서번호,

HIREDATE 입사일

FROM

EMP

WHERE

HIREDATE IN

(SELECT MIN(HIREDATE) FROM EMP GROUP BY DEPTNO);



-- 11. 1980년~1980년 사이에 입사된 각 부서별 사원수를 부서번호, 부서명, 입사1980, 입사1981, 입사1982로 출력하라.

SELECT

A.DEPTNO 부서번호, 

B.DNAME 부서명,

COUNT(DECODE(TO_CHAR(A.HIREDATE, 'YYYY'),'1980',0)) 입사1980,

COUNT(DECODE(TO_CHAR(A.HIREDATE, 'YYYY'),'1981',0)) 입사1981,

COUNT(DECODE(TO_CHAR(A.HIREDATE, 'YYYY'),'1982',0)) 입사1982

FROM EMP A, DEPT B

WHERE

A.DEPTNO = B.DEPTNO

GROUP BY A.DEPTNO, B.DNAME;



-- 12. 1981년 5월 31일 이후 입사자 중 커미션이 NULL이거나 0인 사원의 커미션은 500으로 그렇지 않으면 기존 커미션을 출력하라.

SELECT

ENAME 입사자,

DECODE(COMM, NULL, 500, 0, 500, COMM) 커미션

FROM EMP

WHERE 

HIREDATE > TO_DATE(19810531)

ORDER BY ENAME;



-- 13. 1981년 6월 1일 ~ 1981년 12월 31일 입사자 중 부서명이 SALES인 사원의 부서번호, 사원명, 직업, 입사일을 출력하라.

-- 조건1. 입사일 오름차순 정렬

SELECT

A.DEPTNO 부서번호,

A.ENAME 사원명,

A.JOB 직업,

A.HIREDATE 입사일

FROM EMP A, DEPT B

WHERE

A.DEPTNO = B.DEPTNO

AND

A.HIREDATE >= TO_DATE(19810601)

AND 

A.HIREDATE <= TO_DATE(19811231)

AND

B.DNAME = 'SALES'

ORDER BY HIREDATE;



-- 14. 현재 시간과 현재 시간으로부터 한 시간 후의 시간을 출력하라.

-- 조건1. 현재시간 포맷은 ‘4자리년-2자일월-2자리일 24시:2자리분:2자리초’로 출력

-- 조건1. 한시간후 포맷은 ‘4자리년-2자일월-2자리일 24시:2자리분:2자리초’로 출력

SELECT

TO_CHAR(SYSDATE, 'YYYY-MM--DD HH24:MI:SS') 현재시간,

TO_CHAR(SYSDATE + 1/24, 'YYYY-MM--DD HH24:MI:SS') "1시간후"

FROM DUAL;



-- 15. 각 부서별 사원수를 출력하라.

-- 조건1. 부서별 사원수가 없더라도 부서번호, 부서명은 출력

-- 조건2. 부서별 사원수가 0인 경우 ‘없음’ 출력

-- 조건3. 부서번호 오름차순 정렬

SELECT

B.DEPTNO 부서번호,

B.DNAME 부서명,

DECODE(COUNT(A.EMPNO), 0, '없음', COUNT(A.EMPNO)) 사원수

FROM EMP A, DEPT B

WHERE

A.DEPTNO(+) = B.DEPTNO

GROUP BY B.DEPTNO, B.DNAME

ORDER BY B.DEPTNO;



-- 16. 사원 테이블에서 각 사원의 사원번호, 사원명, 매니저번호, 매니저명을 출력하라.

-- 조건1. 각 사원의 급여(SAL)는 매니저 급여보다 많거나 같다.

SELECT

A.EMPNO 사원번호,

A.ENAME 사원명,

A.MGR 매니저번호,

B.ENAME 매니저명

FROM EMP A, EMP B

WHERE

A.MGR = B.EMPNO

AND 

A.SAL >= B.SAL;



-- 17. 사원명의 첫 글자가 ‘A’이고, 처음과 끝 사이에 ‘LL’이 들어가는 사원의 커미션이 COMM2일때, 모든 사원의 커미션에 COMM2를 더한 결과를 사원명, COMM, COMM2, COMM+COMM2로 출력하라.

SELECT

ENAME 사원명,

COMM,

(SELECT COMM FROM EMP WHERE ENAME LIKE 'A%LL%') COMM2,

DECODE(COMM, NULL, 0, COMM) + 

(SELECT COMM FROM EMP WHERE ENAME LIKE 'A%LL%') "COMM+COMM2"

FROM EMP;



-- 18. 각 부서별로 1981년 5월 31일 이후 입사자의 부서번호, 부서명, 사원번호, 사원명, 입사일을 출력하시오.

-- 조건1. 부서별 사원정보가 없더라도 부서번호, 부서명은 출력

-- 조건2. 부서번호 오름차순 정렬

-- 조건3. 입사일 오름차순 정렬

SELECT

A.DEPTNO 부서번호,

B.DNAME 부서명,

A.EMPNO 사원번호,

A.ENAME 사원명,

A.HIREDATE 입사일

FROM EMP A RIGHT OUTER JOIN DEPT B

ON

A.DEPTNO = B.DEPTNO

AND

TO_CHAR(A.HIREDATE, 'YYYYMMDD') > 19810531

ORDER BY A.DEPTNO, A.HIREDATE;



-- 19. 입사일로부터 지금까지 근무년수가 30년 이상 미만인 사원의 사원번호, 사원명, 입사일, 근무년수를 출력하라.

-- 조건1. 근무년수는 월을 기준으로 버림 (예:30.4년 = 30년, 30.7년=30년)

SELECT

EMPNO 사원번호,

ENAME 사원명,

HIREDATE 입사일,

TRUNC((SYSDATE - HIREDATE)/365) 근무년수

FROM EMP

WHERE

TRUNC((SYSDATE - HIREDATE)/365) < 30;



'DB > 오라클 SQL 문제풀이' 카테고리의 다른 글

오라클 DB 간단한 문제 풀어보기 (1)  (0) 2015.03.13
posted by 가야금마스터
2015. 3. 13. 14:26 DB/오라클 SQL 문제풀이

scott 계정의 더미 테이블을 이용합니다.

sqlplus 에 접속해서

alter user scott identified by tiger account unlock;

계정 활성화 함



-- 1번 부서번호가 10번인 부서의 사람 중 사원번호, 이름, 월급을 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

SAL AS 월급

FROM EMP

WHERE DEPTNO = 10;



-- 2번 사원번호가 7369인 사람 중 이름, 입사일, 부서번호를 출력하라.

SELECT 

ENAME AS 이름,

HIREDATE AS 입사일,

DEPTNO AS 부서번호

FROM EMP

WHERE EMPNO = 7369;



-- 3번 이름이 ALLEN인 사람의 모든 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE ENAME = 'ALLEN';



-- 4번 입사일이 83/01/12인 사원의 이름, 부서번호, 월급을 출력하라.

SELECT 

ENAME AS 이름,

DEPTNO AS 부서번호,

SAL AS 급여

FROM EMP

WHERE HIREDATE = '80/12/17';


--ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD';

--SELECT 

--ENAME AS 이름,

--DEPTNO AS 부서번호,

--SAL AS 급여

--FROM EMP

--WHERE HIREDATE = '1983/01/12';


-- 5번 직업이 MANAGER가 아닌 사람의 모든 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE JOB <> 'MANAGER';



-- 6번 입사일이 81/04/02 이후에 입사한 사원의 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE HIREDATE > '81/04/02';



-- 7번 급여가 $800 이상인 사람의 이름, 급여, 부서번호를 출력하라.

SELECT 

ENAME AS 이름,

SAL AS 급여,

DEPTNO AS 부서번호

FROM EMP

WHERE SAL >= 800;



-- 8번 부서번호가 20번 이상인 사원의 모든 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE DEPTNO = 20;



-- 9번 이름이 K로 시작하는 사람보다 높은 이름을 가진 사람의 모든 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE ENAME > CHR(ASCII('K')+1);

--WHERE UPPER(ENAME) > CHR(ASCII('K')+1);


-- 10번 입사일이 81/12/09 보다 먼저 입사한 사람들의 모든 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE HIREDATE < '81/12/09';



-- 11번 입사번호가 7698보다 작거나 같은 사람들의 입사번호와 이름을 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE EMPNO <= 7698;


-- 12번 입사일이 81/04/02보다 늦고 82/12/09보다 빠른 사원의 이름, 월급, 부서번호를 출력하라.

SELECT 

ENAME AS 이름,

SAL AS 급여,

DEPTNO AS 부서번호

FROM EMP

WHERE HIREDATE > '81/04/02' AND HIREDATE < '82/12/09';



-- 13번 급여가 $1,600보다 크고 $3,000보다 작은 사람의 이름, 직업, 급여를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE SAL >1600 AND SAL < 3000;



-- 14번 사원번호가 7654와 7782 사이 이외의 사원의 모든 정보를 출력하라.


SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE EMPNO > 7654 AND EMPNO < 7782;



-- 15번 이름이 B와 J사이의 모든 사원의 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE ENAME > CHR(ASCII('B')+1) AND ENAME < 'J';


-- 16번 입사일이 81년 이외의 입사한 사람의 모든 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE SUBSTR(HIREDATE, 1, 2) <> '81';



-- 17번 직업이 MANAGER와 SALESMAN인 사람의 모든 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE JOB = 'MANAGER' OR JOB = 'SALESMAN';



-- 18번 부서번호롸 20, 30번을 제외한 모든 사람의 이름, 사원번호, 부서번호를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE DEPTNO <> 20 AND DEPTNO <> 30;



-- 19번 S로 시작하는 사원의 사원번호, 이름, 입사일, 부서번호를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

HIREDATE AS 입사일,

DEPTNO AS 부서번호

FROM EMP

WHERE UPPER(ENAME) LIKE 'S%';



-- 20번 입사일이 81년도인 사람의 모든 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

HIREDATE AS 입사일,

DEPTNO AS 부서번호

FROM EMP

WHERE SUBSTR(HIREDATE, 1, 2) = '81';



-- 21번 이름 중 S자가 들어가 있는 사람만 모든 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

HIREDATE AS 입사일,

DEPTNO AS 부서번호

FROM EMP

--WHERE UPPER(ENAME) LIKE '%S%';

WHERE ENAME LIKE '%S%';



-- 22번 이름이 S로 시작하고 마지막 글자가 T인 사람의 모든 정보를 출력하라(단, 이름은 전체 5자리이다.)

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

HIREDATE AS 입사일,

DEPTNO AS 부서번호

FROM EMP

--WHERE ENAME LIKE 'S___T';

WHERE ENAME LIKE 'S%' AND SUBSTR(ENAME, -1,1) = 'T' ;



-- 23번 첫 번쨰 문자는 관계없고, 두 번쨰 문자가 A인 사람의 정보를 출력하라.



SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

--WHERE SUBSTR(ENAME, 2, 1) = 'A';

WHERE ENAME LIKE '_A%';



-- 24번 커미션이 NULL인 사람의 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE COMM IS NULL;




-- 25번 커미션이 NULL이 아닌 사람의 정보를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE COMM IS NOT NULL;



-- 26번 부서가 30번 부서이고 급여가 $1,500 이상인 사람의 이름, 부서, 월급을 출력하라.

SELECT 

ENAME AS 이름,

SAL AS 급여,

DEPTNO AS 부서번호,

COMM AS 커미션

FROM EMP

WHERE DEPTNO = 30 AND SAL >= 1500;



-- 27번 이름의 첫 글자가 K로 시작하거나 부서번호가 30인 사람의 사원번호, 이름, 부서번호를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

DEPTNO AS 부서번호

FROM EMP

WHERE ENAME LIKE 'K%' OR DEPTNO = 30;




-- 28번 급여가 $1500 이상이고 부서번호가 30번인 사원 중 직업이 MANAGER인 사람의 정보를 추력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE DEPTNO = 30 AND JOB = 'MANAGER';



-- 29번 부서번호가 30인 사람 중 사원번호가 SORT.


SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

WHERE DEPTNO = 30

--ORDER BY DEPTNO ASC;

ORDER BY DEPTNO; --  기본 값이 ASC(오름차순임)



-- 30번 급여가 많은 순으로 SORT하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

ORDER BY SAL DESC;




-- 31번 부서번호로 ASCENDING SORT  한 후 급여가 많은 사람 순으로 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

ORDER BY DEPTNO, SAL DESC;



-- 32번 부서 번호가 DESCENDING SORT하고, 이름 순으로 ASCENDING SORT, 급여순으로 DESCENDING SORT 하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

JOB AS 직무,

MGR AS 매니저,

HIREDATE AS 입사일,

SAL AS 급여,

COMM AS 커미션,

DEPTNO AS 부서번호

FROM EMP

ORDER BY DEPTNO DESC, ENAME, SAL DESC;




-- 33번 EMP TABLE 에서 이름, 급여, 커미션 금액, 총액 (SAL + COMM) 을 구하여 총액이 많은 순서로 출력하라. 

-- 단 커미션이 NULL인 사람은 제외한다.

SELECT 

ENAME AS 이름,

SAL AS 급여,

COMM AS 커미션,

(SAL + COMM) AS 총액

FROM EMP

WHERE COMM IS NOT NULL;




-- 34번 10번 부서의 모든 사람들에게 급여의 13%를 보너스로 지불하기로 하였다. 이름, 급여, 보너스 금액, 부서번호를 출력하라.

SELECT 

ENAME AS 이름,

SAL AS 급여,

(SAL * 0.13) AS "보너스 금액",

DEPTNO AS 부서번호

FROM EMP

WHERE DEPTNO = 10;




-- 35번 30번 부서의 연봉을 계산하여 이름, 부서번호, 급여, 연봉을 출력하라.

-- 단 연말에 급여의 150%를 보너스로 지급한다.

SELECT 

ENAME AS 이름,

DEPTNO AS 부서번호,

SAL AS 급여,

((SAL * 12) + (SAL * 1.5)) AS 연봉

FROM EMP

WHERE DEPTNO = 30;




-- 36번 부서번호가 20인 부서의 시간당 임금을 계산하여 출력하라.

-- 단 1달의 근무일수가 12일이고, 1일 근무시간은 5시간이다.

-- 출력양식은 이름, 급여, 시간당 임금(소수이하 첫 번째 자리에서 반올림)을 출력하라.

SELECT 

ENAME AS 이름,

SAL AS 급여,

ROUND(((SAL/12)/5), 1) AS "시간당 임금"

FROM EMP

WHERE DEPTNO = 20;




-- 37번 급여가 $1,500 부터 $ 3,000 사이의 사람은 급여가 15%를 회비로 지불하기로 하였다.

-- 이름, 급여, 회비(소수점 두 자리에서 반올림) 출력하라.


SELECT 

ENAME AS 이름,

SAL AS 급여,

ROUND((SAL * 0.15),2) AS 회비

FROM EMP

WHERE SAL >= 1500 AND SAL <= 3000;



-- 38번 급여가 $2,000 이상인 모든 사람은 급여가 15%를 경보비로 내기로 하였다.

-- 이름, 급여, 경조비 를 출력하라.

SELECT 

ENAME AS 이름,

SAL AS 급여,

(SAL * 0.15) AS 경조비

FROM EMP

WHERE SAL >= 2000;





-- 39번 입사일 부터 지금까지의 날짜수를 출력하라. 부서번호, 이름, 입사일, 현재일, 

-- 근무일수(소수점 이하 절삭), 근무년수, 근무월수(30일 기준), 근무주수를 출력하라.

SELECT 

DEPTNO AS 부서번호,

ENAME AS 이름,

HIREDATE AS 입사일,

SYSDATE AS 현재일,

--TRUNC(SYSDATE-HIREDATE, 0) AS 근무일수

--TRUNC(SYSDATE-HIREDATE) AS 근무일수

FLOOR(SYSDATE-HIREDATE) AS 근무일수,

--TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE) / 12) AS 근무년도,

FLOOR(MONTHS_BETWEEN(SYSDATE, HIREDATE) / 12) AS 근무년수,

FLOOR(MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS 근무월수,

FLOOR(MONTHS_BETWEEN(SYSDATE, HIREDATE) * 7) AS 근무주수

FROM EMP;




-- 40번 모든 사원의 실수령액을 계산하여 출력하라. 

-- 단 급여가 많은 순으로 이름, 급여, 실수령액을 출력하라

-- (실수령액은 급여에 대해 10%의 세금을 뺸 금액)



SELECT 

ENAME AS 이름,

SAL AS 급여,

(SAL) - (SAL * 0.1) AS 경조비

FROM EMP;



-- 41번 입사일로부터 90일이 지난 후의 사원이름, 입사일, 90일 후의 날, 급여를 출력하라.

SELECT 

ENAME AS 이름,

HIREDATE AS 입사일,

HIREDATE + 90 AS "90일 후",

SAL AS 급여

FROM EMP;



-- 42번 입사일로 부터 6개월이 지난 후의 입사일, 6개월 후의 날짜, 급여를 출력하라.

SELECT 

HIREDATE AS 입사일,

ADD_MONTHS(HIREDATE, 6) AS "6개월 후",

SAL AS 급여

FROM EMP;




-- 43번 입사한 달의 근무일수를 계산하여 부서번호, 이름, 근무일수를 출력하라.

SELECT 

DEPTNO AS 부서번호,

ENAME AS 이름,

LAST_DAY(HIREDATE) - HIREDATE AS "입사한 달 근무 일수"

FROM EMP;



-- 44번 모든 사원의 60일이 지난 후의 MONDAY 는 몇 년 , 몇 월, 몇 일 인가를 구하여

-- 이름, 입사일, MONDAY를 출력하라.

SELECT 

ENAME AS 이름,

HIREDATE AS 입사일,

NEXT_DAY(HIREDATE + 60,'월') AS MONDAY

FROM EMP;



-- 45번 입사일로부터 오늘까지의 일수를 구하여 이름, 입사일, 근무일수를 출력하라.

SELECT 

ENAME AS 이름,

HIREDATE AS 입사일,

TRUNC(SYSDATE-HIREDATE) AS 근무일수

FROM EMP;



-- 46번 입사일을 1996년 5월 14일 의 형태로 이름, 입사일을 출력하라.

SELECT 

ENAME AS 이름,

TO_CHAR(HIREDATE, 'YYYY"년 "MM"월 "DD"일"') AS 입사일

FROM EMP;




-- 47번 이름의 글자수가 6자 이상인 사람의 이름을 앞에서 3자리만 구하여 소문자로 이름만을 출력하라.

SELECT 

ENAME AS 이름,

LOWER(SUBSTR(ENAME,1 ,3)) AS "소문자 변환"

FROM EMP

WHERE LENGTH(ENAME) >= 6;



-- 48번 10번 부서 월급의 평균, 최고, 최저, 인원수를 구하여 출력하라.

SELECT 

--TRUNC(AVG(SAL)) AS 평균,

ROUND(AVG(SAL), 1) AS 평균,

MAX(SAL) AS 최고,

MIN(SAL) AS 최저,

COUNT(*) AS 인원수

FROM EMP

WHERE DEPTNO = 10;



-- 49번 각 부서별 급여의 평균, 최고, 최저, 인원수를 구하여 출력하라.

SELECT 

--TRUNC(AVG(SAL)) AS 평균,

ROUND(AVG(SAL), 1) AS 평균,

MAX(SAL) AS 최고,

MIN(SAL) AS 최저,

COUNT(*) AS 인원수,

DEPTNO AS 부서번호

FROM EMP

GROUP BY DEPTNO;



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

SELECT 

DEPTNO AS 부서번호,

JOB AS 업무명,

COUNT(*) AS 인원수

FROM EMP

GROUP BY DEPTNO, JOB

ORDER BY DEPTNO;



-- 51번 같은 업무를 하는 사람의 수가 4명 이상인 업무와 인원수를 출력하라.

SELECT 

JOB AS 업무,

COUNT(*) AS 인원수

FROM EMP

GROUP BY JOB

HAVING COUNT(*) >= 4;



-- 52번 각 부서별 평균 월급, 전체 원급, 최고 원급, 최저 월급 을 구하여 평균 원급이 많은 순으로 출력하라.

SELECT 

DEPTNO AS 부서번호,

ROUND(AVG(SAL), 1) AS "평균 월급",

MAX(SAL) AS "최고 월급",

MIN(SAL) AS "최저 월급"

FROM EMP

GROUP BY DEPTNO

ORDER BY "평균 월급" DESC;



-- 53번 EMP와 DEPT TABLE 을 JOIN하여 부서번호, 부서명, 이름, 급여를 출력하라.

SELECT 

A.DEPTNO AS 부서번호,

B.DNAME AS 부서명,

A.ENAME AS 이름,

A.SAL AS  급여

FROM EMP A, DEPT B

WHERE A.DEPTNO = B.DEPTNO;



-- 54번 이름이 ALLEN인 사원의 부서명을 출력하라.

SELECT 

B.DNAME AS 부서명

FROM EMP A, DEPT B

WHERE A.DEPTNO = B.DEPTNO

AND A.ENAME = 'ALLEN';




-- 55번 DEPT TABLE 에 있는 모든 부서를 출력하고, EMP  TABLE 에 있는 DATA와 JOIN하여 

-- 모든 사원의 이름, 부서번호, 부서명, 급여를 출력하라.

SELECT 

A.ENAME AS 이름,

A.DEPTNO AS 부서번호,

B.DNAME AS 부서명,

A.SAL AS  급여

FROM EMP A, DEPT B

WHERE A.DEPTNO = B.DEPTNO;



-- 56번 EMP TABLE 에 있는 EMPNO와 MGR을 이용하여 서로의 관계를 다음과 같이 출력하라.

-- SMTH의 매니저는 FORD이다.

SELECT 

B.ENAME||' 의 매니저는 '||A.ENAME||' 이다.'

FROM EMP A, EMP B

WHERE A.EMPNO = B.MGR;



-- 57번 ALLEN의 직무와 같은 사람의 이름, 부서명, 급여, 직무를 출력하라.

SELECT 

A.ENAME AS 이름,

B.DNAME AS 부서명,

A.SAL AS 급여,

A.JOB AS 직무

FROM EMP A,  DEPT B

WHERE A.DEPTNO = B.DEPTNO 

AND 

JOB = (SELECT C.JOB FROM EMP C WHERE C.ENAME = 'ALLEN');



-- 58번 JONES 가 속해있는 부서의 모든 사람의 사원번호, 이름, 입사일, 급여를 출력하라.

SELECT 

EMPNO AS 사원번호,

ENAME AS 이름,

HIREDATE AS 입사일,

SAL AS 급여

FROM EMP

WHERE DEPTNO = 

(SELECT DEPTNO FROM EMP WHERE ENAME = 'JONES');



-- 59번 전체 사원의 평균 임금보다 많은 사원의 사원번호, 이름, 부서명, 입사일, 지역, 급여를 출력하라.

SELECT

A.EMPNO AS 사원번호,

A.ENAME AS 이름,

B.DNAME AS 부서명,

A.HIREDATE AS 입사일,

B.LOC AS 지역,

A.SAL 급여

FROM EMP A, DEPT B

WHERE 

A.DEPTNO = B.DEPTNO

AND

A.SAL > (SELECT AVG(SAL) FROM EMP);



-- 60번 10번 부서 사람들 중에서 20번 부서의 사원과 같은 업무를 하는 

-- 사원의 사원번호, 이름, 부서명, 입사일, 지역을 출력하라.

SELECT

A.DEPTNO AS 사원번호,

A.ENAME AS 이름,

B.DNAME AS 부서명,

A.HIREDATE AS 입사일,

B.LOC AS 지역

FROM EMP A, DEPT B

WHERE

A.DEPTNO = B.DEPTNO

AND 

A.DEPTNO = 10

AND 

JOB IN

(SELECT JOB FROM EMP WHERE DEPTNO = 20);



-- 61번 10번 부서중에서 30번 부서에는 없는 업무를 하는 

-- 사원의 사원번호, 이름, 부서명, 입사일, 지역을 출력하라.

SELECT

A.EMPNO 사원번호,

A.ENAME 이름,

B.DNAME 부서명,

A.HIREDATE 입사일,

B.LOC 지역

FROM EMP A, DEPT B

WHERE

A.DEPTNO = B.DEPTNO

AND

A.DEPTNO = 10

AND

JOB NOT IN

(SELECT JOB FROM EMP WHERE DEPTNO = 30);



-- 62번 10번 부서와 같은 일을 하는 

-- 사원의 사원번호, 이름 , 부서명, 지역, 급여를 급여가 많은 순으로 출력하라.

SELECT

A.DEPTNO  사원번호,

A.ENAME 이름,

B.DNAME 부서명,

B.LOC 지역,

A.SAL 급여

FROM EMP A, DEPT B

WHERE

A.DEPTNO = B.DEPTNO

AND

A.JOB IN 

(SELECT JOB FROM EMP WHERE DEPTNO = 10)

ORDER BY A.SAL DESC;



-- 63번 MARTIN이나 SCOTT의 급여와 같은 사원의 사원번호, 이름, 급여를 출력하라.

SELECT

DEPTNO 사원번호,

ENAME 이름,

SAL 급여

FROM EMP

WHERE

SAL IN (SELECT SAL FROM EMP WHERE ENAME IN ('MARTIN' ,'SCOTT'))

AND

ENAME NOT IN ('MARTIN' , 'SCOTT');




-- 64번 급여가 30번 부서의 최고 급여보다 높은 사원의 사원번호, 이름, 급여를 출력하라.

SELECT

EMPNO 사원번호,

ENAME 이름,

SAL 급여

FROM EMP

WHERE SAL > (SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 30);




-- 65번 급여가 30번 부서의 최저 급여보다 높은 사원의 사원번호, 이름, 급여를 출력하라.

SELECT

EMPNO 사원번호,

ENAME 이름,

SAL 급여

FROM EMP

WHERE SAL > (SELECT MIN(SAL) FROM EMP WHERE DEPTNO = 30);

'DB > 오라클 SQL 문제풀이' 카테고리의 다른 글

오라클 DB 간단한 문제 풀어보기 (2)  (0) 2015.03.13
posted by 가야금마스터
prev 1 next