4/30 sql

easyjw·2025년 4월 30일

2교시

변환 함수

날짜 및 시간 형식 변환하기

TO_CHAR

TO_CHAR는 날짜, 숫자, 문자 값을 지정한 형식의 VARCHAR2 타입 문자열로 변환하는 함수입니다.

SELECT TO_CHAR(SYSDATE, 'YY'),

       TO_CHAR(SYSDATE, 'YYYY'),

       TO_CHAR(SYSDATE, 'MM'),

       TO_CHAR(SYSDATE, 'MON'),

       TO_CHAR(SYSDATE, 'YYYYMMDD') 응용적용1,

       TO_CHAR(TO_DATE('20171008','YYYYMMDD), 'YYYYMMDD') 응용적용2

FROM   dual;

일반 함수

NOT NULL 값 처리하기

특정 열의 행에 대한 데이터 값이 없다면 데이터 값은 null이 됩니다. null은 그 자체로 의미가 있는데 ‘값이 없다’는 것을 나타내는 값입니다. 테이블을 정의할 때 null 값을 가지지 못하도록 지정할 수도 있습니다. 이런 경우를 not null이라고 합니다.

null 값은 다음과 같은 특징이 있습니다.

  • 할당되지 않았거나 알려져 있지 않아 적용이 불가능한 값입니다.

  • 0이나 공백(space)과는 다릅니다.

  • null 값을 포함하는 산술 연산의 결과는 null입니다.

NVL 함수

salary * commission_pct는 ‘salary 열과 commission_pct 열을 곱하라’는 의미입니다.

commission_pct 열의 데이터 값이 null이 아닐 때는 제대로 계산되지만 null일 때는 null로 처리되었습니다.
경우에 따라 null 값을 다른 값으로 처리해야 할 때가 있습니다.
예를 들어 앞의 예와 같이 salary 열에 모두 곱셈 처리를 하고 싶은데 commission_pct 열의 데이터 값이 null인 데이터는 제대로 계산되지 않습니다.
데이터 값에 null을 곱하면 결과가 null이 되기 때문입니다. 이럴 때는 NVL 함수를 사용합니다.

SELECT salary * NVL(commission_pct, 1)

FROM   hr.employees

ORDER BY commission_pct;

SELECT *

FROM   hr.employees

ORDER BY commission_pct;

commission_pct에 대해 오름차순으로 정렬하여 출력하였습니다.

SELECT  SALARY * COMMISSION_PCT

FROM HR.EMPLOYEES
ORDER BY COMMISSION_PCT;

3교시

DECODE : 조건 논리 처리하기

DECODE는 프로그래밍을 해 본 사람이라면 들어 본 적이 있을 IF-THEN-ELSE-END의 조건 논리를 가능하게 하는 함수입니다. 데이터 값이 조건 값과 일치하면 치환 값을 출력하고 일치하지 않으면 기본값을 출력합니다.

SELECT first_name,

       last_name,

       department_id,

       salary 원래급여,

       DECODE(department_id, 60, salary*1.1, salary) 조정된급여,

       DECODE(department_id, 60, '10%인상', '미인상') 인상여부

FROM   hr.employees;

같이 DECODE 함수는 산술 계산 외에 문자열 표현도 가능하며 다양한 형태로 응용하여 활용할 수 있습니다. 또한 DECODE(열 이름, 조건 값 1, 치환 값 1, 조건 값 2, 치환 값 2, …, 기본값) 형태로 조건 논리를 계속 이어 나갈 수 있습니다.

실무 활용 팁

DECODE 함수는 특정 조건을 만족하는 경우에 값을 변경하여 출력하고자 할 때 유용합니다.

CASE 표현식 : 복잡한 조건 논리 처리하기

복잡한 조건식을 여러 개 적용해야 할 때는 DECODE 함수보다 CASE 표현식을 이용하는 것이 유용할 수 있습니다.
DECODE 함수는 데이터 값이 정확히 맞거나 틀린 조건을 처리하기 쉬운 반면 CASE 함수는 조건의 범위가 다양한 경우에 쉽게 처리할 수 있습니다.

SELECT employee_id , first_name, last_name,salary,
       CASE
            WHEN salary >= 9000 THEN '상위급여'
            WHEN salary BETWEEN 6000 AND 8999 THEN '중위급여'
            ELSE '하위급여'
        END AS 급여등급
FROM HR.employees
where JOB_ID = 'IT_PROG'

실무 활용 팁

CASE 문은 매우 다양하게 활용할 수 있는데 예제와 같이 숫자에 대한 구간 등급을 나누어 표현하는 것은 물론 나이, 지역, 날짜를 구분하여 출력하고자 할 때도 얼마든지 응용할 수 있습니다.

0개의 댓글