상세 컨텐츠

본문 제목

[Oracle DB 입문 10] SQL 함수

DataBase

by 코딩순이 2021. 3. 9. 20:50

본문

SELECT NULLIF(123,123) AS 결과1
, NULLIF(123,1234) AS 결과2
, NULLIF('A','B') AS 결과3
FROM DUAL;

▶ IS NULL / IS NOT NULL

SELECT BUYER_NAME AS 거래처
, NVL(BUYER_CHARGER,'없음') AS 담당자
FROM BUYER
WHERE BUYER_CHARGER IS NULL; -- NULL 검색 시 IS를 사용함
-- WHERE BUYER_CHARGER IS NOT NULL; -- NULL을 제외한 값을 검색 시 IS NOT를 사용함

▶ NVL / NVL2

1. 회원 마일리지에 100을 더한 수치를 검색하시오.
-- NVL 이용 / ALIAS는 성명, 마일리지, 변경마일리지

SELECT MEM_NAME AS 성명
, MEM_MILEAGE AS 마일리지
, NVL(MEM_MILEAGE,0) + 100 AS 변경마일리지
FROM MEMBER;

2. 회원 마일리지가 있으면 '정상회원', NULL이면 '비정상 회원'으로 검색하시오.
-- NVL2 이용 / ALIAS는 성명, 마일리지, 회원상태

SELECT MEM_NAME AS 성명
, MEM_MILEAGE AS 마일리지
, NVL2(MEM_MILEAGE,'정상회원','비정상 회원') AS 회원상태
FROM MEMBER;

▶ NULLIF

- 비교하는 값이 같으면 null 출력 , 같지 않으면 앞의 값을 출력함.

SELECT NULLIF(123,123) AS 결과1
, NULLIF(123,1234) AS 결과2
, NULLIF('A','B') AS 결과3
FROM DUAL;

▶ COALESCE

- NULL값을 제외한 첫번째 값을 출력함.

SELECT COALESCE(NULL, NULL,'HELLO','NULL','SQL')
FROM DUAL;

▶ DECODE

3. 회원의 주민번호 뒷자리 첫글자를 사용하여 1이면 남성, 2이면 여성, 3이면 2000년 이후 남아, 4면 2000년 이후 여아
-- ALIAS : 회원ID, 회원명, 주민번호 뒷자리, 성별

SELECT MEM_ID AS 회원ID
, MEM_NAME AS 회원명
, MEM_REGNO2 AS 주민번호뒷자리
, DECODE(
    SUBSTR(MEM_REGNO2,1,1)
    ,'1', '남성'
    ,'2', '여성'
    ,'3', '2000년 이후 남아'
    ,'4', '2000년 이후 여아'
    , MEM_REGNO2
    ) AS 성별
FROM MEMBER;

 

4. 상품 분류 중 앞의 두 글자가 'P1'이면 판매가를 10% 인상하고, 'P2'이면 판매가를 15% 인상하고, 나머지는 동일 판매가로 검색하시오
-- DECODE 함수 사용, ALIAS는 상품명, 판매가, 변경 판매가

SELECT PROD_LGU AS 상품코드
, PROD_NAME AS 상품명
, PROD_SALE AS 판매가
, DECODE(
    SUBSTR(PROD_LGU,1,2)
    ,'P1', PROD_SALE * 1.1
    ,'P2', PROD_SALE * 1.15
    )AS 변경판매가
FROM PROD;

5. 상품 분류 중 앞의 두 글자가 'P1'이면 판매가를 10% 인상하고, 'P2'이면 판매가를 15% 인상하고, 나머지는 동일 판매가로 검색하시오.
-- DECODE 함수 사용, ALIAS는 상품명, 판매가, 변경 판매가대전측기사에서는 3월에 생일인(MEM_BIR) 회원을 대상으로 마일리지를 10% 인상해주는 이벤트를 시행하고자 한다. 생일이 3월이 아닌 회원은 짝수인 경우만 5% 이상처리한다.
-- ALIAS : 회원ID, 회원명, 마일리지, 변경마일리지

SELECT MEM_ID AS 회원ID
, MEM_BIR AS 생일
, MEM_NAME AS 회원명
, NVL(MEM_MILEAGE,0) AS 마일리지
, NVL(DECODE(
    SUBSTR(MEM_BIR,4,2)
    , '03' , MEM_MILEAGE * 1.1
    , DECODE( --else
    -- MOD(EXTRACT(MONTH FROM MEM_BIR),2)
        MOD(SUBSTR(MEM_BIR,4,2),2)
        ,0, MEM_MILEAGE * 1.05
        , MEM_MILEAGE
      )
      ),0) AS 변경마일리지
FROM MEMBER;

'DataBase' 카테고리의 다른 글

[Oracle DB 입문 12] JOIN(1)  (0) 2021.03.12
[Oracle DB 입문 11] 집계함수  (0) 2021.03.12
[Oracle DB 입문 09] SQL 함수  (0) 2021.03.08
[Oracle DB 입문 08] SQL 예제  (0) 2021.03.05
[Oracle DB 입문 07] SQL 예제  (0) 2021.03.03

관련글 더보기