본문 바로가기

데이터베이스

널 (null), 디코드 (decode), 케이스 (case)

(연산불가)

공백문자, 0 도 아님. 공백문자는 아스키코드 값을 가짐. 

제비연 : 제어불가, 비교불가, 연산불가

7번의 경우 SAL 속성 내부에 NULL 이 있는 경우

널과 관련된 연산은 모두 null 이다.

 

(비교불가)

 

(제어불가)

비교 연산자로는 불가하다. COMM 이 NULL 인 경우 is null is not null 을 사용한다

 

 

1번의 경우 암시적 변환이 이루어짐. COMM은 정수형인데 length는 문자열 함수이다.

길이가 없으니까 0을 리턴할 거라 생각하지만, 그게 아니다.

그냥 함수를 적용해도 null 을 리턴한다.

 

 

2번의 경우

 

 

 

하지만 3번의 경우 null을 무시하는 함수이다. 

concat 함수는 문자를 합성하는 함수인데 COMM 은 숫자이므로 암시적 데이터 변환이 발생한다.

nvl(COMM,-1) → 널이면 -1로 치환해라라는 의미이다.

decode → SQL 내부에서 조건 처리를 위해 사용하는 함수

 

12번은 이런게 있구나만 알고 있어라. ORDER BY 에서 연산을 하는 과정을 잘 쓰지 않는다.

 

 

NULL 은 가장 큰 값으로 오라클에서는 간주한다.

 

 

 

 

 

select distinct comm from emp;

null 도 distinct에 포함된다.

 

decode를 사용할 수 있으면 dbms에 조건 처리를 건내줄 수 있다.

 

이렇게 하드코딩이 될 수 있다. 

 

 

3번의 경우 데이터를 분류하는 작업임. HIGH, MID, LOW 

데이터를 SELECT 해오며 분류까지 하는 작업

 

하지만 3번,4번은 쓰지 않음

왜냐하면 DECODE를 계량한 CASE가 나옴.

 

 

ELSE 는 널(NULL) 인 CASE를 처리함

 

 

SAL 비교 순서를 바꾸었는데, 출력이 되지 않았고, SAL 순서를 다음과 같이 했을 경우에만 값을 확인할 수 있었다.

 

CASE로 처리한 것과 DECODE로 처리한 것 모두 ALIAS가 가능하다.

 

 

decode도 다음과 같이 alias가 가능하다.

 

 

* 부서별 차등 보너스 계산 SQL을 작성 하십시요     

- 10번 부서 급여의 0.3% , 20번부서 급여의 20%, 30번 부서 급여의 10%,  

나머지 모든 부서 1%     

- 부서 번호, 이름,직무,급여,보너스     

- 부서별, 최고 보너스 순으로 정렬     

- 소수점 절

select deptno, ename, job, sal, 
case when deptno=10 then trunc(sal*1.003)
     when deptno=20 then trunc(sal*1.2)
     when deptno=30 then trunc(sal*1.1)
    else
    trunc(sal*1.1)
    end as bonus
    from emp order by deptno, bonus desc;

 

이것도 돼!!

 

 

다음과 같이 구현할 수 있음

 

'데이터베이스' 카테고리의 다른 글

오라클실습 (190507)  (0) 2019.05.07
ROWNUM  (0) 2019.05.03
group by, distinct, schema, 시분초  (0) 2019.05.03
csv 파일 추출법 - SQL  (0) 2019.05.03
Syntax diagram - SELECT  (0) 2019.05.03