관리 메뉴

프로그래밍 삽질 중

SQL 예제 문제(1) 본문

과거 프로그래밍 자료들/SQL(Oracle)

SQL 예제 문제(1)

평부 2021. 3. 23. 13:13

<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