[Oracle]2022.7.14 연습문제

최진하·2022년 7월 14일

오라클

목록 보기
1/3

-- 최종 실습 문제
-- 문제1.
-- 입사일이 5년 이상, 10년 이하인 직원의 이름,주민번호,급여,입사일을 검색하여라

SELECT 
    EMP_NAME
    , EMP_NO
    , SALARY
    ,HIRE_DATE
    ,TRUNC((SYSDATE-HIRE_DATE)/365, 1) "근속년수"
FROM EMPLOYEE
WHERE (SYSDATE-HIRE_DATE)/365 BETWEEN 5 AND 10;

-- 문제2.
-- 재직중이 아닌 직원의 이름,부서코드, 고용일, 근무기간, 퇴직일을 검색하여라
--(퇴사 여부 : ENT_YN)

SELECT 
    EMP_NAME
    ,DEPT_CODE
    ,HIRE_DATE
    ,ENT_DATE
FROM EMPLOYEE
WHERE ENT_YN='Y';
SELECT*FROM EMPLOYEE;

-- 문제3.
-- 근속년수가 10년 이상인 직원들을 검색하여
-- 출력 결과는 이름,급여,근속년수(소수점X)를 근속년수가 오름차순으로 정렬하여 출력하여라
-- 단, 급여는 50% 인상된 급여로 출력되도록 하여라.

SELECT 
    EMP_NAME
    , SALARY*1.5
    ,FLOOR((SYSDATE-HIRE_DATE)/365)"근속년수"
FROM EMPLOYEE
WHERE (SYSDATE-HIRE_DATE)/365>=10
ORDER BY HIRE_DATE DESC;

-- 문제4.
-- 입사일이 99/01/01 ~ 10/01/01 인 사람 중에서 급여가 2000000 원 이하인 사람의
-- 이름,주민번호,이메일,폰번호,급여를 검색 하시오

SELECT 
    EMP_NAME
    ,EMP_NO
    ,EMAIL
    ,PHONE
    ,SALARY
FROM EMPLOYEE
WHERE (HIRE_DATE BETWEEN '99/01/01' AND '10/01/01')AND SALARY<=2000000;

-- 문제5.
-- 급여가 2000000원 ~ 3000000원 인 여직원 중에서 4월 생일자를 검색하여
-- 이름,주민번호,급여,부서코드를 주민번호 순으로(내림차순) 출력하여라
-- 단, 부서코드가 null인 사람은 부서코드가 '없음' 으로 출력 하여라.

SELECT 
    EMP_NAME
    ,SALARY
    ,NVL(DEPT_CODE, '없음')
    ,EMP_NO
FROM EMPLOYEE
WHERE 
    (SALARY BETWEEN 2000000 AND 3000000)
    AND EMP_NO LIKE '%-2%' 
    AND EMP_NO LIKE '___4%'
ORDER BY EMP_NO DESC;

-- 문제6.
-- 남자 사원 중 보너스가 없는 사원의 오늘까지 근무일을 측정하여
-- 1000일 마다(소수점 제외)
-- 급여의 10% 보너스를 계산하여 이름,특별 보너스 (계산 금액) 결과를 출력하여라.
-- 단, 이름 순으로 오름 차순 정렬하여 출력하여라.

SELECT
    EMP_NAME
    , FLOOR((SYSDATE-HIRE_DATE)/1000) "보너스횟수"
    ,SALARY+SALARY*0.1*FLOOR((SYSDATE-HIRE_DATE)/1000)"특별보너스"
FROM EMPLOYEE
WHERE EMP_NO LIKE '%-1%' AND BONUS IS NULL
ORDER BY EMP_NAME ASC;

-- @함수 최종실습문제
--1. 직원명과 이메일 , 이메일 길이를 출력하시오
-- 이름 이메일 이메일길이
-- ex) 홍길동 , hong@kh.or.kr 13

SELECT
    EMP_NAME"이름"
    ,EMAIL"이메일"
    ,LENGTH(EMAIL)"이메일길이"
FROM EMPLOYEE;

--2. 직원의 이름과 이메일 주소중 아이디 부분만 출력하시오
-- ex) 노옹철 no_hc
-- ex) 정중하 jung_jh

SELECT
    EMP_NAME"이름"
    ,EMAIL"이메일"
    , SUBSTR(EMAIL,1,INSTR(EMAIL,'@')-1)"아이디"
FROM EMPLOYEE;

--3. 60년대에 태어난 직원명과 년생, 보너스 값을 출력하시오. 그때 보너스 값이 null인 경우에는 0 이라고 출력 되게 만드시오
-- 직원명 년생 보너스
-- ex) 선동일 1962 0.3
-- ex) 송은희 1963 0

SELECT 
    EMP_NAME
    ,'19'||SUBSTR(EMP_NO,1,2)"출생년도"
    ,NVL(BONUS, 0)
FROM EMPLOYEE
WHERE SUBSTR(EMP_NO,1,2) BETWEEN 60 AND 70;

--4. '010' 핸드폰 번호를 쓰지 않는 사람의 수를 출력하시오 (뒤에 단위는 명을 붙이시오)
-- 인원
-- ex) 3명

SELECT
    COUNT(*)||'명'"인원"
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%';

--5. 직원명과 입사년월을 출력하시오
-- 단, 아래와 같이 출력되도록 만들어 보시오
-- 직원명 입사년월
-- ex) 전형돈 2012년 12월
-- ex) 전지연 1997년 3월

SELECT 
    EMP_NAME"직원명"
    , TO_CHAR(HIRE_DATE, 'YYYY"년"MM"월"')"입사년월"
FROM EMPLOYEE;

--6. 직원명과 주민번호를 조회하시오
-- 단, 주민번호 9번째 자리부터 끝까지는 '*' 문자로 채워서출력 하시오
-- ex) 홍길동 771120-1**

SELECT 
    EMP_NAME
   ,RPAD(SUBSTR( EMP_NO,1,8),14,'*')"주민번호"
FROM EMPLOYEE;

--7. 직원명, 직급코드, 연봉(원) 조회
-- 단, 연봉은 ₩57,000,000 으로 표시되게 함
-- 연봉은 보너스포인트가 적용된 1년치 급여임

SELECT
    EMP_NAME"직원명"
    ,SAL_LEVEL"직급코드"
    ,'₩'||TO_CHAR(SALARY*12+SALARY*NVL(BONUS, 0), '999,999,999')"연봉"
FROM EMPLOYEE;

--8. 부서코드가 D5, D9인 직원들 중에서 2004년도에 입사한 직원중에 조회함.
-- 사번 사원명 부서코드 입사일

SELECT
    EMP_ID"사번"
    , EMP_NAME"사원명"
    , DEPT_CODE"부서코드"
    ,HIRE_DATE"입사일"
FROM EMPLOYEE
WHERE (DEPT_CODE='D5' AND (SUBSTR(HIRE_DATE,1,2))='04') 
OR (DEPT_CODE='D9' AND (SUBSTR(HIRE_DATE,1,2))='04');

--9. 직원명, 입사일, 오늘까지의 근무일수 조회
-- * 주말도 포함 , 소수점 아래는 버림

SELECT
  EMP_NAME
 ,HIRE_DATE
 ,FLOOR(SYSDATE-HIRE_DATE) "근무일수"
> FROM EMPLOYEE;

--10. 직원명, 부서코드, 생년월일, 나이(만) 조회
-- 단, 생년월일은 주민번호에서 추출해서,
-- ㅇㅇㅇㅇ년 ㅇㅇ월 ㅇㅇ일로 출력되게 함.
-- 나이는 주민번호에서 추출해서 날짜데이터로 변환한 다음, 계산함
-- 주민번호가 이상한 사람들은 제외시키고 진행 하도록(200,201,214 번 제외)
--
HINT : NOT IN 사용

SELECT
    EMP_NAME
    , DEPT_CODE "부서코드"
    , TO_CHAR(TO_DATE('19'||SUBSTR(EMP_NO,1,6)),'YYYY"년"MM"월"DD"일"')"생년월일"
    ,ROUND((SYSDATE-TO_DATE('19'||SUBSTR(EMP_NO,1,6)))/365)+1"나이"
FROM EMPLOYEE
WHERE EMP_ID NOT IN('200','201','214');

--11. 사원명과, 부서명을 출력하세요.
-- 부서코드가 D5이면 총무부, D6이면 기획부, D9이면 영업부로 처리하시오.(case 사용)
-- 단, 부서코드가 D5, D6, D9 인 직원의 정보만 조회하고, 부서코드 기준으로 오름차순 정렬함.

SELECT
    EMP_NAME
    , DEPT_CODE
    , CASE WHEN DEPT_CODE = 'D5' THEN'총무부'
           WHEN DEPT_CODE = 'D6' THEN'기획부'
           WHEN DEPT_CODE = 'D9' THEN'영업부'
    END
FROM EMPLOYEE
WHERE DEPT_CODE IN ('D5', 'D6', 'D9')
ORDER BY DEPT_CODE ASC;
profile
소소한 정리

0개의 댓글