SQL 예제 문제(1)
<S_EMP 테이블>
ID NOT NULL NUMBER(7)
LAST_NAME NOT NULL VARCHAR2(25)
FIRST_NAME VARCHAR2(25)
USERID VARCHAR2(8)
START_DATE DATE
COMMENTS VARCHAR2(255)
MANAGER_ID NUMBER(7)
TITLE VARCHAR2(25)
DEPT_ID NUMBER(7)
SALARY NUMBER(11,2)
COMMISSION_PCT NUMBER(4,2)
<S_DEPT 테이블>
ID NOT NULL NUMBER(7)
NAME NOT NULL VARCHAR2(25)
REGION_ID NUMBER(7)
[문제 1]
성이 'Havel'인 사원의 근무일수 출력
[문제 1 답]
1
2
3
4
|
SELECT START_DATE, ROUND(MONTHS_BETWEEN(START_DATE, SYSDATE)*30,1) AS "근무일수"
---29일 30일 상관없이 모두 30일
FROM S_EMP
WHERE LAST_NAME = 'Havel';
|
cs |
[문제 2]
모든 사원이 근무한 지 몇 주가 지났는지 출력
[문제 2 답]
1
2
3
4
|
SELECT LAST_NAME AS "이름", ROUND(MONTHS_BETWEEN(START_DATE, SYSDATE)*30,1) AS "근무일수",
ROUND(FLOOR((MONTHS_BETWEEN(START_DATE, SYSDATE)*30)/7),0) "근무 한 주"
FROM S_EMP
ORDER BY ROUND(FLOOR((MONTHS_BETWEEN(START_DATE, SYSDATE)*30)/7),0) DESC, LAST_NAME ASC;
|
cs |
[문제 3]
각 부서별로 실적에 따라 급여를 다르게 인상하는데 20번과 30번 부서는 각각 5, 15% 인상하고
나머지 부서는 동결할 경우 급여를 출력
[문제 3 답]
1
2
3
4
5
6
|
SELECT DEPT_ID,
CASE DEPT_ID WHEN 20 THEN SALARY*1.05
WHEN 30 THEN SALARY*1.15
ELSE SALARY*1
END "급여"
FROM S_EMP;
|
cs |
[문제 4]
사원의 이름과 매니저 사번을 출력하시오
[문제 4 답]
1
2
3
4
|
SELECT CONCAT(E.FIRST_NAME, E.LAST_NAME) AS "사원이름",
CONCAT(M.FIRST_NAME, M.LAST_NAME) AS "매니저 이름"
FROM S_EMP E, S_EMP M
WHERE E.MANAGER_ID = M.DEPT_ID;
|
cs |
[문제 5]
매월 1, 3주 토요일은 휴무이다 현재 월의 휴무일을 출력하라
[문제 5 답]
1
2
3
|
SELECT NEXT_DAY(TRUNC(SYSDATE, 'MONTH'), '토요일') "첫 번째 휴무일",
NEXT_DAY(TRUNC(SYSDATE, 'MONTH'), '토요일') + 14 "두 번째 휴무일"
FROM S_EMP;
|
cs |
[문제 6]
29번 부서의 이름과 그 부서에서 그 근무하는 사원의 이름을 출력하시오
[문제 6 답]
1
2
3
4
|
SELECT CONCAT(E.FIRST_NAME, E.LAST_NAME) AS "사원 이름", D.NAME
FROM S_EMP E, S_DEPT D
WHERE E.DEPT_ID = D.ID
AND D.ID = 29;
|
cs |
[문제 7]
7번 지역의 이름과 그 곳에 있는 부서의 이름 출력
[문제 7 답]
1
2
3
4
|
SELECT C.ADDRESS AS "지역 이름", D.NAME AS "부서이름"
FROM S_CUSTOMER C, S_DEPT D
WHERE C.REGION_ID = D.REGION_ID
AND C.REGION_ID = 7;
|
cs |