본문 바로가기
Back-End/Database

[SQL] NVL / NVL2 / AS / DISTINCT 키워드

by 찐코딩 2021. 10. 4.

지난 포스팅,

NULL 값을 가지는 컬럼을 다른 컬럼과 연산을 하면 모두 NULL로 처리되는 문제를 확인하였다.

https://jinnnkcoding.tistory.com/72

 

SQL 기본 개념(테이블 생성 및 변경, 컬럼 생성 및 변경, 테이블의 컬럼 화면에 출력하기)

sql developer 에서의 주석문 처리 sql developer 에서의 주석문 처리 -- /* 2줄 이상 여러줄 주석 */ 오라클에서 열의 속성에 들어가는 주요 자료형(data type)  1. number(n, n1) : n - 전체 자릿수 / n1 -..

jinnnkcoding.tistory.com

 

null값을 가진 컬럼을 연산하고자 할 때는 특정 함수를 사용하여야 한다.

 

NVL() 함수

NULL 값을 특정한 값으로 변경시켜 주는 함수
모든 데이터 타입에 적용이 가능함
주의) NVL() 함수를 사용할 때는 전환되는 값의 자료형을 일치시켜야 함.


형식) NVL(NULL값이 들어 있는 컬럼명, 변경할 값)

SELECT empno, ename, sal, comm, sal+NVL(comm,0) FROM emp;

연산 시 null의 데이터를 모두 0으로 변경하여 연산하여

이전에는 모두 null 처리 되었던 것이 제대로 연산되었다.

 

NVL2() 함수

자바에서의 3항연산자와 비슷한 함수
  형식) NVL2(컬럼명, expr1, expr2)
    ==> expr1 : 컬럼명의 값이 NULL이 아닌 경우 반환
    ==> expr2 : 컬럼명의 값이 NULL인 경우 반환

SELECT empno, ename, sal, comm, sal+NVL2(comm, comm, 0) FROM emp;

결과는 위와 같다.

 

또, 보면 이렇게 연산한 컬럼명이 굉장히 복잡하여 미관 상 좋지도 않고 업무 효율이 떨어지니

이 컬럼명을 수정하는 키워드도 있다.

 

AS

컬럼명을 변경하는 키워드
컬럼 명 바로 뒤에 사용함

컬럼명과 별칭 사이에 AS라는 키워드를 넣어줌
모든 별칭은 ""안에 작성

AS 별칭은 생략 가능

SELECT empno, ename, sal, comm, sal+NVL2(comm, comm, 0) AS "급여+보너스" FROM emp;

원하는 컬럼명으로 수정된 것을 볼 수 있다.

 

 

-- [문제] emp 테이블에서 각 사원의 담당업무(job)를 화면에 보여주세요
select job from emp;

또, select문을 실행하다 보면 이렇게 중복 데이터가 출력되어 원하는 데이터가 나오지 않는 경우도 있다.

이럴 때 중복값을 제거해주는 키워드, DISTINCT를 사용하면 된다.

 

DISTINCT 키워드

중복을 제거해주는 키워드
distinct 키워드는 항상 selecet 키워드 다음에 기술한다
distinct 키워드 뒤에 나오는 컬럼들은 모두 distinct의 영향을 받는다,

-- [문제] emp 테이블에서 각 사원의 담당업무(job)의 중복값을 제외하고, 화면에 보여주세요
select distinct job from emp;

중복값이 올바르게 제거된 것을 볼 수 있다.

 

 

댓글