연습문제 sql은 모두 제가 직접 작성한 것이므로 오타, 오답이 존재할 수 있습니다.
궁금하신 점이 추가로 있을 시에는 문의하시면 최대한 답변드리겠습니다.
1. 모든 사원의 사원번호, 이름, 급여, 부서 번호를 출력하여라.
[답]
select empno, ename, sal, deptno
from emp;
2. 모든 사원의 이름, 급여, 커미션, 총액(급여+커미션)을 구하여 총액이 많은 순서로 출력하여라.(단, 커미션이 null인 사원도 0으로 해서 포함하여라.).
[답]
SELECT ename, sal, comm, sal+NVL(comm, 0) AS "총액"
FROM emp
ORDER BY 총액 DESC;
3. 10번 부서의 모든 사원에게 급여의 13%를 보너스로 지불하기로 하였다. 10번 부서 사원들의 이름, 급여, 보너스 금액, 부서 번호를 출력하여라.
[답]
select ename, sal, sal*0.13 as "보너스 금액", deptno
from emp
where deptno = 10;
4. 급여가 $1,500부터 $3,000 사이의 사원에 대해서만 급여의 15%를 회비로 지불하기로 하였다. 조건에 해당되는 사원의 이름, 급여, 회비(소수이하 2자리까지 반올림)를 출력하여라.
[답]
SELECT ename, sal, ROUND(sal*0.15, 2) AS 회비
FROM emp
WHERE sal>1500 AND sal<3000;
-급여가 1500 이상 3000 이하의 사원에 대해서일 경우
select ename, sal, round(sal*0.15, 2) "회비"
from emp
where sal between 1500 and 3000;
5. 모든 사원의 부서 번호, 이름, 입사일, 현재일, 입사일부터 현재까지의 근무 일 수(소수점 이하 절삭), 근무 년 수 ,근무 월 수(30일 기준), 근무 주수를 출력하여라.
[답]
select deptno, ename, hiredate, sysdate as "현재일", trunc(sysdate - hiredate) as "근무 일 수", floor(trunc(sysdate-hiredate)/365) as "근무 년 수", floor(trunc(sysdate-hiredate)/30) as "근무 월 수", floor(trunc(sysdate-hiredate)/7) as "근무 주수"
from emp;
6. 모든 사원에 대해 입사일로부터 90일이 지난 후의 날짜를 계산해서 이름, 입사일, 90일 후의 날짜, 급여를 출력하여라.
[답]
select ename, hiredate, hiredate + 90 "90일 후", sal
from emp;
7. 모든 사원에 대해 입사한 달의 근무 일 수를 계산하여 부서 번호, 이름, 근무 일 수를 출력하여라.
[답]
SELECT deptno, ename, LAST_DAY(hiredate)-hiredate "근무일수"
FROM emp;
실제 근무 일 수는 LAST_DAY(hiredate)-hiredate + 1 입니다.
8. 모든 사원에 대해 입사한 날로부터 60일이 지난 후의 '월요일'이 몇 년, 몇 월, 몇 일인지를 구하여 이름, 입사일, 60일 후의 '월요일' 날짜를 출력하여라.
[답]
select ename, hiredate, next_day(hiredate + 60, '월') "월요일"
from emp;
9. 이름의 글자수가 6자 이상인 사원의 이름을 앞에서 3자만 구하여 소문자로 이름만 출력하여라.
[답]
select lower(substr(ename, 1, 3))
from emp
where length(ename)>=6;
select lower(substr(ename, 1, 3)) "ENAME"
from emp
where length(ename) >= 6;
10. 모든 사원에 대해 사원의 이름은 앞에서 세 글자만 대문자로, 업무는 소문자로 하여 이름, 직무, 부서 번호를 출력하여라.
[답]
SELECT UPPER(SUBSTR(ename, 1, 3)) "이름", LOWER(job) "직무", deptno
FROM emp;
11. 모든 사원에 대해 사원의 이름과 부서 번호를 합성시켜 "연결예제"라는 heading으로 출력하여라.
[답]
select concat(ename, deptno) "연결예제"
from emp;
select ename || deptno "연결예제"
from emp;
12. 사원의 직무가 'SAL'로 시작하는 사원의 이름과 사원 이름의 길이를 출력하여라.
[답]
select ename, length(ename) "이름 길이"
from emp
where substr(job, 1, 3)='SAL';
SELECT ENAME, LENGTH(ename) "길이"
FROM emp
WHERE job LIKE 'SAL%';
13. 이름의 두 번째 글자가 'A'인 사원들의 이름과 직무를 출력하여라.(단, 직무는 앞에서부터 세 글자로 줄여 표시하여라.)
[답]
select ename, substr(job, 1, 3) "JOB"
from emp
where substr(ename, 2, 1) = 'A';
SELECT ename, SUBSTR(job, 1, 3) "job"
FROM emp
WHERE ename LIKE '_A%';
14. 현재의 7일 전과 7일 후, 그리고 30일이 지난 후의 첫 번째 월요일을 출력하여라.
[답]
SELECT sysdate-7 "7일전", sysdate+7 "7일후", NEXT_DAY(sysdate+30, '월') "첫월요일"
FROM DUAL;
15. 직무가 'CLERK'인 사원들의 사원 번호, 이름, 급여를 표시하여라.(단, 급여는 1000 단위마다 콤마(,)를 찍고 앞에는 국가별 화폐 단위를 붙여 표시하여라.)
[답]
SELECT empno, ename, TO_CHAR(sal, 'L999,999') AS "급여"
FROM emp
where job='CLERK';
16. 사원들의 사원 번호와 급여, 커미션, 연봉((comm+sal)*12)을 연봉이 많은 순서로 출력하여라.(단, 커미션이 null인 사원도 0으로 계산하여라.)
[답]
SELECT empno, sal, comm, (NVL(comm, 0)+sal)*12 AS "연봉"
FROM emp
ORDER BY 연봉 DESC;
17. 모든 사원에 대해 입사일로부터 6개월이 지난 후의 날짜를 계산해서 이름, 입사일, 6개월 후의 날짜를 출력하여라.
[답]
select ename, hiredate, add_months(hiredate, 6) "6개월 후"
from emp;
18. 모든 사원에 대해 사원들의 이름, 급여, 커미션을 급여가 적은 것부터 출력하여라.(단, 커미션이 없는 사원은 'No Commission'이라는 말이 출력되게 하여라.)
[답]
select ename, sal, NVL(to_char(comm, '999999'), 'No Commission') "comm"
from emp
order by sal;
SELECT ename, sal, DECODE(comm, NULL, 'No Commission', comm, comm) "comm"
FROM emp
ORDER BY sal;
19. 'CLERK'은 20% 'SALESMAN'은 15%, 'ANALYST'는 10%, 'MANAGER'는 5%, 'PRESIDENT'는 0%와 같이 업무에 따라 급여인상을 다르게 할 경우, 모든 사원들의 이름, 직무, 급여, 인상 후의 급여를 출력하여라.
[답]
select ename, job, sal, decode(job, 'CLERK', sal*1.2, 'SALESMAN', sal*1.15, 'ANALYST', sal*1.1, 'MANAGER', sal*1.05, 'PRESIDENT', sal) "인상후"
from emp;
SELECT ename, job, sal, CASE job
WHEN 'CLERK' THEN sal+sal*0.2
WHEN 'SALESMAN' THEN sal+sal*0.15
WHEN 'ANALYST' THEN sal+sal*0.1
WHEN 'MANAGER' THEN sal+sal*0.05
WHEN 'PRESIDENT' THEN sal
END AS "인상후의 급여"
FROM emp;
20. 모든 사원들의 입사한 년도와 입사한 달을 출력하여라.
[답]
select to_char(hiredate, 'YY/MM') "hire"
from emp;
SELECT TO_CHAR(hiredate, 'YYYY') "년도", TO_CHAR(hiredate, 'MONTH') "입사달"
FROM emp;
21. 사원번호가 짝수인 사원들의 모든 정보를 출력하여라.
[답]
select *
from emp
where mod(empno, 2) = 0;
궁금한 점이 있을 시 덧글 주시면 최대한 답글 드리겠습니다.
'연습 문제' 카테고리의 다른 글
예제 따라가며 쉽게 배우는 오라클 연습 문제 p.153 ~ 154 (0) | 2023.01.01 |
---|---|
예제 따라가며 쉽게 배우는 오라클 연습 문제 p.127 ~ 128 (0) | 2022.12.31 |
예제 따라가며 쉽게 배우는 오라클 연습 문제 p.61 ~ 62 (0) | 2022.12.30 |
예제 따라가며 쉽게 배우는 오라클 연습 문제 계정 설정 (0) | 2022.12.29 |
[연두] Warming-up C Programming Chapter 5 : 연습 문제 풀이 (0) | 2022.12.26 |
댓글