✅답안과 비교하여 스스로 SQL 구문 개선점 짚어보기 완료(2022.01.19)
함수 연습문제 1. ✅
연결연산자를 사용하는 것도 방법이겠다: SUBSTR(EMP_NO, 1, 8) || '******)
-- 1. 직원명과 주민번호를 조회하세요.
-- 단, 주민번호 9번째 자리부터 끝까지는 '*'문자로 채운다.
-- 예 : 홍길동 771120-1******
SELECT
EMP_NAME 직원명
, RPAD(SUBSTR(EMP_NO, 1, 8), 14, '*') 주민번호
FROM EMPLOYEE;
함수 연습문제 2. ✅
-- 2. 직원명, 직급코드, 연봉(원) 조회하세요.
-- 단, 연봉은 ₩57,000,000 으로 표시되게 한다.
-- 연봉은 보너스 포인트가 적용된 1년치 급여이다.
SELECT
EMP_NAME 직원명
, JOB_CODE 직급코드
, TO_CHAR((SALARY + (SALARY * NVL(BONUS, 0))) * 12, 'L999,999,999') "연봉(원)"
FROM EMPLOYEE;
함수 연습문제 3. ✅
보기 중에 해당사항을 찾도록 쓰려면 DEPT_CODE IN('D5', 'D9')처럼 간략히 나타낼 수 있다.
SUBSTR(HIRE_DATE, 1, 2) = '04' 역시 마찬가지다.
-- 3. 부서코드가 D5, D9인 직원들 중에서 2004년도에 입사한 직원의
-- 사번 사원명 부서코드 입사일 조회하세요.
SELECT
EMP_ID 사번
, EMP_NAME 사원명
, DEPT_CODE 부서코드
, HIRE_DATE 입사일
FROM EMPLOYEE
WHERE DEPT_CODE IN('D5', 'D9')
AND SUBSTR(HIRE_DATE, 1, 2) = '04';
-- WHERE (DEPT_CODE = 'D5' OR DEPT_CODE = 'D9') AND EXTRACT(YEAR FROM HIRE_DATE) = '2004';
함수 연습문제 4. ✅
생년월일이 1~12 이외의 숫자로 이루어진 대상은 WHERE절로 제외시킨다.
SELECT
EMP_NAME 직원명
, DEPT_CODE 부서코드
, SUBSTR(EMP_NO, 1, 2) || '년 ' || SUBSTR(EMP_NO, 3, 2) || '월 ' || SUBSTR(EMP_NO, 5, 2) || '일' 생년월일
, EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM(TO_DATE(SUBSTR(EMP_NO, 1, 6), 'RRMMDD'))) + 1 "나이(한국)"
, FLOOR(MONTHS_BETWEEN(SYSDATE, TO_DATE(SUBSTR(EMP_NO, 1, 6), 'RRMMDD')) / 12) "나이(만)"
FROM EMPLOYEE
WHERE EMP_ID NOT IN ('200', '201', '214');
함수 연습문제 5. ✅
-- 5. 부서코드가 D5이면 총무부, D6이면 기획부, D9이면 영업부로 처리하세요.
-- 단, 부서코드가 D5, D6, D9 인 직원의 정보만 조회한다.
-- => HINT) CASE
-- 부서코드 기준 오름차순 정렬한다.
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 = 'D5' OR DEPT_CODE = 'D6' OR DEPT_CODE = 'D9'
ORDER BY DEPT_CODE ASC;
함수 연습문제 6. ✅
DECODE 함수에서 선택값은 같든 다르든 상관 없다. 여기서는 COUNT 되는 것이 주이기 때문이다.
-- 6. 직원들의 입사일로 부터 년도만 가지고, 각 년도별 입사인원수를 구하세요.
-- 아래의 년도에 입사한 인원수를 조회하세요.
-- => HINT) TO_CHAR, DECODE, COUNT
--
-- -------------------------------------------------------------
-- 전체직원수 2001년 2002년 2003년 2004년
-- ------------------------------------------------------------
SELECT
COUNT(*)
, COUNT(DECODE(TO_CHAR(HIRE_DATE, 'RRRR'), '2001', 1)) "2001년"
, COUNT(DECODE(TO_CHAR(HIRE_DATE, 'RRRR'), '2002', '*')) "2002년"
, COUNT(DECODE(TO_CHAR(HIRE_DATE, 'RRRR'), '2003', ')')) "2003년"
, COUNT(DECODE(TO_CHAR(HIRE_DATE, 'RRRR'), '2004', '0')) "2004년"
FROM EMPLOYEE;
'Database' 카테고리의 다른 글
[Oracle/SQL] 4. JOIN | OUTER JOIN | SELF JOIN | 다중 JOIN (0) | 2022.01.19 |
---|---|
[Oracle/SQL] 3. GROUP BY | HAVING | ROLLUP | CUBE | SET OPERATION (0) | 2022.01.19 |
[Oracle/SQL] 2. 함수 | 그룹함수 | 단일행함수 | 형변환함수 | 선택함수 (0) | 2022.01.18 |
[Oracle/SQL] 1. DML | SELECT | 연산자 (0) | 2022.01.17 |
[Oracle/SQL] 0. 데이터베이스 개요 | DBMS (0) | 2022.01.15 |