'SQL 전문가 가이드'에 해당되는 글 44건

  1. 2013.09.30 NULLIF
  2. 2013.09.30 NULL과 공집합
  3. 2013.09.30 NVL/ISNULL 함수 2
  4. 2013.09.27 CASE 표현

NULLIF

SQL 전문가 가이드 2013. 9. 30. 14:22

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제6절 함수 (FUNCTION)

7. NULL 관련 함수

다. NULLIF

 

 

[예제] 사원 테이블에서 MGR와 7698이 같으면 NULL을 표시하고, 같지 않으면 MGR를 표시한다.

 SELECT ENAME, EMPNO, MGR, NULLIF(MGR,7698) NUIF

 FROM EMP;  

 

 

[예제] NULLIF 함수를 CASE 문장으로 표현할 수 있다.

 SELECT ENAME, EMPNO, MGR,

              CASE WHEN MGR = 7698

                        THEN NULL

                        ELSE MGR

              END NUIF

 FROM EMP;

 

 

[실행결과]

(14개 행이 영향을 받음)

 

'SQL 전문가 가이드' 카테고리의 다른 글

집계 함수(Aggregate Function)  (0) 2013.09.30
기타 NULL 관련 함수 (COALESCE)  (0) 2013.09.30
NULL과 공집합  (0) 2013.09.30
NVL/ISNULL 함수  (2) 2013.09.30
CASE 표현  (0) 2013.09.27
Posted by G4.
,

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제6절 함수 (FUNCTION)

7. NULL 관련 함수

나. NULL과 공집합

 

 

* 일반적인 NVL/ISNULL 함수 사용

 

STEP1. 정상적으로 매니저 정보를 가지고 있는 SCOTT의 매니저를 출력한다.

 SELECT MGR FROM EMP WHERE ENAME='SCOTT';

 

 

STEP2. 매니저에 NULL이 들어있는 KING의 매니저를 출력한다.

 SELECT MGR FROM EMP WHERE ENAME='KING';

 

 

STEP3. 매니저가 NULL인 경우 빈칸이 아닌 9999로 출력하기 위해 NVL/ISNULL 함수를 사용한다.

 SELECT ISNULL(MGR,9999) MGR FROM EMP WHERE ENAME='KING';

 

 


 

 

 

 

* 공집합의 NVL/ISNULL 함수 사용

 

STEP1. 공집합을 발생시키기 위해 사원 테이블에 존재하지 않는 'JSC'라는 이름으로 데이터를 검색한다.

 SELECT MGR FROM EMP WHERE ENAME='JSC';

 

 

STEP2. NVL/ISNULL 함수를 이용해 공집합을 9999로 바꾸고자 시도한다.

 SELECT ISNULL(MGR, 9999) MGR FROM EMP WHERE ENAME='JSC';

 

 

STEP3. 적절한 집계 함수를 찾아서 ISNULL 함수 대신 적용한다.

 SELECT MAX(MGR) MGR FROM EMP WHERE ENAME='JSC';

 

 

STEP4. 집계 함수를 인수로 한 NVL/ISNULL 함수를 이용해서 공집합인 경우에도 빈칸이 아닌 9999로 출력하게 한다.

 SELECT ISNULL(MAX(MGR), 9999) MGR FROM EMP WHERE ENAME='JSC';

 

'SQL 전문가 가이드' 카테고리의 다른 글

기타 NULL 관련 함수 (COALESCE)  (0) 2013.09.30
NULLIF  (0) 2013.09.30
NVL/ISNULL 함수  (2) 2013.09.30
CASE 표현  (0) 2013.09.27
변환형 함수  (0) 2013.09.27
Posted by G4.
,

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제6절 함수 (FUNCTION)

7. NULL 관련 함수

가. NVL/ISNULL 함수

 

 

[준비]

 UPDATE PLAYER
 SET POSITION = NULL
 WHERE POSITION = '';

[제5절 WHERE 절]의 [4. SQL 연산자] 부분의 예제를 풀면서 POSITION 칼럼의 공백 값들을 NULL 값으로 수정하신 분들은 안하셔도 됩니다.

 

 

[예제] 선수 테이블에서 성남 일화천마(K08) 소속 선수의 이름과 포지션을 출력하는데, 포지션이 없는 경우는 '없음'으로 표시한다.

 SELECT PLAYER_NAME 선수명, POSITION, ISNULL(POSITION,'없음') 포지션
 FROM PLAYER
 WHERE TEAM_ID = 'K08'

 

 

[실행결과]

(45개 행이 영향을 받음)

 

 


 

 

[예제] ISNULL 함수를 사용한 SQL 문장은 벤더 공통적으로 CASE 문장으로 표현할 수 있다.

 SELECT PLAYER_NAME 선수명, POSITION,
 CASE WHEN POSITION IS NULL THEN '없음'
          ELSE POSITION
 END AS 포지션
 FROM PLAYER
 WHERE TEAM_ID = 'K08'

 

 

[실행결과]

(45개 행이 영향을 받음)

 

 


 

 

[예제] 급여와 커미션을 포함한 연봉을 계산하면서 ISNULL 함수의 필요성을 알아본다.

 SELECT ENAME 사원명, SAL 월급, COMM 커미션,
              (SAL * 12) + COMM 연봉A, (SAL * 12) + ISNULL(COMM,0) 연봉B
 FROM EMP;

 

 

[실행결과]

(14개 행이 영향을 받음)

 

'SQL 전문가 가이드' 카테고리의 다른 글

NULLIF  (0) 2013.09.30
NULL과 공집합  (0) 2013.09.30
CASE 표현  (0) 2013.09.27
변환형 함수  (0) 2013.09.27
날짜형 함수  (0) 2013.09.27
Posted by G4.
,

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제6절 함수 (FUNCTION)

6. CASE 표현

 

 

[예제] 같은 기능을 하는 CASE 표현

일반 프로그램의 IF-THEN-ELSE-END 로직과 같다.

----------------------------------

 IF SAL > 2000

THEN REVISED_SALARY = SAL

ELSE REVISED_SALARY = 2000

END-IF

----------------------------------

 SELECT ENAME,

 CASE WHEN SAL > 2000

          THEN SAL

          ELSE 2000

 END REVISED_SALAR

 FROM EMP;

급여(SAL)가 2000보다 크면 급여 값 그대로 2000보다 작으면 급여를 2000으로 해서 REVISED_SALAR 로 출력합니다.

 

 

[실행결과]

(14개 행이 영향을 받음)

 

 


 

 

[예제] 부서 정보에서 부서 위치를 미국의 동부, 중부, 서부로 구분하라.

 SELECT LOC,

 CASE LOC WHEN 'NEW YORK' THEN 'EAST'
                  WHEN 'BOSTON' THEN 'EAST'
                  WHEN 'CHICAGO' THEN 'CENTER'
                  WHEN 'DALLAS' THEN 'CENTER'

 END as AREA
 FROM DEPT;

책에서 그 외는 ETC로 구분했는데 굳이 할 필요 없습니다.

 

 

[실행결과]

(4개 행이 영향을 받음)

 

 


 

 

[예제] 사원 정보에서 급여가 3000 이상이면 상등급으로, 1000 이상이면 중등급으로, 1000 미만이면 하등급으로 분류하라.

 SELECT ENAME,
 CASE WHEN SAL >= 3000 THEN 'HIGH'
          WHEN SAL >= 1000 THEN 'MID'
          ELSE 'LOW'
 END as SALARY_GRADE
 FROM EMP;

 

 

[실행결과]

(14개 행이 영향을 받음)

 

 


 

 

[예제] 사원 정보에서 급여가 2000 이상이면 보너스를 1000으로, 1000 이상이면 5000으로, 1000 미만이면 0으로 계산한다.

 SELECT ENAME, SAL,
 CASE WHEN SAL >= 2000 THEN 1000
          ELSE (CASE WHEN SAL >= 1000 THEN 500

                    ELSE 

                    END)
 END as BONUS
 FROM EMP;

 

 

[실행결과]

(14개 행이 영향을 받음)

 

'SQL 전문가 가이드' 카테고리의 다른 글

NULL과 공집합  (0) 2013.09.30
NVL/ISNULL 함수  (2) 2013.09.30
변환형 함수  (0) 2013.09.27
날짜형 함수  (0) 2013.09.27
숫자형 함수  (0) 2013.09.27
Posted by G4.
,